使用VBA替换Microsoft Word上表格中多个单元格中的文本
我在Microsoft Word中有一个很大的表格,我想突出显示最后一列中的一部分单元格,并将其中的文本从“当前”更改为“已更改”。我知道你可以使用复制粘贴或查找/替换,但我每天都会这么做很多次,所以只需突出显示并单击一个按钮就非常有用了 我在Excel中有一些VBA,它在电子表格上运行良好,但在Word中似乎不起作用使用VBA替换Microsoft Word上表格中多个单元格中的文本,vba,ms-word,Vba,Ms Word,我在Microsoft Word中有一个很大的表格,我想突出显示最后一列中的一部分单元格,并将其中的文本从“当前”更改为“已更改”。我知道你可以使用复制粘贴或查找/替换,但我每天都会这么做很多次,所以只需突出显示并单击一个按钮就非常有用了 我在Excel中有一些VBA,它在电子表格上运行良好,但在Word中似乎不起作用 Sub WordEdit() Dim x As Range For Each x In Selection If x.Value <> &q
Sub WordEdit()
Dim x As Range
For Each x In Selection
If x.Value <> "" Then x.Value = "Changed"
Next
End Sub
Sub-WordEdit()
Dim x As范围
对于选择中的每个x
如果x.Value为“”,则x.Value=“已更改”
下一个
端接头
我不是VBA方面的专家,因此非常感谢您的帮助。谢谢。以下内容将把选项中的“当前”改为“已更改”。注意,对于此宏,必须将单词作为选择的一部分。它不需要在最后一列,也不需要在表中;它确实需要在选择中
Sub ChangeSelectionCurrentToChanged()
' Charles Kenyon 13 Oct 2020
Dim rng As Range
'
Set rng = Selection.Range
With rng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "Current"
.Replacement.Text = "Changed"
.Execute Replace:=wdReplaceAll
End With
Set rng = Nothing
End Sub
如果单词“Current”位于文档中任何表的最后一列,则以下宏会将其更改为“Changed”。选择什么并不重要
Sub ChangeCurrentToChanged()
' Charles Kenyon 13 Oct 2020
Dim rng As Range
Dim iColumns As Long
Dim iRows As Long
Dim iCount As Long
Dim oTable As Table
'
For Each oTable In ActiveDocument.Tables
Let iColumns = oTable.Columns.Count
Let iRows = oTable.Rows.Count
For iCount = 1 To iRows
Set rng = oTable.Cell(iCount, iColumns).Range
With rng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "Current"
.Replacement.Text = "Changed"
.Execute Replace:=wdReplaceAll
End With
Next iCount
Next oTable
Set oTable = Nothing
Set rng = nothing
End Sub
以下宏将在当前表的最后一列(插入点所在的列)中将“当前”更改为“已更改”
其中一个能满足您的需要吗?到目前为止,您尝试了哪些?你试过录制宏并编辑它吗?您是否使用对象浏览器查找相关对象,或使用F1查找文档中的内容?尝试在Word上录制宏,但它仅编辑我选择的第一个单元格。看了一下我用来帮助创建上述VBA的文档,但它似乎对Word不起作用。做了无数次谷歌搜索,查看了堆栈溢出,但这一切似乎都是针对Excel的,我尝试的任何东西似乎都不适用于Word。宏记录器使用选择对象记录所有内容。然后,为了使代码能够在任何地方工作,您通常会将所有内容切换到Range对象。若要查找特定于单词的VBA,请将引号中的“Word”和-Excel(带减号)添加到搜索词中。@JohnKorchok谢谢,我将查看Range对象,看看是否可以使用它。录制宏可以为您提供所需的语法和研究的起点。录制的宏将显示您在Word中设置了
文本
属性,而不是值
。在对象浏览器中查找选择
,您会发现它包含一个单元格
集合。选择单元格的帮助将带您进入Word VBA文档,在那里您将学习如何循环收集。作为一名IT顾问,你应该习惯于逻辑思考问题,并使用可用的研究工具。第一种方法非常有效。非常感谢您的建议和其他建议,这些建议将帮助我提高未来的VBA技能。MVP站点是一个优秀的、虽然有些过时的资源。请注意,我编辑了每个宏中的两行,将Find.Text和Replacement.Text重置为“”。根据Word MVP Jay Freedman的建议,这些是不需要的,因为我们使用的是范围而不是选择对象。
Sub ChangeCurrentToChangedSelectedTable()
' Charles Kenyon 13 Oct 2020
Dim rng As Range
Dim iColumns As Long
Dim iRows As Long
Dim iCount As Long
Dim oTable As Table
'
Set oTable = Selection.Tables(1)
Let iColumns = oTable.Columns.Count
Let iRows = oTable.Rows.Count
For iCount = 1 To iRows
Set rng = oTable.Cell(iCount, iColumns).Range
With rng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "Current"
.Replacement.Text = "Changed"
.Execute Replace:=wdReplaceAll
End With
Next iCount
Set oTable = Nothing
Set rng = Nothing
End Sub