gpt4 book ai didi

VBA-Word 错误 : Undo list get error if use UndoRecord to record "Replace All" while there is a "Apply Quick Style" in the undo list. 如何避免?

转载 作者:行者123 更新时间:2023-12-02 00:50:19 25 4
gpt4 key购买 nike

在 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 位

附加信息:通过按 Ctrl+C、Ctrl+V(从其他文档到当前文档)而不是“应用快速样式”使用复制粘贴也会出错,撤消列表中的条目“粘贴”也重命名为“全部替换”。不同的仍然可以在该条目之前返回。如果使用 UndoRecord 记录“全部替换”,也许还有另一种方式会出错。

最佳答案

更新 10/01

一个工作解决

该问题特定于 wdReplaceAll .如果该特定 wdConstant 被省略或替换,则“应用快速样式”将不会被重命名,并且撤消堆栈仍可访问。

我们很幸运,Find.Execute返回一个 bool 值(True 表示成功)。这意味着,我们可以循环使用 wdFindOne替换所有匹配项并使用 .Execute = False作为退出条件。

加字Do在您的上方 With阻止并用 .Execute 替换该行.

Do
With Selection.Find
[....]
End With
Loop While Selection.Find.Execute(Replace:=wdReplaceOne)

温馨提示:某些情况会造成无限循环(例如将“A”替换为“A”)。因此,您应该考虑使用第二个退出条件或替换 wdFindContinuewdFindAskwdFindStop .

更新 9/30

(编辑 10/01)哎呀!! Apply Quick Style 条目没有重命名(好),但我错误地认为当存在相同的限制时可以达到撤消堆栈(坏)。还有,今天测试,学到了 还有第三个条件:.Execute不能找到任何匹配项 (更差)。我只想说,这是如何不测试解决方案的示范性演示,我希望每个人都吸取教训!

当我创建一个新文档并按照您的步骤操作时,我可以始终如一地重现您描述的问题。谢谢你让这一切变得简单!

只要我能够复制问题,我也可以通过满足两个条件来防止它。
  • 确保 Replace All列于 Undo Stack以上 Apply Quick Style .
  • Replace All应用于整个文档(如果 Replace All 应用于文档中的 Selection,问题仍然存在)

  • 无论是使用“Ctrl + H”手动完成还是作为宏的一部分,此方法都有效。用相同的字符替换一个字符就足够了。

    显示问题行后的执行点的屏幕截图:

    Can be avoided
    Undo Stack包含一个有意放置的 Replace All保存 Apply Quick Style .
    本文适用于 Excel,但适用于 Word。

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

    简而言之,你是靠自己的。

    您有两个选择:恢复到以前保存的版本;或者,编写一个模仿 Undo 的宏并确保该宏正在运行,然后再启动与 Undo 列表困惑的宏

    关于VBA-Word 错误 : Undo list get error if use UndoRecord to record "Replace All" while there is a "Apply Quick Style" in the undo list. 如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58146553/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com