Управление MS Excel с другого VBA приложения.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Уважаемые програмисты, собственно сабж:
У меня есть скрипт в MS Outlook, который сохраняет вложенные файлы из сообщений в определенную папку. Также есть реестр этих файлов в листе MS Excel. Ячейки гиперлинком линкуются к определенным файлам.
Теперь сама проблема, мне надо в скрипте Outlook запустить некий макрос (допустим HypLink )из MS Excel который автоматом делает линки. Но только не знаю что надо писать в Аутлуке.
Пожалуйста помогите.
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Может как-то так.
Файл с макросом должен быть открыт!

Код: Выделить всё

Application.Run "Книга1.xls!Макрос1"
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Pavel55 писал(а):Может как-то так.
Файл с макросом должен быть открыт!

Код: Выделить всё

Application.Run "Книга1.xls!Макрос1"
Так как скрипт запускается с Аутлука, мне надо указать что макрос находится в экселе. Как это указать? :confused:
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Тогда так. У меня из под Outlook работает.
На диске C:\ есть файл Test.xls в нём есть процедура Macro1. Файл Test.xls - закрыт!

Код: Выделить всё

Sub Макрос1()
Dim objXls As Object
    Set objXls = CreateObject("Excel.Application")
    objXls.Workbooks.Open "C:\Test.xls"
    objXls.Application.Run "Macro1"
    'objXls.Application.Visible = True
    objXls.Quit
    Set objXls = Nothing
End Sub
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Спасибо, щяс протестирую отвечу.
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Всё! отлично! Работает! Моя ошибка была в создании объекта. Пытался запустить не создавая объекта.
Еще вопросы:
А как можно запустить тоже самое но уже в открытом Экселе? Так как, эта книга у меня всегда открыта.
А можно ли передавать параметры макросу? например передать имя файла.
Заранее благодарен.
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Вот, у меня так работает.

Есть открытый Excel файл с таким макросом

Код: Выделить всё

Sub Macro1(iStr As String)
    MsgBox iStr
End Sub
В Outlook в Tools - References добавить ссылку на Microsoft Excel 11.0 Object Library и запустить такой макрос

Код: Выделить всё

Sub Макрос2()
'В Outlook в Tools - References добавить ссылку на Microsoft Excel 11.0 Object Library
Dim objXls As New Excel.Application
    Set objXls = GetObject(, "Excel.Application")
    objXls.Application.Run "Macro1", "Hello" 'Hello - это параметр для Macro1
End Sub
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Круто.
2 Pavel55 Спасибо огромное.
Такое очучение что исходный код VB разрабатовался участниками данного форума. !-)
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Да не за что ) До Вашего вопроса тут на форуме, я тоже не знал, как это можно сделать) Пришлось идти методом проб и ошибок ) Как, впрочем, и на другие вопросы на этом форуме)

P.S. Как Вы видите, в первом случае мы делали позднее связывание (Late Binding) и создавали объект Excel через CreateObject, а во втором случае мы уже использовали раннее связывание (Early Binding), но нам пришлось подключать библиотеку Excel в Tools-References и просто обращались к открытому приложению через GetObject.
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Ну я могу сказать что когда не знаешь не все так просто.

Pavel55, плиз, узнав своим методом тЫка, подскажи мне, как запускать макрос в уже открытом экземпляре Эксель?

Спасибо.
Ответить