作者:译林hy_774 | 来源:互联网 | 2023-05-23 09:28
我正在尝试使用VBA进行查找/替换.目标是迭代"Data_Pairs"表,其中包含要查找/替换的所有对,以及仅在列A中查找/替换这些对,并且仅在工作簿中指定的工作表范围内(不包括"Data_Pairs") ").
由于某种原因,每个匹配的值都会被替换,无论它在哪个列中.值也会在索引超出定义范围的工作表中被替换.
任何帮助将不胜感激.
我正在使用以下代码:
Sub Replace_Names()
Dim row As Integer
Dim row2 As Integer
Dim sheet As Integer
Dim findThisValue As String
Dim replaceWithThisValue As String
For row = 1 To 10
Worksheets("Data_Pairs").Activate
findThisValue = Cells(row, "A").Value
replaceWithThisValue = Cells(row, "B").Value
For sheet = 2 To 10
Worksheets(sheet).Columns("A").Replace What:= findThisValue, Replacement:=replaceWithThisValue
Next sheet
Next row
End Sub
给出问题的具体示例:如果Data_Pairs A1 = A且Data_Pairs B1 = 1,则整个工作簿中的每个值1都将替换为A.
1> David Zemens..:
我观察到它在Excel 2010中按预期工作,与上面的Greg和chancea的评论相呼应.
但是,我还观察到,如果您之前已打开FIND对话框(例如,您正在进行一些手动查找/替换操作)并将范围更改为WORKBOOK,则会发生观察到的差异,如下所述:
http://www.ozgrid.com/forum/showthread.php?t=118754
这可能是一种疏忽,因为它似乎从未被解决过.虽然该Replace
对话框允许您指定工作簿与工作表,但是没有相应的参数可以传递给Replace
方法(文档).
从Ozgrid线程实现hack - 由于某种原因,执行该.Find
方法似乎重置了这一点.这似乎有效:
Sub Replace_Names()
Dim row As Integer
Dim row2 As Integer
Dim sheet As Integer
Dim findThisValue As String
Dim replaceWithThisValue As String
Dim rng As Range
For row = 1 To 10
Worksheets("Data_Pairs").Activate
findThisValue = Cells(row, "A").Value
replaceWithThisValue = Cells(row, "B").Value
For sheet = 2 To 3
Set rng = Worksheets(sheet).Range("A:A")
rng.Find ("*") '### HACK
rng.Replace What:=findThisValue, Replacement:=replaceWithThisValue
Next sheet
Next row
End Sub