我编写了一个宏,它在word文档中搜索某个风卡定义的文本字符串,然后找到找到的匹配所属的段落。一切正常,但现在我遇到了以下挑战:我需要找到不可打印的字符,特别是我需要找到Ms字索引引用,它们显示在像{XE“text to index”}这样的单词中。 我发现了一个两难的问题,那就是当我打电话给Ms Word查找对话框(CNTRL + F)然后定义通配符搜索模式'XE“*”'然后ms Word找到这些。但是,当我为VBA查找函数传递相同的模式时,它却找不到它们,所以我观察到手动调用Find函数的行为与VBA中的行为之间存在一些区别。
知道如何使用VBA找到这些不可打印的字符吗?
仅供参考,这就是我调用find函数的方法
With range1.Find
.Text = searchString
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
‘some code goes here
End With
答案 0 :(得分:0)
KazJaw,谢谢你的链接,内容非常丰富。 但是,我必须说,它对我的情况没有帮助。我的问题仍然是MS Word Search会产生不同的结果,这取决于它是手动调用(CNTRL + F)还是来自VBA(range.find)。不同之处在于,手动调用的搜索功能会找到不可打印的与索引相关的字符(只要它们显示),但VBA调用的函数不会这样做。
在某些时刻,我确定它已修复,通过插入行以编程方式显示不可打印的字符(ActiveWindow.ActivePane.View.ShowAll = True
)。重要的是,它是以编程方式,与在文档上运行宏相反,它是手动启用的。但即使在这种情况下,行为也非常不稳定:它只能在完全相同的文档中使用10次中的1次。在那一刻,我必须说我认为我因为这种不稳定而变得疯狂,但我的同事证实他独立地遇到了同样的问题。
因此我们得出结论,使用range.find
函数搜索不可打印的字符不会在MS Word中产生稳定的结果。
在我们的例子中,我们通过直接搜索索引(字段对象)来达到我们的目标,与搜索不可打印字符的模式相反
For Each aField In range1.Fields
If aField.Type = 4 Then
aField.Select
pageOfFoundIndexEntry = Selection.Information(wdActiveEndPageNumber)
textOfFoundIndexEntry = Mid(aField.Code, 4)
...