Vba 从选择中删除高亮显示

Vba 从选择中删除高亮显示,vba,ms-word,Vba,Ms Word,我有一个脚本,如果我从VBA编辑器启动它,它就会运行,但如果我直接从Word启动它,它就不会运行 该脚本定义Word文档中的首字母缩略词。在Word文件出现之前,它要经过一级编辑,编辑器会突出显示术语。因为我的脚本也使用高亮显示,所以我让它用彩色文本替换现有的高亮显示 'Turn track changes off, replace yellow highlighting from FLEs with colored text to avoid confusion between 'FLE hi

我有一个脚本,如果我从VBA编辑器启动它,它就会运行,但如果我直接从Word启动它,它就不会运行

该脚本定义Word文档中的首字母缩略词。在Word文件出现之前,它要经过一级编辑,编辑器会突出显示术语。因为我的脚本也使用高亮显示,所以我让它用彩色文本替换现有的高亮显示

'Turn track changes off, replace yellow highlighting from FLEs with colored text to avoid confusion between
'FLE highlighting and acronym defininer highlighting
ActiveDocument.TrackRevisions = False
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting

With Selection.Find
    
    .Highlight = True
    
    With .Replacement
    
        .Highlight = False
        .Font.Color = RGB(155, 187, 89)
    
    End With
    
    .Execute Replace:=wdReplaceAll, Wrap:=wdFindStop

End With

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
当我从Word运行脚本时,它跳过了整个代码块。其他一切都正常工作,但第一级编辑的高亮显示仍然存在

当我从VBA编辑器运行时,一切都按预期运行

当我进行其他更改时,例如,我只是更新了宏调用的其中一个表单,以添加对绿色文本的解释,无论我从何处开始脚本,它们都会通过

下面是整个脚本

选项显式 作为字符串的公共定义5 次缩略词定义者 '定义工作簿和工作表,打开Excel Dim xlApp作为Excel.Application 将xlWbk设置为工作簿 Dim FN作为字符串:FN=C:\Users\&Environ$Username&\AppData\Roaming\Gartner\AcronymDefiner\AcronymDefiner.xlsx 按长度调整当前行:当前行=2 Set xlApp=New Excel.Application xlApp.Visible=False 设置xlWbk=xlApp.Workbooks.OpenFN '确定轨迹更改是打开还是关闭,以便可以在宏结束时返回到原始状态 Dim Track_更改为布尔值 如果ActiveDocument.TrackRevisions=False,则 跟踪更改=错误 如果结束 '更改轨迹更改中的简单视图,以防止在整个宏的搜索中出现删除的文本 使用ActiveWindow.View.RevisionsFilter .Markup=wdRevisionsMarkupSimple .View=wdRevisionsViewFinal 以 '关闭轨迹更改,将FLE中的黄色高亮显示替换为彩色文本,以避免两者之间的混淆 “FLE突出显示和首字母缩略词定义突出显示 ActiveDocument.TrackRevisions=False Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting 选择。查找 .Highlight=True 替换 .Highlight=False .Font.Color=RGB15518789 以 。执行Replace:=wdReplaceAll,换行:=wdFindStop 以 Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting '开始首字母缩略词定义循环
当当前_行时执行此操作取决于您如何调用宏,一开始可能不存在选择。记住Selection.Find本质上是指在当前选择指定的范围内查找[任何内容]。看到您使用selection.Homekey Unit:=WdStory将所选内容折叠为零,我试图找出代码工作正常但失败的原因。由于某种原因,当选择为0或1时,Word似乎同意搜索整个文档。但是零并不等于零

更好的方法是指定要搜索的范围或选择。无论哪种方式,如果您希望搜索文档的整个正文,它都应该是ActiveDocument.Content。当您的代码基于使用选择对象时,您必须进行这样的选择,例如ActiveDocument.Content.Select


@Slai和我建议不要使用选择对象。改为使用范围对象。了解差异

我建议指定范围,而不是使用选择。例如,ActiveDocument.Range而不是Selection感谢您的回复。下一次我有机会做这件事的时候,我会考虑改变一下。因为我经常使用selection.homekey,所以我不得不进行一些重构。我会在那一点上更新。