Ошибка VBA-Word: ошибка отмены списка отмены, если использовать UndoRecord для записи «Заменить все», пока в списке отмены есть «Применить быстрый стиль».Как избежать? - PullRequest
2 голосов
/ 28 сентября 2019

В окне Word сделайте что-то вроде набора текста, форматирования шрифта, абзаца ..., чтобы убедиться, что список отмен не пуст, а затем измените стиль некоторого текста, щелкнув любой стиль на ленте.Запись с именем «Применить быстрый стиль» появится в списке отмены.Затем запустите макрос, как:

Sub SampleMacro()
Dim myUndoRecord As UndoRecord

Set myUndoRecord = Application.UndoRecord
myUndoRecord.StartCustomRecord ("VBA - Format Text")
'I do a lot of step here, but for this example, just simple like below
Selection.Characters(1).Bold = True     'just for example
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "Find Text"
    .Replacement.Text = "Replace Text"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
'Word undo list get error after below step
Selection.Find.Execute Replace:=wdReplaceAll
'no crash, no error message, but the entry "Apply Quick Style" 
'become to "Replace All", and Word can't go back before that entry
myUndoRecord.EndCustomRecord
End Sub

После этой строки кода:

Selection.Find.Execute Replace:=wdReplaceAll

Запись с именем «Применить быстрый стиль» в списке отмен станет «Заменить все», и яне может отменить (нажав Ctrl-Z или нажмите кнопку со стрелкой на панели быстрого доступа), чтобы вернуться на любой шаг до этой записи «Заменить все».Это всегда появляется в списке отмены, и Word больше не вернется.Как избежать этой ошибки?Я использую Word 2016 Pro 64 бит

1 Ответ

1 голос
/ 28 сентября 2019

Эта статья для Excel, но она актуальна для Word.

https://excel.tips.net/T002060_Preserving_the_Undo_List.html

Короче говоря, вы по своему усмотрению.

У вас есть два варианта:вернуться к ранее сохраненной версии;или, напишите макрос, который имитирует Undo, и убедитесь, что этот макрос работает, прежде чем запускать тот, который мешает со списком Undo


Update

Когда я создаюновый документ и следуйте вашим шагам, я могу последовательно воспроизвести проблему, которую вы описываете.Спасибо за то, что сделали это легко!

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

  • Обеспечить Replace All указан в Undo Stack выше Apply Quick Style.

  • Replace All применяется ко всему документу (проблема сохраняется, если Selection применяется к *1030* внутри документа)

Этот метод работал независимо от того, был ли он выполнен вручную с помощью Ctrl + H или был частью макроса.Достаточно было заменить символ на тот же символ.


Снимок экрана, показывающий точку выполнения после проблемной строки:

Can be avoided

* * * * * * * * * * * * * * * * * * * * * * * * * * *

*1050*.
...