Microsoft Word宏:循环选择文本范围并应用现有的字符样式

时间:2013-08-19 13:14:33

标签: loops ms-word character word-vba

问题:我想知道如何创建一个循环来查找/选择一系列数据并应用字符样式。每个范围都可以通过开始和结束标记识别。 例如:aCS1a这些aCS1a和zCS1z标签之间的文本使用名为cs1的字符样式进行格式化,该样式已存在于Word文档中zCS1z

到目前为止的流程: (1)数据库导出带有“标签”的文本文件,用于标识段落样式和字符样式的格式。 (2)Microsoft Word中的宏将每个段落格式化为特定的段落样式。

请提供帮助: (3)接下来我要选择aCS1a的每个实例。要格式化的文本转到herezCS1z并将名称为“cs1”的字符样式应用于aCS1a和zCS1z标记之间的文本。

例如: 候选人由Krusty Clown Schoolzz1z的aCS1aDean,aCS2a教授Homer SimpsonzCS2z,aCS1aBSc(荣誉)zCS1z aCS2aSpringfieldzCS2z,aCS1aPhDzCS1z aCS2aShelbyvillezCS2z提出。

抱歉,我必须将“标签”更改为aCS1a和zCS1z,因为包含标签的尖括号在预览中被破坏了。

其中: cs1 = Microsoft Word文档中的特定字符样式,cs2 = Microsoft Word文档中的不同字符样式

宏中的循环可以删除aCS1a zCS1z,aCS2a zCS2z“tags”,因为它们使用适当的字符样式进行格式化,或者我可以记录查找/替换宏以删除标记作为处理的最后一步。 / p>

1 个答案:

答案 0 :(得分:0)

在Stackflow和http://www.pcreview.co.uk/forums/word-select-text-search-delete-macro-t3868065.html等其他网站上使用类似的问题/答案,我能够拼凑出一个冗长而繁琐的宏来完成这个工作。抱歉尖括号在我的起始cs1和结束/ cs1标签周围消失了。

Sub TaggedTextIsCS1()
'
'Find <cs1>text inbetween</cs1> and replace with Character Style CS1
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("CS1")
    With Selection.Find
        .Text = "\<cs1\>*\</cs1\>"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    'Find <start> tag and remove
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("CS1")
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "<cs1>"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    'Find <end> tag and remove
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("CS1")
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "</cs1>"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

End Sub