使用VBA替换Microsoft 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

我在Microsoft Word中有一个很大的表格,我想突出显示最后一列中的一部分单元格,并将其中的文本从“当前”更改为“已更改”。我知道你可以使用复制粘贴或查找/替换,但我每天都会这么做很多次,所以只需突出显示并单击一个按钮就非常有用了

我在Excel中有一些VBA,它在电子表格上运行良好,但在Word中似乎不起作用

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