Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 11:38   #1
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию Доступ к excel-файлу

Понимаю, что тема избитая, но нужной информации найти не могу.
Как из кода вордовского шаблона получить доступ к ячейкам таблицы в эксель-файле?
Мне нужно в многомерный массив (в ворде) скопировать данные из таблицы в экселе. Т.е. нужны команды для открытия эксель-файла и чтения ячеек таблицы из ворда. Аналогично понадобится запись в эксель-файл из переменных ворда.
Под массивом и переменными понимаю данные в языке VBA.
cw_o вне форума Ответить с цитированием
Старый 22.01.2013, 14:36   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Связь между программой Word и Excel с помощью ActiveX

Есть два варианта использования ActiveX для связи двух программ:
  1. с подключением библиотеки объектов нужной программы;
  2. без подключения библиотеки объектов нужной программы.

Связь между двумя программами с подключением библиотеки объектов нужной программы

Если нужно из программы Word работать в программе Excel, то в VBA подлючаем библиотеку: Tools - References... - Microsoft Excel Object Library.
Необходимые команды в коде, чтобы наступила связь между программами:
Код:
Sub Procedure_1()
    
    '1. С помощью "New" запускаем программу Excel.
    '2. Даём программе "Excel" имя "myExcel".
        'Затем через  имя "myExcel" можно обращаться к программе Excel
        'из программы Word.
    Dim myExcel As New Excel.Application
    Dim myBook As Excel.Workbook

    '3. Делаем программу Excel видимой, если надо.
    myExcel.Visible = True
    
    '4. Открываем книгу Excel (в скобках нужно указать необходимые данные)
        'и даём книге Excel имя "myBook". Через имя "myBook"
        'обращаемся к книге Excel из программы Word.
    Set myBook = myExcel.Workbooks.Open()

End Sub
Связь между двумя программами без подключением библиотеки объектов нужной программы
Код:
Sub Procedure_2()
    
    Dim myExcel As Object
    Dim myBook As Object
    
    '1. Запускаем программу Excel и даём программе "Excel" имя "myExcel".
        'Затем через  имя "myExcel" можно обращаться к программе Excel
        'из программы Word.
    Set myExcel = CreateObject(Class:="Excel.Application")
    
    '2. Делаем программу Excel видимой, если надо.
    myExcel.Visible = True

    '3. Открываем книгу Excel (в скобках нужно указать необходимые данные)
        'и даём книге Excel имя "myBook". Через имя "myBook"
        'обращаемся к книге Excel из программы Word.
    Set myBook = myExcel.Workbooks.Open()

End Sub

Примечание
  1. Если подключить библиотеку, то намного удобнее и быстрее писать код, т.к. если поставить точку, то появятся члены объекта.
    Других преимуществ подключения библиотеки - не знаю. Говорят, что с подлюченной библиотекой быстрее работает код, т.к. перед компиляцией кода, код уже знает, куда обращаться переменной, которая является именем объекта Excel. В коде выше это переменные myExcel и myBook.
  2. Для программы Excel код сначала надо писать в программе Excel. Добившись рабочего кода, переносить код в программу Word. На Форумах периодически появляются люди, которые показывают коды, которые они пишут в программе Word для Excel, и эти коды и в самой программе Excel не будут работать.
  3. Есть ещё другие способы связей двух программ, но эти связи используются реже и информацию тяжело найти о том, как эти связи сделать. Есть справочник Программирование на VBA 2002. Кузьменко. Глава 17 и 18. Работа с другими приложениями.

Последний раз редактировалось Скрипт; 22.01.2013 в 20:59.
Скрипт вне форума Ответить с цитированием
Старый 22.01.2013, 15:25   #3
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Не пойму, почему у меня пункт Tools - References... в VBA неактивен
Второй способ пытаюсь проверить, вроде код исполняется, но я не вижу, чтобы открылся xlsx-документ, который я задала в качестве параметра Open

Последний раз редактировалось cw_o; 22.01.2013 в 15:44.
cw_o вне форума Ответить с цитированием
Старый 22.01.2013, 16:07   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Второй способ пытаюсь проверить, вроде код исполняется, но я не вижу, чтобы открылся xlsx-документ, который я задала в качестве параметра Ope
ну так нужно приложение сделать видимым:
Код:
myExcel.Visible = True
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 22.01.2013, 17:24   #5
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Ок, разобралась со вторым способом. Всё, что нужно пока, работает. Но хотелось бы и первый добить, чтобы видеть подсказки при написании кода.
cw_o вне форума Ответить с цитированием
Старый 22.01.2013, 20:56   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
cw_o: Не пойму, почему у меня пункт Tools - References... в VBA неактивен
прокрутите список с библиотеками до Microsoft Excel Object Library и сделайте скрин-шот.
Выложите скрин-шот на форуме.
Скрипт вне форума Ответить с цитированием
Старый 23.01.2013, 13:38   #7
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Сам пункт Tools - References в меню был неактивен. Сейчас активен, выбрала Microsoft Excel Object Library и всё работает. Не знаю, в чём тогда была проблема.
Правильно я понимаю, что эта галочка должна быть установлена в том числе на компе, на котором запускается макрос?

Последний раз редактировалось cw_o; 23.01.2013 в 13:52.
cw_o вне форума Ответить с цитированием
Старый 23.01.2013, 13:57   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

cw_o, этот флажок относится к VBA-проекту. Каждый документ в программе Word имеет VBA-проект. Когда вы ставите этот флажок - то изменяете настройки VBA-проекта.

Если у вас макросы находятся в Normal, то этот флажок относится к Normal. Если вы перенесёте Normal на другой компьютер, то флажок ставить не надо. Если перенесёте просто код: в виде файла с расширением bas или просто скопировав код и вставив в текстовый документ, то флажок надо будет ставить на другом компьютере.

Ещё при использовании библиотеки может быть следующая нестыковка: если на компьютерах разные версии Excel, например 2003 и 2007, то имя библиотеки будет разное. Соответственно выбранная библиотека не будет работать и надо будет флажок ставить заново, даже если вы перенесёте сам файл Normal. И надо будет не только поставить флажок, но ещё удалить и неработающий флажок.

Последний раз редактировалось Скрипт; 23.01.2013 в 14:00.
Скрипт вне форума Ответить с цитированием
Старый 23.01.2013, 16:24   #9
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Ясно, спасибо за помощь
cw_o вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет на доступ к файлу Strumok Помощь студентам 2 14.01.2011 14:51
Доступ к файлу Fezdipekla Microsoft Office Access 1 17.09.2010 18:23
...доступ к файлу.... maxvip Операционные системы общие вопросы 6 26.04.2010 10:30
Доступ к файлу panda88 Общие вопросы Delphi 3 20.01.2010 13:34
Получить доступ к файлу yngwie Win Api 1 08.04.2009 14:11