Не удается запустить vba-приложение (макрос) из лиспа
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Не удается запустить vba-приложение (макрос) из лиспа

Не удается запустить vba-приложение (макрос) из лиспа

Ответ
Поиск в этой теме
Непрочитано 17.11.2006, 15:29 #1
Не удается запустить vba-приложение (макрос) из лиспа
mmmx
 
Москва
Регистрация: 06.07.2006
Сообщений: 42

Лисп-файл (реактор, который должен запускать vba):
Код:
[Выделить все]
(vl-load-com)

(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if

(if (not *vlr-cmd*)
  (setq *vlr-cmd* (vlr-command-reactor
                    nil
                    '(
                      (:vlr-commandwillstart . beforechange)
                      )
                    ) ;_ end of VLR-Command-Reactor
        ) ;_ end of setq
  ) ;_ end of if

(defun beforechange(calling-reactor commandInfo)
  (print "test")
  (vl-vbaload "D:\\_Мои документы_\\autocadMac.dvb")
  (vl-vbarun  "Module8!macros"); пробовал писать и просто macros
)
Макрос (находится в Module8 файла autocadMac.dvb):
Код:
[Выделить все]
Public Sub macros()
ThisDrawing.Utility.Prompt "TTTTTTTTTTT"
End Sub
Не работает!
Что делаю неправильно, подскажите пожалуйста? Проверял на Акадах 2002 и 2006, не получается.
Заранее благодарен!
Просмотров: 3344
 
Непрочитано 17.11.2006, 18:21
#2
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


А так если:

Код:
[Выделить все]
 (vl-load-com)
  (vl-vbaload (findfile "D:\\_Мои документы_\\autocadMac.dvb") 
  (vl-vbarun
    (strcat (findfile "D:\\_Мои документы_\\autocadMac.dvb") "!Module8.macros"))
  )
  (vla-unloaddvb (vlax-get-acad-object)  "D:\\_Мои документы_\\autocadMac.dvb")
  (princ)
)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 17.11.2006, 23:59
#3
mmmx


 
Регистрация: 06.07.2006
Москва
Сообщений: 42


Прошу прощения, немного запутал ситуацию, сразу пытаясь засунуть запуск макроса в реактор.
Запуск макроса из лиспа прекрасно работает в таком варианте:
Код:
[Выделить все]
(defun ccc()
  (vl-vbaload "C:/Documents and Settings/Michael/Мои документы/autocadMac.dvb")
  (vl-vbarun  "macros")
  )
А вот из функции отклика реактора - нет.
Попробовал из реактора вызывать эту процедуру (ссс) - все равно не срабатывает...
В реакторе это как-то блокируется, что ли?..
Помогите разобраться!
mmmx вне форума  
 
Автор темы   Непрочитано 18.11.2006, 00:12
#4
mmmx


 
Регистрация: 06.07.2006
Москва
Сообщений: 42


вот текст лиспа с тестовым выводом в командную строку (print "test ccc" и print "test reactor"):
Код:
[Выделить все]
(vl-load-com)

(defun ccc()
  (print "test ccc")
  (vl-vbaload "C:/Documents and Settings/Michael/Мои документы/autocadMac.dvb")
  (vl-vbarun  "macros")
  )

(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if

(if (not *vlr-cmd*)
  (setq *vlr-cmd* (vlr-command-reactor
                    nil
                    '((:vlr-commandwillstart . beforechange))
                    ) ;_ end of VLR-Command-Reactor
        ) ;_ end of setq
  ) ;_ end of if

(defun beforechange(calling-reactor commandInfo)
  (print "test reactor")
  (ccc)
)
Вот лог выполнения команды (ссс). Первый проход по (ссс) - за счет собственно ее вызова, второй - срабатывание реактора. Из реактора проход по (ссс), макрос запустился:
Цитата:
Command: (ccc)

"test ccc" _.-VBARUN
"test reactor"
"test ccc"
Macro name: macros TTTTTTTTTTT
Command: "macros"
А вот лог срабатывания реактора.Проход по функции отклика реактора ("test reactor"), затем по процедуре ссс ("test ccc" ), макрос не запустился... :
Цитата:
Command: _line
"test reactor"
"test ccc" Specify first point:
Specify next point or [Undo]:
Specify next point or [Undo]:
mmmx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Не удается запустить vba-приложение (макрос) из лиспа