使用MS word VBA查找不可打印的字符

时间:2015-01-08 09:18:30

标签: word-vba office-2007

我编写了一个宏,它在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

1 个答案:

答案 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) ...