VBA Word:使用当前选择更新查找格式

时间:2013-03-08 06:32:36

标签: vba formatting ms-word word-vba

我希望Word中的查找根据我选择的文本自动填充其格式。即如果我将光标放在 粗体和斜体 的文本上,我希望能够找到符合此格式的所有文本,而无需实际完成手动过程选择格式 - >中的这些格式查找对话框中的字体窗口。

在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 Find

所以,为了切入追逐,我如何让VBA只更改不同于中性的格式化选项,并切断其余部分,即无下划线,字体颜色:自动等。不应该在查找格式中更改(将其复选框置于中立状态)?

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

赞赏。

1 个答案:

答案 0 :(得分: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可能是最佳选择。但是,如果您尝试获取具有特定格式的所有文本的列表,则更简单的方法是右键单击所选文本,然后选择样式&gt;选择具有相似格式的所有文本。然后你可以复制并粘贴到另一个文件中。可能与您的需求相关或不相关,但在某些情况下这是一个方便的技巧。