我想在整个word文档中突出显示某些字符串(从列表中)。
最简单的选择似乎是查找/替换。但是,如果我要查找的字符串包含修订标记,那么(可能是由于某些单词错误)内部超链接会发生以下情况:
如果字符串的第一个字符被标记为修订版,则根本找不到该字符串
如果字符串的任何其他字符被标记为已删除的修订版,则将找到该字符串,但不会完全选中该字符串。相反,选择将是标记为删除的较短字符数(例如,如果在'strring'中第3个字符被标记为已删除的修订,则搜索'string'将返回选择'strin')
我的第二种方法是通过在搜索字符串前加上一个wildchard字符来识别这些术语(以便找到那些第一个字符已被修改的术语),然后将选择范围扩展为整个单词。
Dim strTerm as String
strTerm = "string"
Selection.Find.Execute FindText:="^?" & strTerm, _
MatchCase:=False, MatchWholeWord:=False, _
MatchAllWordForms:=False, Forward:=True, _
Wrap:=wdFindStop, Format:=False
If Selection.Find.Found Then
Selection.MoveStart Count:=1 'exclude wildchart character from found string
Selection.Expand 'expand selection to whole word
end if
这将可靠地找到所有术语,但如果术语包含超链接中的第一个或最后一个单词,无论我做什么,我都无法选择它,我将始终选择整个超链接字段。
我需要保留原文,所有修订标记都不加改动。我只能添加亮点。
有人能让我走上正轨吗?
答案 0 :(得分:1)
我找到了问题的答案。 它不是非常优雅,但是实际的工作 - 围绕上面提到的word-bug(我认为这确实是一个错误而且没有故意的行为)......
Dim strTerm as String 'input: a term taken from a list
Dim strWholeTerm as String 'output: a word within the text that starts as strTerm
' but might differ in ending
'look for the next term from the list (here "string")
strTerm = "string"
Selection.Find.Execute FindText:="^?" & strTerm, _
MatchCase:=False, MatchWholeWord:=False, _
MatchAllWordForms:=False, Forward:=True, _
Wrap:=wdFindStop, Format:=False
If Selection.Find.Found Then
Selection.MoveStart Count:=1 'exclude wildchart character
Selection.Expand 'expand selection to whole word
end if
'check whether .Expand has selected the whole hyperlink
'and not just the word within which strTerm had been found
If Selection.Start < rngFoundString.Start Then
Options.DeletedTextMark = wdDeletedTextMarkDoubleStrikeThrough 'deleted revisons visible
Set rngWholeTerm = Selection.Range 'get end of whole term
rngWholeTerm.SetRange Start:=rngFoundString.Start, End:=rngWholeTerm.End 'define whole term
rngFoundString.Select
Selection.Collapse 'start search at beginning of whole term
Selection.Find.Execute FindText:=rngWholeTerm.Text 'select whole term
Options.DeletedTextMark = wdDeletedTextMarkHidden 'deleted revisions invisible
End If
'at this point the whole word - starting as strTerm - has been selected
如果有人知道一种更直接的方法可靠地标记文本中的单词(可能有一系列不同结尾的单词),包括带有超链接的单词,并包含随机位置包含修订标记的单词,I我很想知道它。