Как сделать макрос "атомный" - PullRequest
0 голосов
/ 12 мая 2009

IOW, как мне заставить OOo отменить / повторить работу должным образом при выполнении макроса?

Это связано с моим предыдущим вопросом: # 853176

Ответы [ 4 ]

1 голос
/ 03 января 2014

для тех из нас, кто предпочитает JavaScript для написания макросов OOo, вот минимальный фрагмент, который должен работать (проверено, но я выделил этот код из более широкого контекста):

importClass( Packages.com.sun.star.document.XUndoManager );
importClass( Packages.com.sun.star.document.XUndoManagerSupplier );
var doc           = XSCRIPTCONTEXT.getDocument();
var undo_manager  = UnoRuntime.queryInterface(XUndoManagerSupplier, doc).getUndoManager();
undo_manager.enterUndoContext( 'your descriptive title here' ); 
// get stuff done
undo_manager.leaveUndoContext(); 
0 голосов
/ 02 мая 2018

Начиная с 2018 года (Office 365), решение из Сделать отмененный код VBA за один шаг работает нормально. Также видел такое же решение на сайте Microsoft, но я не могу найти эту ссылку сейчас.

Sub YourMacroName
    Dim objUndo As UndoRecord 
    Set objUndo = Application.UndoRecord 
    objUndo.StartCustomRecord ("Your unique string - e.g. the macro name")
    ' your multi-step macro goes here
    objUndo.EndCustomRecord
End Sub
0 голосов
/ 29 сентября 2012

Вы можете поговорить с UndoManager, позвонив enterUndoContext() в самом начале вашего макроса и затем leaveUndoContext() в конце. Например:

Dim undo As Object
undo = ThisComponent.UndoManager
undo.enterUndoContext("MyAtomicTest")
...
[YOUR COMPLEX OPERATIONS HERE]
...
undo.leaveUndoContext

Это создает атомарную операцию отмены, которая отображается для пользователя как «MyAtomicTest».

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

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

Я предполагаю, что подобный подход будет работать и с OpenOffice.org.

См. Можно ли создать транзакцию отмены в Word или Excel? (VSTO) для более подробной информации.

...