在 Word 中查找包含交叉引用的字符串 VBA

Find a string that contains a cross reference in Word VBA

我的代码中的 objective 是为了能够使用 VBA 搜索一组关键术语,以便能够应用粗体格式。我正在尝试将代码设置为期望以下格式的字符串:

这里 # 符号代表数字,@ 稍后代表小写字母。我相信我编写的代码能够找到整个文档的通用字符串,但是 #'s 和 @'s 将交叉引用到文档中的某个地方,而且我的脚本似乎无法找到由于交叉引用的字符串。

注意:我在我的 HTML 标签中放置了空格,因为我想在它们执行之前显示标签的样子。

此代码的目的是创建一个动态文档,该文档的项目随着文档的更改而更新,但我打算将文档转换为 HTML 并且我有 JavaScript 看起来为文本创建标签并应用代码覆盖。我有 运行 需要预处理 Word 文档以确保格式一致,无论如何应用粗体。如果 Item 加粗然后 # 加粗导致 html 看起来像 < b>Item< b> # 就会出现格式问题,我发现很难找到这些带有 JavaScript 的字符串应用编码。

Sub FindTheText()
Dim test As Variant
Set test = ActiveDocument.Range.Find
With Selection.Find
    .ClearFormatting
    .Text = "Item [0-9]"
    .MatchWildcards = True
    .MatchCase = False
    .MatchWholeWord = True
    .Wrap = wdFindContinue
End With
Selection.Find.Execute
End Sub

这只是一个示例代码,因此我需要在循环中创建一系列命令来查找我期望的每种类型的 #/@ 组合。这至少是我的计划,一旦我能掌握基础知识

为了演示我需要的输出,我将输入一个示例段落,然后输入一个错误 HTML 代码和良好 HTML 代码的示例。

示例段落

我的示例代码应该能够找到项目 3aa 并应用粗体,以便在 html 中应用单个粗体标记。项目可能会有所不同,但我希望我能看到一个或两个数字和可能的一两个字母,它们会从项目 1 到项目 1z 到 99zz 不等,所以我需要为所有情况做好准备。

错误HTML 输出

< p>我的示例代码应该能够找到 < b>Item < b>3aa 并应用粗体,以便在 html 中应用单个粗体标记. Items 可能会有所不同,但我希望我能看到一个或两个数字和可能的一两个字母,它们从 < b>Item < b>1 到 < b>Item < b>1< /b>< b>z 到 < b>Item < b>99< b>zz 所以我需要为所有情况做准备。

好HTML输出

< p>我的示例代码应该能够找到 < b>Item 3aa 并应用粗体,以便在 html 中应用单个粗体标记。项目可能会有所不同,但我希望我能看到一个或两个数字和可能的一两个字母,它们从 < b>Item 1< /b> 到 < b>Item 1z 到 < b>Item 99zz 所以我需要为所有情况做准备。

如果您要进行通配符搜索,则可以使用“(Item [0-9]@)( )”来查找文本 'Item' 后跟任意数量的数字。

您可以使用“(Item [0-9]{1,n})( )”查找文本 'Item' 后跟数字,其中 n 替换为您想要的最大数字数寻找。

您可以通过添加 [a-z]@ 或 [a-z]{1,n} 来扩展搜索字段以包含小写字符。

例如“(Item [0-9]{1,2}[a-z]{1,3})( )”将查找 Item 后跟一个或两个数字,然后是 1 或 2 或 3 个小写字母。

在上面的搜索文本中,括号 () 已用于将文本括起来。 () 被称为字段。搜索文本中可以使用 1 到 9 个字段。您可以使用 \1 到 \9 在替换文本中引用这些字段。因此,在上述所有情况下,替换文本将是“”(像你一样,我插入了一个 space 以使粗体标记可见。

您可以在此处找到有关通配符搜索的更多信息

https://wordmvp.com/FAQs/General/UsingWildcards.htm