【问题标题】:Find non-printable characters using MS word VBA使用 MS word VBA 查找不可打印字符
【发布时间】:2015-03-06 08:36:57
【问题描述】:

我编写了一个宏,它在 word 文档中搜索某个风卡定义的文本字符串,然后找到这个找到的匹配项属于哪个段落。一切正常,但现在我面临以下挑战:我需要找到不可打印的字符,特别是我需要找到 Ms 单词索引引用,它们以 {XE “text to index”} 之类的单词显示。 我发现了一个难题,当我调用 Ms Word 查找对话框 (CNTRL+F) 然后定义通配符搜索模式“XE“*””时,ms Word 会找到这些。但是,当我为 VBA 查找函数传递相同的模式时,它不会找到它们,因此我观察到手动调用的 Find 函数的行为与 VBA 的行为之间存在一些差异。

知道如何使用 VBA 找到这些不可打印的字符吗?

仅供参考,这就是我调用查找功能的方式


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

【问题讨论】:

标签: vba ms-word office-2007


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多