使用Word VBA宏根据第一个字符设置多个单词的样式

问题描述 投票:0回答:1

我对 VBA 编程比较陌生,但对一般编程不太熟悉。我在 Word(365、版本 2403、Build 16.0)中的单列表行中存储了一系列报价,需要调整报价属性的格式。每个引用/行的格式为:

This is a quote.
- Attribution Name
This is a quote.
- Attribution 
This is a quote.
- Attribution123

其中归属可以是 1 或 2 个字母数字字符。我需要格式化“-”之后的所有字符。目前,我的尝试仅格式化直到第一个单词后面的空格,而不管正则表达式格式搜索中包含任何空格字符。它非常适用于单一名称归因。

在搜索网络和其他帖子后,这是我当前的宏:

Sub DashFormat()
'
' DashFormat Macro
'
'
    
    With ActiveDocument.Range.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Format = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
        .MatchWholeWord = False
        .Text = "- [A-z0-9]@>"
        .Replacement.Style = "Subtle Emphasis"
        .Execute Replace:=wdReplaceAll
    End With
End Sub

参考上面的示例,这可以正确地将样式应用于 - 除了“Name”之外的所有内容。 我理解所有这些,除了 .Text 字符串末尾的 @> 功能。我知道如果没有在前面的括号中添加一些字符规范,它就无法工作。

我尝试在括号中添加空格,尝试指示空格 Chr 代码,尝试使用通配符和转义字符。谁能帮我设计查询或解释@>的功能吗?

vba ms-word
1个回答
0
投票
  • 由于Word通配符搜索不支持
    zero or more occurrences {0,n}
    ,因此片段中使用了两个匹配模式。也许有人可以提供更简单的解决方案。

使用通配符查找和替换

@
用于查找前一个字符的重复出现(如果有)

>
用于标记单词的结尾

Sub DashFormat()
    With ActiveDocument.Range.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Format = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
        .MatchWholeWord = False
        .Text = "- [A-z0-9]@>"
        .Replacement.ClearFormatting
        .Replacement.Style = "Subtle Emphasis"
        .Execute Replace:=wdReplaceAll
        .Text = "- [A-z0-9]@> [A-z0-9]@>"
        .Execute Replace:=wdReplaceAll
    End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.