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. Хотя можно и обычный экзешник, тогда придётся запускать её вручную, а уж она пусть рулит и экселем (с его макросами), и акадом (с его).