Надо заключить все действия твоего макроса в UNDO-блок.
Для этого в начале тела макроса вызываешь метод StartUndoMark объекта ActiveDocument, а в конце - EndUndoMark того же объекта. Таким образом, все твои команды, вызванные из макроса, могут быть отменены одним Унду. Не знаю, поможет ли это.
Ещё попробуй поставить звёздочку* в самом начале кнопочного макроса, или сразу после ^C^C. Звёздочка вызовет зацикливание кнопочной команды.
И наконец, меня осенило. Читай правильный ответ!
Дело в том, что никакой команды твоя кнопка не вызывает!!! Она вызывает лисп-ФУНКЦИЮ (vl-vbarun). Так вот, в акаде существует КОМАНДА VBARUN, которая делает то же самое - вызывает бейсик-макрос. Но если ты напишешь кнопку с участием этой команды, то, во-первых, пиши так: _.-VBARUN, чтобы подавить вылетающее диалоговое окно, где запрашивается имя макроса. А во вторых, по кнопке ENTER будет вызываться VBARUN, да, но, скорее всего, без параметра, то есть она будет снова тупо запрашивать имя бейсик-макроса.
И вот, наконец, правильное решение (я мог привести его сначала, но надеюсь, вся вышеизложенная инфа не будет лишней:)). Так вот, следует в Лиспе определить некую команду, например, так:
(defun c:my_super_command ( / ) (vl-vbarun "Leader_...") (princ))
а в кнопке - ставить вызов ^C^Cmy_super_command;
Надеюсь, это должно сработать:)
Конечно, ты понимаешь, что определение команды (через defun) следует запускать ДО вызова кнопочного макроса. Для этого достаточно включить его в файл автозапуска acaddoc.lsp.