Word上的VBA宏:找到文本时插入标记

时间:2015-07-25 19:41:41

标签: vba ms-word word-vba

我有一份170页的文件。我想识别包含特定名称的页面。然后,当找到时,我想在页面末尾写一个小注释:

实施例

  

搜索姓名:“文章:Kr”
  注意在相关页面末尾写入:“DefaultKr”

每次尝试解决这个问题,我都会得到不同的结果。

Sub Find()
    Dim Page As Integer
    Dim Fin As Integer
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst
    Windows("g-1.doc").Activate
    Page = Selection.Information(wdActiveEndPageNumber)
    While (CurrentPage <= Page)
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext
        Selection.HomeKey Unit:=wdStory
        With Selection.Find
            .Text = "Article : KR"
            .Forward = True
            .Wrap = wdFindContinue
        End With
        If Selection.Find.Text = "Article : KR" Then GoTo Jim1
        Jim1:
        Selection.EndKey Unit:=wdStory
        Selection.TypeText ("DéfautsKR")
        With Selection.Find
            .Text = "Article : IP"
            .Forward = True
            .Wrap = wdFindContinue
        End With
        If Selection.Find.Text = "Article : IP" Then GoTo Jim2
        Jim2:
        Selection.EndKey Unit:=wdStory
        Selection.TypeText ("DéfautsIP")
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext
        CurrentPage = CurrentPage + 1
    Wend
End Sub

2 个答案:

答案 0 :(得分:0)

如果我完全不理解你,这应该会有所帮助。它搜索文档,如果找到搜索字符串,则会写一个脚注:

Computers:
  - Brand: Dell
    Cost: 500
    IP: 194.66.82.11

  - Brand: HP
    Cost: 600
    IP: 194.66.82.13

  - Brand: Asus
    Cost: 550
    IP: 194.66.82.15

我不完全确定你的意思是“...在页面末尾写一个小纸条”

答案 1 :(得分:0)

发现问题: 1)您是否尝试在文档末尾或每页末尾添加信息? selection.endkey unit:= wdStory在文档末尾写下你的评论。那是你想要的吗?

2)如果您在每个页面的末尾添加一条或多条评论,那么您的分页将会改变。

解决方案概述 您似乎想要找到一个名称和文档数组,您可以在其中找到它们。有两个选项可以让你在没有弄乱打印的情况下记录名称的位置,例如1)找到名称并插入注释,2)找到名称并更改高亮/背景颜色。除非明确指示,否则不会打印注释。在打印之前,所有背景颜色都可以重置为白色。

<强>答案 就编程而言,我可能会创建一个选定名称的数组,循环遍历名称数组并使用select case设置变量,找到变量并突出显示或添加注释以标记变量。您可以随时移动到当前页面的末尾,以按照您的建议添加文本。

Dim NameArray("name1", "name2", ect) As String
Selection.HomeKey wdStory
With NameArray
    With Selection.Find
        .Text = NameArray
        While .Found
            Select Case NameArray
                Case "name1"
                    myIndex = wdRed
                    myText = "DefaultName1"
                Case "name2"
                    myIndex = wdYellow
                    myText = "DefaultName2"
                Case Else
                    GoTo skipme
            End Select
            Selection.Range.HighlightColorIndex = myIndex
            or
            Selection.Collapse Direction:=wdCollapseEnd
            ActiveDocument.Comments.Add Range:=Selection.Range, _
                Text:=myText
        Wend
    End With
End With