簡體   English   中英

使用 VBA 在 Microsoft Word 上的表格中替換多個單元格中的文本

[英]Replace text in multiple cells in a table on Microsoft Word using VBA

我在 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

我不是 VBA 專家,因此非常感謝您的幫助。 謝謝。

以下將在選擇中將單詞“Current”更改為“Changed”。 請注意,對於此宏,您必須將單詞作為選擇的一部分。 它不需要在最后一列,也不需要在表中; 它確實需要在選擇中。

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

下面的宏會將當前表的最后一列(插入點所在的列)中的“Current”更改為“Changed”。

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

其中之一會滿足您的需求嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM