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
来找到我的文字选择是正确的,我确信我正确找到了这个单元格。
但是,我仍然无法取代价值。
答案 0 :(得分:0)
通过声明ActiveDocument
和Tables(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