Читать историю отмен в VBA - PullRequest
5 голосов
/ 19 мая 2009

В Word 2003 у меня есть довольно простой фрагмент VBA, который меняет шрифт документа на «экологический шрифт» (длинная история) и вызывает диалоговое окно «Печать».

Когда пользователь нажимает кнопку «Отмена» или «ОК», код отменяет действие, чтобы отменить изменение.

Проблема в том, что иногда, когда я нажимаю «ОК» для печати документа, два действия необходимо отменить («изменение шрифта» и «обновление полей»). Я не могу предсказать, когда это произойдет.

Есть ли способ прочитать последний элемент в буфере отмены Word? Таким образом, я могу просто нажимать «Отмена» до тех пор, пока изменение шрифта не будет завершено.

Edit: Окончательный код (вырублено):

ActiveDocument.Range.Bookmarks.Add ("_tempEcoUndoStart_") 
ActiveDocument.Content.Font.Name = "Nanonymus Eco Sans" 
Dialogs(wdDialogFilePrint).Show 
While ActiveDocument.Bookmarks.Exists("_tempEcoUndoStart_") 
    ActiveDocument.Undo 
Wend

Ответы [ 2 ]

4 голосов
/ 20 мая 2009

Вы можете использовать трюк для отмены транзакции в Word, похожей на «транзакцию». В начале макроса поместите специальную закладку на весь документ. Вы должны удалить эту закладку снова, когда вы закончите с вашим макросом. Теперь при вызове команды отмены повторите отмену, пока в документе есть ваша специальная закладка.

Следующий связанный вопрос имеет детали:

Можно ли создать транзакцию отмены в Word или Excel? (VSTO)

0 голосов
/ 19 мая 2009

Я не проверял, но, возможно, вы можете использовать UndoClear перед вашими действиями и рассчитывать на отмену после?

ActiveDocument.UndoClear
ActiveDocument.Undo 2
...