无法在MSWord中的表中查找和替换值

时间:2018-04-30 04:41:40

标签: word-vba

Sub Macro2()

Dim x As String
Dim y As String

x = ActiveDocument.Tables(1).Rows(2).Cells(2).Range.Text
y = ActiveDocument.Tables(1).Rows(2).Cells(3).Range.Text

MsgBox x
MsgBox y

With ActiveDocument.Content.Find
 .Text = x
 .ClearFormatting
 .Forward = True
 .Execute
If .Found = True Then .Replacement.Text = y
End With

End Sub

我正在尝试编写一个小程序来帮助我的同事加速完成任务。

这是问题

以下是我正在处理的表格查找文档中的所有Test 1并将所有Test 1替换为Test 2

所以我写了上面的代码来做我想做的事情。但是,我不知道它出了什么问题。每次运行程序时,值都保持不变。

如果你发现我有两个Msgbox来找到我的文字选择是正确的,我确信我正确找到了这个单元格。

但是,我仍然无法取代价值。

1 个答案:

答案 0 :(得分:0)

通过声明ActiveDocumentTables(1)的对象,我冒昧地“收紧”您的代码,使其更高效,更易于阅读。

由于您似乎还想进行简单的查找/替换,我更改了.Execute来进行替换。但是,如果您的代码实际上更复杂,那么您当然应该保留原始代码中的If

我还添加了一个我使用的函数,它从单元格Range返回的文本末尾切断ANSI 13和ANSI 7字符。运行代码时,您可能已经注意到MsgBox中“测试1”或“测试2”下的黑点?这是ANSI 7,文本和点之间的垂直间距是段落标记(ANSI 13)。当使用该功能时,这些消失,在我的测试中,替换成功。

Sub FindReplaceInTable()    
    Dim x As String
    Dim y As String
    Dim doc As word.Document
    Dim tbl As word.Table

    Set doc = ActiveDocument
    Set tbl = doc.Tables(1)
    x = TrimCellText(tbl.Rows(2).Cells(2).Range)
    y = TrimCellText(tbl.Rows(2).Cells(3).Range)

    'MsgBox x
    'MsgBox y

    With doc.content.Find
     .Text = x
     .ClearFormatting
     .Forward = True
     .Replacement.Text = y
     .Execute Replace:=wdReplaceAll
    End With
End Sub

Function TrimCellText(r As word.Range) As String
    Dim sLastChar As String
    Dim sCellText As String

    sCellText = r.Text
    sLastChar = Right(sCellText, 1)
    Do While sLastChar = Chr(7) Or sLastChar = Chr(13)
        sCellText = Left(sCellText, Len(sCellText) - 1)
        sLastChar = Right(sCellText, 1)
    Loop
    TrimCellText = sCellText
End Function