2

我希望 Word 中的“查找”会根据我选择的文本自动填充其格式。即,如果我将光标放在粗体和斜体的文本上,我希望能够找到与此格式匹配的所有文本,而无需在Format -> Font窗口中实际执行手动选择这些格式的过程查找对话框。

在 Word 的宏录制功能的帮助下,我找到了一个可行的解决方案:

Sub FindFormat()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Size = Selection.Font.Size
        .Bold = Selection.Font.Bold
        .Italic = Selection.Font.Italic
        .Underline = Selection.Font.Underline
        .StrikeThrough = Selection.Font.StrikeThrough
        .DoubleStrikeThrough = Selection.Font.DoubleStrikeThrough
        .Hidden = Selection.Font.Hidden
        .SmallCaps = Selection.Font.SmallCaps
        .AllCaps = Selection.Font.AllCaps
        .Color = Selection.Font.Color
        .Superscript = Selection.Font.Superscript
        .Subscript = Selection.Font.Subscript
    End With
End Sub

我可以在技术上使用它并完成。问题是它不是那么直观,因为很难看到它已应用的格式,“查找”字段下的逗号分隔列表永远不会结束,并且会用省略号切断窗口,从而无法读取所有应用的格式:

Microsoft Word 查找

因此,切入正题,我如何让 VBA 只更改与中性不同的格式选项,并剪切其余部分,即No Underline、Font color: Auto等不应在Find格式中更改(使其复选框处于中性状态)?

此外,如何调用“查找”对话框以打开所有这些设置而无需任何实际的查找执行(例如,我可以根据需要手动添加文本或更改任何格式)?

带着赞赏。

4

1 回答 1

1

对于你问题的第一部分,我会使用下面的 IF 语句。

.Size = Selection.Font.Size
If Selection.Font.Bold = True Then .Bold = Selection.Font.Bold
If Selection.Font.Italic = True Then .Italic = Selection.Font.Italic
If Selection.Font.Underline <> wdUnderlineNone Then .Underline = Selection.Font.Underline
If Selection.Font.StrikeThrough = True Then .StrikeThrough = Selection.Font.StrikeThrough
If Selection.Font.DoubleStrikeThrough = True Then .DoubleStrikeThrough = Selection.Font.DoubleStrikeThrough
If Selection.Font.Hidden = True Then .Hidden = Selection.Font.Hidden
If Selection.Font.SmallCaps = True Then .SmallCaps = Selection.Font.SmallCaps
If Selection.Font.AllCaps = True Then .AllCaps = Selection.Font.AllCaps
If Selection.Font.ColorIndex <> wdAuto Then .ColorIndex = Selection.Font.ColorIndex
If Selection.Font.Superscript = True Then .Superscript = Selection.Font.Superscript
If Selection.Font.Subscript = True Then .Subscript = Selection.Font.Subscript

对于您想要跟踪的任何其他值,依此类推。(请注意,我使用的是 ColorIndex 而不是 Color。我使用的是 Word 2010,这对我来说是正确的属性。)

我不知道如何做第二部分。理论上你会设置 wdEditFind 对话框的 Find 参数,但实际上它似乎只接受一个字符串作为它的值。

另一件事;如果您想在各种可能性中循环,则使用 Find 可能是可行的方法。但是,如果您要获取具有特定格式的所有文本的列表,更简单的方法是右键单击所选文本,然后选择样式 > 选择所有具有相似格式的文本。然后,您可以复制并粘贴到另一个文件中。可能与您的需求相关,也可能不相关,但在某些情况下这是一个方便的技巧。

于 2013-03-14T16:01:10.440 回答