Тема: Запуск макроса excel

Добрый день!!!
проблема такая есть
макрос в acade, который обработывает данные с чертежа и потом экспортирует их в excel, в шаблоне excel- я тоже имеются в наличии свои макросы.
нужно в акаде запустить макрос находящийся в екселевском шаблоне.
извините за стиль, буду рад любым вариантам.

Re: Запуск макроса excel

Просмотри прошлые темы...
Это уже не раз было.
Там есть ответы.

Re: Запуск макроса excel

Andrey пишет:

нужно в акаде запустить макрос находящийся в екселевском шаблоне.

Когда-то эта тема меня тоже интересовала, и вот что я нашёл: http://www.rsdn.ru/article/com/eventsinscript.xml
Итак, если в экселе объявить (с ключевым словом WithEvents !) объект класса, включающего Public какой-нибудь штатный акадовский объект, тогда можно написать в том же классе обработчики событий для этого объекта. Теперь код. В экселе создаём модуль класса Class1 и пишем там:

Public WithEvents acadapp As AutoCAD.AcadApplication
Sub acadapp_begincommand(ByVal commname As String)
  MsgBox "Excel says: acad command " & commname & " started!"
End Sub

Затем создаём обычный модуль (а можно в модуле книги или листа) и пишем:

Dim aa As Class1
Sub init_aa()
  Set aa = New Class1
  Set aa.acadapp = New AcadApplication
  aa.acadapp.Visible = True
End Sub
Sub clear_aa()
  aa.acadapp.Quit
  Set aa = Nothing
End Sub

При этом в референсах Экселевского VBA нужно упомянуть акадовскую библиотеку типов, иначе ничего не выйдет: Tools -> References... -> "AutoCAD 2004 Type Library" поставить птичку. Обратите внимание, в акаде не написано ни строчки кода! Теперь в Экселе по Alt-F8 запускаем макрос init_aa. Через некоторое время появляется окно акада ! Самое классное: если начать выполнять любую команду, то эксель замигает внизу, на панели задач !!! Если посмотреть, что с ним, то увидим сообщение о том, какая именно команда Акада запущена.
Синтаксис события StartCommand я взял из акадовского хелпа, при этом важно проставить ByVal и правильно проставить количество, порядок и тип параметров события.
Вот так это работает в рамках VBA, через события штатных объектов "чужой" программы. Но, наверное, лучше сделать программу-посредник на VB ? Можно даже реализовать её в виде ActiveX-сервера в формате DLL. Хотя можно и обычный экзешник, тогда придётся запускать её вручную, а уж она пусть рулит и экселем (с его макросами), и акадом (с его).

Re: Запуск макроса excel

ну и понаписал я... надеюсь, не без пользы:)
Вопрос то ваш намного проще решается. К счастью, в объектной модели как акада, так и экселя есть методы для запуска макросов. Соответственно, можно вызывать эти методы извне, хоть из веб-странички. В акаде этот метод называется RunMacro, в экселе - просто Run.
В акаде пишем:

Dim eapp as Excel.Application
Set eapp = new Excel.Application
eapp.Run Path_and_name_of_Macro, Par1, Par2, ...

Есесно, не забываем установить референс на библиотеку типов екселя и необходимости присутствия нужного макроса в екселевском документе.

Re: Запуск макроса excel

Maxim T спасибо большое, признатся, я такого развернутого ответа не ожидал, еще раз спасибо буду пробовать.

Re: Запуск макроса excel

Доброе время суток!!!
не подскажите почему после переустановки офиса с ХР на 2003 полетела VBA процедура сохранения в ехель?
прописана была так:
On Error GoTo Err_btnSendToExcel_Click
    '
    Dim strFile As String
    'Открываем диалог
    strFile = funGetSaveFileName(Me.hWnd, _
            "MS Excel(*.xls)" & Chr$(0) & "*.xls", _
            "searchresult.xls", "Экспорт отчёта в MS Excel", "xls", CurDir)
    'Проверяем файл
    If strFile <> "" Then
        'DoCmd.OutputTo acOutputForm, "", acFormatXLS, strFile, True
        Test strFile
        'TXLOut ""
    End If
    'frmSearchResultChild1
Exit_btnSendToExcel_Click:
    Exit Sub
Err_btnSendToExcel_Click:
    MsgBox Err.Description
    Resume Exit_btnSendToExcel_Click
End Sub
заранее брагодарен

Re: Запуск макроса excel

> nemetz
Скорее всего, что в проекте, который содержит эту процедуру есть ссылка (reference) на библиотеку старого офиса (хпшного).
открой окно Tools->References
там будет: Missing - Microsoft Excel 10.0 Object Library
надо сослаться на новую библиотеку