【问题标题】:VBA Word: Update Find Format with current selectionVBA Word:使用当前选择更新查找格式
【发布时间】:2013-02-23 15:36:24
【问题描述】:

我希望 Word 中的 查找 会根据我选择的文本自动填充其格式。 IE。如果我将光标放在 粗体和斜体 的文本上,我希望能够找到与此格式匹配的所有文本,而无需实际执行手动过程在 Find 对话框的 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

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

所以,切入正题,我如何让 VBA 只更改与中性不同的格式选项,并剪切其余部分,即 无下划线、字体颜色:自动等。不应该在 FindFormat 中更改(使其复选框处于中性状态)?

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

感激不尽。

【问题讨论】:

    标签: vba formatting ms-word


    【解决方案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 可能是可行的方法。但是,如果您要获取具有特定格式的所有文本的列表,更简单的方法是右键单击所选文本,然后选择样式 > 选择所有具有相似格式的文本。然后,您可以复制并粘贴到另一个文件中。可能与您的需求相关,也可能不相关,但在某些情况下这是一个方便的技巧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2022-12-14
      • 2019-10-23
      • 1970-01-01
      相关资源
      最近更新 更多