excel - 更改 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
解决方案
使用工作簿的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
推荐阅读
- android - Android - 媒体扫描仪不适用于 api 28-29
- linux - 无法删除文件 - 终端将文件名拆分为两个
- bash - 如果命令开头包含某个单词,如何给命令起别名
- amazon-web-services - 如何在定制的 TCP 应用程序中编写 AWS ELB 运行状况检查代码?
- node.js - 无法连接到 Azure Cosmosdb 中的 Mongdb
- c# - Selenium Webdriver 3.141.0 driver.Manage().Logs.AvailableLogTypes 抛出 System.NullReference 异常
- zap - 如何在 OWASP ZAP 中进行自动扫描时传递用户名和密码
- react-native - 使用状态值更新操作表标题
- java - 如何使用 Java 和 PostgreSQL 执行 \d tablename
- properties - Ansible-从属性文件中删除多行属性