【发布时间】:2021-03-10 22:57:25
【问题描述】:
我公司的工作流程目前包括一个流程,我们从存储库中导出文档,稍微清理一下,然后将其发送到下线以供审核/批准。 “稍微清理一下”涉及运行一个宏,该宏除其他外,对样式进行查找/替换,以将它们从存储库中的内容更改为我们的文档模板指定的内容。因此,例如,存储库为我们提供了“p_body”的样式,我们需要它是“body”。这个宏工作得很好,除了一些我想看看我们是否可以完善的东西。
第一个问题是,当涉及到它提供的样式时,存储库的行为往往有些不可预测。要使用上面的示例,不是以该样式标记所有“p_body”文本,而是返回“p_body”、“p_body_1”、“p_body_1_1”等。目前,宏中的样式切换都是硬编码的,所以要让宏修复某些东西,它必须知道它的存在。因此,如果存储库吐出一种不在宏中的样式,它就不会得到修复。我知道,如果我正在处理 HTML 文档,我可以使用正则表达式来查找“p_body”样式的所有版本,并将它们替换为“body”。有没有办法使用这种更智能的查找/替换版本,而不是对每个需要替换的样式进行硬编码?
第二个问题需要一个单独的问题来解决,所以现在被删掉了。
对于后代,以下是宏查找/替换块之一的样子:
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("p_body")
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles("body")
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
【问题讨论】:
-
您应该使用范围对象而不是选择对象。
-
需要有关此分页问题的更多信息。我在您共享的代码中没有看到任何删除分页符的内容。您可能会考虑将其作为一个单独的问题并共享您拥有的代码。当然,如果您这样做,请通过删除有关分页符的段落来更新此问题。
-
如果替换样式删除了分页符,则表明原始样式之前包含分页符,但替换样式没有。