Коллекция похожа на Document.Revisions - PullRequest
0 голосов
/ 01 мая 2020

Использование VBA в Word 2013.

В объектной модели Word Document.Revisions предоставляет набор объектов ревизий (отслеживаемые изменения), и вы можете принимать или отклонять их программно. Кроме того, сама коллекция обладает свойством Count.

Я не нашел ни одной функции в объектной модели, предоставляющей счетчик или историю отмен или повторов. Чтобы уточнить, я ищу способ определить, сколько изменений user находятся в стеке Undo и стеке Redo в данный момент (поскольку я не редактирую содержимое документа с помощью макроса). Было бы бонусом видеть отдельные изменения, которые можно отменить или повторить, но без этого я в порядке.

Я знаю, что могу использовать методы Document.Undo и Document.Redo, но я не вижу способа получить количество изменений, которые можно отменить, или количество отмененных изменений, которые можно повторить.

Полагаю, я мог бы просто выполнить итерацию по стеку, так сказать, вызывая Document.Undo или .Redo и проверяя возвращаемое значение, чтобы увидеть, было ли там что-нибудь, затем стравливая то, что я только что отменил / переделал. Я надеялся на что-то похожее на Document.Revisions.Count.

РЕДАКТИРОВАТЬ: мне нужно получить доступ к стеку повтора. Это начинает выглядеть так, как будто объектная модель не раскрывает этот объект. Старый (2013) вопрос, записанный здесь , предполагает, что такого объекта / коллекции не существует (ищите «redorecord»).

Есть идеи?

Спасибо!

1 Ответ

1 голос
/ 02 мая 2020

Вы можете создать и развернуть пользовательскую UndoRecord, чтобы вы могли откатить все свои действия в один go в конце, с помощью кода, подобного ActiveDocument.Undo, без необходимости отслеживать все промежуточные изменения. См .: https://docs.microsoft.com/en-us/office/vba/word/Concepts/Working-with-Word/working-with-the-undorecord-object

Чтобы развернуть это для действий конечного пользователя в самом документе, просто используйте:

Option Explicit
Dim objUndo As UndoRecord

Sub CreateUndoRecord()
Set objUndo = Application.UndoRecord
objUndo.StartCustomRecord
End Sub

, чтобы создать пользовательскую запись, а затем, когда вы закончили, очистите лот с:

Sub ClearUndoRecord()
objUndo.EndCustomRecord
ActiveDocument.Undo
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...