使用数组搜索Word文档中的单词

时间:2013-12-03 08:27:40

标签: vba ms-word

我有一个Word文档,其中包含每周田径运动会的结果报告。有几个结果组合在一起,用于各种事件。

这是一个简短的摘录......

男子18-19铁饼投掷1公斤F36:

  1. Shaun Markham,HCTU,10.26米。
  2. 女子15-17铁饼投掷1公斤:

    1. Elizabeth Jones,TAIR,36.34米; 2.考特尼·马丁,ODR,32.61米; 3.

      Jessie Scurr,ODR,26.24米。

    2. 女子15-17锤击3.00公斤:

      1. Elizabeth Jones,TAIR,49.04m; 2.考特尼·马丁,ODR,42.34米; 3.

        Melina Palmer,TAIR,29.24米。

      2. 男子14& U跳高:

        1. 本杰明史密斯,ODR,1.65米。
        2. 男子18-19跳高:

          1. 布伦特柴郡,ODR,1.80米。
          2. 我写的vba宏是

            Selection.HomeKey Unit:=wdStory
              With Selection.Find
             .ClearFormatting
             .Text = "discus"
             .Forward = True
             .Wrap = wdFindContinue
             .Format = False
             .MatchCase = False
             .MatchWholeWord = False
             .MatchAllWordForms = False
             .MatchSoundsLike = False
             .MatchWildcards = False
             .Execute
             Selection.Extend
             Selection.Copy
             Selection.MoveUp Unit:=wdLine, Count:=1
             Selection.EndKey Unit:=wdLine
             Selection.TypeParagraph
             Selection.PasteAndFormat (wdFormatOriginalFormatting)
             Selection.Extend
             Selection.Extend
             Selection.Extend
             Selection.Range.Bold = True
             Selection.Font.Grow
             End With
             End Sub
            

            ...找到铁饼结果的第一次出现,并在紧接第一个结果之上的新线上创建一个粗体标题。

            我想要做的是为每个事件的结果块重复此过程...即为Hammer,跳高等创建标题等。

            我可以为每个事件重复此代码(最多可能有30或40个可能的事件,但在任何给定的一周内,只有15个......所以不是每个事件都会在结果报告中显示)但是那里必须是一个循环或类似的循环,可以循环(或许)数组中列出的每个事件。

            这将使宏保持紧凑,并且意味着如果事件名称发生更改,则宏所需的唯一修改将在数组中。

            有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

你在找这样的东西吗?

Sub MakeAllHeadlines()
    Dim i As Long
    Dim eventNames As Variant
    eventNames = Array("discus", "Hammer", "High Jump", "etc")
    For i = LBound(eventNames) To UBound(eventNames)
        MakeEventHeadline eventNames(i)
    Next i
End Sub

Sub MakeEventHeadline(ByVal eventName As String)
    Selection.HomeKey Unit:=wdStory
    With Selection.Find
        .ClearFormatting
        .Text = eventName
        '...rest of your code as written in your question
    End With
End Sub