使用宏在Word中搜索表以查找单元格中的特定字符串,然后在同一行中的另一个单元格上设置排版

时间:2017-10-20 19:34:04

标签: vba ms-word word-vba

我有一个包含3列表和未知行数的Word文档 我需要一个可以在第1列中搜索字符串“Sum”的宏。

如果找到完全匹配,宏必须将行中两个剩余单元格的排版设置为与Word中的两种不同的排版,并删除单元格1中的字符串“Sum”。

该表可以包含字符串“sum”的许多实例,但它们总是在第一列中。

我尝试过的代码,我为我缺乏编码技巧而道歉,但我一周只做了这个,工作正常,直到第一个“sum”然后退出。

我正在使用此代码:

Sub FindSum() 

Dim oTbl As Table  
Dim oRow As Row 

Set myRange = ActiveDocument.Content

    For Each oTbl In ActiveDocument.Tables
        For Each oRow In oTbl.Rows
            Selection.Find.Execute FindText:="Sum", ReplaceWith:=""
            If Selection.Find.Found = True Then
                Selection.MoveRight Unit:=wdCell
                Selection.Style = ActiveDocument.Styles("Titel")
                Selection.MoveRight Unit:=wdCell
                Selection.Style = ActiveDocument.Styles("Citat")
            End If
        Next
    Next 
End Sub

我希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

这似乎有用

忽略表格之外的“Sum”

用两个表进行测试

Option Explicit

Sub FindSum()

    Dim oTbl As Table
    Dim stT As Long, enT As Long
    Dim stS As Long, enS As Long

    With Selection.Find             ' the settings remain until changed
        .Text = "Sum"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
    End With

    For Each oTbl In ActiveDocument.Tables

        oTbl.Columns(1).Select                        ' not sure if this is required

        Do While Selection.Find.Execute

            stT = oTbl.Range.Start                    ' table range
            enT = oTbl.Range.End

            stS = Selection.Range.Start               ' found text range
            enS = Selection.Range.End

            If stS < stT Or enS > enT Then Exit Do    ' text found inside table ???

            Selection.Collapse wdCollapseStart
            Selection.Find.Execute Replace:=wdReplaceOne

            Selection.MoveRight Unit:=wdCell
            Selection.Style = wdStyleTitle            ' original code was invalid
            Selection.MoveRight Unit:=wdCell
            Selection.Style = wdStyleHeading3
        Loop
        Selection.Collapse wdCollapseEnd
    Next
End Sub