首页 > 解决方案 > 更改 VBA 代码以在多个工作表中查找和替换

问题描述

我有以下代码从工作表“输出”中的工作表“名称”列 A 中搜索单词,并将这些单词替换为“名称”列 B。

我正在尝试扩展它在所有电子表格中进行查找和替换的宏,而不仅仅是在“输出”中。

任何帮助表示赞赏

Sub multiFindandReplace()

Dim myList, myRange
Set myList = Sheets("Names").Range("A1:B238")
Set myRange = Sheets("Output").Range("A1:Y99")
For Each cel In myList.Columns(1).Cells
myRange.Replace What:=cel.Value, Replacement:=cel.Offset(0, 1).Value, LookAt:=xlWhole
Next cel

End Sub

标签: excelvba

解决方案


使用工作簿的sheet属性返回可以循环使用的集合For Each。通过将值放入数组中,跳过工作表并避免多次Names读取工作表。names

Option Explicit
Sub multiFindandReplace()
    Dim wb As Workbook, ws As Worksheet
    Dim myList As Variant, myRange As Range
    Dim i As Long, msg As String
     
    ' find/replace list
    Set wb = ThisWorkbook ' or ActiveWorkbook
    myList = wb.Sheets("Names").Range("A1:B238").Value2
    
    For Each ws In wb.Sheets
        If ws.Name <> "Names" Then
            Set myRange = ws.Range("A1:Y99")
            For i = LBound(myList) To UBound(myList)
                If Len(myList(i, 1)) > 0 Then
                    myRange.Replace _
                      What:=myList(i, 1), _
                      Replacement:=myList(i, 2), _
                      LookAt:=xlWhole
                End If
            Next i
            msg = msg & vbCr & ws.Name
        End If
    Next
    MsgBox "Sheets processed :" & msg, vbInformation, wb.Name
End Sub

推荐阅读