MS Word宏 - 查找文本模式并应用样式

时间:2013-02-26 18:56:15

标签: vba ms-word

我正在研究一个可以找到文本模式并应用样式的宏。

文件内容:

  

Start-Style1Test HeadingEnd-Styles1Start-Style2 - 这是paragraph.End-Styles2

在这里,我的宏将搜索“Start-Style1 * End-Style1”并应用style1。在我们的例子中,“测试标题”将应用style1。同样,它也会对style2做同样的事情。如果我的标题和上下文在不同的行中,我的宏工作正常。

但如果它是同一条线。只应用了一种样式。在深入研究这个问题时,我发现这是因为两种风格的Style类型都是'Paragraph'。

如果我将其更改为'Character'作为样式类型,我可以获得预期的输出。我想在不改变样式类型的情况下应用样式。如果有可能,请你告诉我。

这是我的代码:

Application.ScreenUpdating = False
Dim RngStory As Range
Dim StrStart
Dim StrEnd
Dim Styles
StrStart = Array("Start-Style1", "Start-Style2")
StrEnd = Array("End-Style1", "End-Style2")
Styles = Array("Style1", "Style1")
For i = 0 To 1
Set RngStory = ActiveDocument.Range
With RngStory.Find

  .ClearFormatting
  .Text = StrStart(i) & "*" & StrEnd(i)
  .Forward = True
  '.Wrap = wdFindStop
  .MatchCase = False
  .MatchWholeWord = False
  .MatchWildcards = True
  .MatchSoundsLike = False
  .MatchAllWordForms = False
  .Replacement.Text = ""
  Do While .Execute
    With RngStory.Duplicate
      .Start = .Start + Len(StrStart(i))
      .End = .End - Len(StrEnd(i))
      .Style = ActiveDocument.Styles(Styles(i))
       .End = .End - Len(StrEnd(i))
      .Collapse (wdCollapseEnd)
    End With
  Loop
End With
Next

2 个答案:

答案 0 :(得分:0)

不幸的是,在同一行中组合两种不同样式类型(实际上是段落或其中的一部分)的唯一方法是使用character样式,但它不太可能是您想要的。

在Word文档中,您通常将段落样式用于文本的主要部分,如标题,以及段落,然后在段落样式的顶部使用必要的字符样式。例如,内置的Word字符样式用于脚注和页码。

您可以在此处阅读更多内容:http://office.microsoft.com/en-us/word-help/understanding-paragraph-character-list-and-table-styles-HA001187614.aspx

你有理由想在同一条线上组合不同的风格吗?

答案 1 :(得分:0)

在同一条线上合并两种风格是我们在法律文件中经常做的事情。示例:标题1到标题9将与编号相关联。此外,Heading 2样式可能需要使用我们称为“引入强调”的格式(也称为“在标题中运行”)进行设置。最后,段落的其余部分将由正文文本样式组成。为了实现这种格式,我们将使用(1)正文文本样式中的样式分隔符或(2)使用隐藏属性格式化的段落标记。以下是此格式的示例:

                   Article I <--Heading 1 style

第1.1节简介:第1.1节的编号是使用标题2样式实现的,但本段的其余文本实际上是正文文本样式。

第1.2节更多文本:第1.2节的编号是使用标题2样式实现的,但本段的其余文本实际上是正文文本样式。

                   Article II <--Heading 1 style

第2.1节引入强调:第2.1节的编号是使用标题2样式实现的,但本段的其余文本实际上是正文文本样式。

第2.2节更多文本:第2.1节的编号是使用标题2样式实现的,但本段的其余文本实际上是正文文本样式。