作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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
最佳答案
更新 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)
wdFindContinue
与
wdFindAsk
或
wdFindStop
.
.Execute
不能找到任何匹配项 (更差)。我只想说,这是如何不测试解决方案的示范性演示,我希望每个人都吸取教训!
Replace All
列于 Undo Stack
以上 Apply Quick Style
. Replace All
应用于整个文档(如果 Replace All
应用于文档中的 Selection
,问题仍然存在)Undo Stack
包含一个有意放置的
Replace All
保存
Apply Quick Style
.
关于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/
我是一名优秀的程序员,十分优秀!