Тема: Повторный запуск макроса по нажатию Enter
Здравствуйте.
Скажите пожалуйста как осуществить возможность повторного запуска макроса по нажатию Enter. Сейчас AutoCAD просто повторят команду -VBARUN и просит ввод имени макроса.
Заранее спасибо.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Повторный запуск макроса по нажатию Enter
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте.
Скажите пожалуйста как осуществить возможность повторного запуска макроса по нажатию Enter. Сейчас AutoCAD просто повторят команду -VBARUN и просит ввод имени макроса.
Заранее спасибо.
Например оформить запуск макроса через Lisp
(defun c:mymacro () (vl-load-com) (vla-runmacro (vlax-get-acad-object) "D:/myproject/abc.dvb!mainsub") (while (/= (logand (getvar "cmdactive") 31) 0) (command pause)) (princ) )
После загрузки Lisp файла и первого запуска (надо набрать в командной строке mymacro), повторное нажатие Enter будет снова запускать процедуру mainsub, находящуюся в файле D:/myproject/abc.dvb
Но это работает, если в макросе не используется ThisDrawing.SendCommand
Спасибо. А методом одного лишь VBA это можно сделать, есть варианты?
А методом одного лишь VBA это можно сделать, есть варианты?
Нет. Т.к. средствами VBA нельзя создать команду.
Ок, буду использовать Lisp, всем спасибо.
Сделал как рекомендовал Anatoly (В Lisp делаю впервые) но не чего не вышло.
Последовательность моя была такая:
-создал файл HeatBalance.lsp c нижеприведенным кодом.
-добавил его в автозагрузку (_appload)
-запускаю команду mymacro, получаю ошибку "Ошибка Automation. Не удалось запустить макрос VBA"
(defun c:mymacro () (vl-load-com) (vla-runmacro (vlax-get-acad-object) "d:\Google Диск\Программы Excel\Heat balance\Heat_Balance_2.dvb!test") (while (/= (logand (getvar "cmdactive") 31) 0) (command pause)) (princ) )
Эта функция для конкретного макроса (test) а как сделать для всех макросов проекта Heat_Balance_2.dvb или несколько макросов?
Выходит что при каждом открытии AutoCAD нужно будет запускать mymacro?
Заранее спасибо, извините за наверно простые вопросы.
Насчет ошибки, возможно кириллица в пути,
попробуй
- короткий путь типа d:/Heat/Heat_Balance_2.dvb!test
- вручную загрузить проект .dvb, а потом запустить .lsp
- положить .lsp и .dvb в одну папку
Насчет нескольких макросов
-сделать свою панель инструментов, каждая кнопка - свой макрос
-в программе сначала выводить главную форму с кнопками, каждая кнопка - свой макрос
см.
-запускаю команду mymacro, получаю ошибку "Ошибка Automation. Не удалось запустить макрос VBA"
Замени в пути доступа все "\" на "\\" (или "\" на "/").
Замени в пути доступа все "\" на "\\" (или "\" на "/").
Это помогло, большое спасибо!
-сделать свою панель инструментов, каждая кнопка - свой макрос
-в программе сначала выводить главную форму с кнопками, каждая кнопка - свой макрос
Спасибо. Извините но не дополнял, как надо доработать макрос ранее Вами приложенный. Сейчас у меня так и есть грубо говоря 6 макросов каждый на своей кнопке. Вы предлагаете сделать одну кнопку которая открывала бы форму на которой располагались 6 кнопок?
Я предложил, как вариант, при запуске проекта VBA выводить начальную форму с несколькими кнопками.
1-я кнопка - Sub A(), вторая - Sub B() и т.д.
или
создать в автокаде панель инструментов с несколькими кнопками, каждая запускает свой макрос.
Ок. Вот сейчас есть панель ленты на которой 6 кнопок, каждая выполняет свой макрос. Как изменить:
(defun c:mymacro () (vl-load-com) (vla-runmacro (vlax-get-acad-object) "D:/myproject/abc.dvb!mainsub") (while (/= (logand (getvar "cmdactive") 31) 0) (command pause)) (princ) )
Что-бы при нажатии Enter, происходил повтор макроса одной из этих 6 кнопок? Спасибо.
Вообще-то лучше про Lisp спрашивать в лисповском разделе форума (я не знаток Lisp'a).
Сам использую нечто вроде этого:
На первой/второй/... кнопке:
^C^C^P(if (= startvar nil) (load "D:/...startfl"))(abc "1") ........................................................(abc "2")
Файл startfl.lsp
(defun startvar () t) (defun abc( par / ) (setq prmode par) (if (= xyz nil) (load "D:/...run-vba-proj.lsp"))) (xyz) (princ) )
Файл run-vba-proj.lsp
(defun xyz( / ....) (vl-load-com) (if (= (atoi prmode) 1)(vl-vbarun "D:/...myproj.dvb!sub1"))) (if (= (atoi prmode) 2)(vl-vbarun "D:/...myproj.dvb!sub2"))) ............ ............ (princ) )
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Повторный запуск макроса по нажатию Enter
Форум работает на PunBB, при поддержке Informer Technologies, Inc