我试图修改我发现的脚本,以适应不同工作簿中的表,而不是我运行宏的表。
在努力完成相应的活动工作簿中的功能后,我终于让它对所需的工作簿进行了更改。但是,我构建的数组只循环了3次(在我的表中共有43行)。我99%有信心我的UBound功能没有正确的措辞,并希望能够对我如何能够改变它以包括我桌子的所有43行提供一些见解。它目前被写为动态,所以如果我必须更新表,宏不需要编辑,但如果我必须硬编码行数,我愿意这样做 - 勉强。
以下是代码:
Sub Multi_FindReplace()
Dim sht As Worksheet
Dim fndList As Integer
Dim rplcList As Integer
Dim tbl As ListObject
Dim myArray As Variant
Dim wb1 As Workbook
Dim wb2 As Workbook
Set wb2 = Workbooks.Open(Filename:="C:\Drew\PracMap.xlsx")
ThisWorkbook.Activate
Set wb1 = Application.Workbooks("Elig.xlsx")
'Create variable to point to your table
Set tbl = Workbooks("PracMap.xlsx").Worksheets("PracMap").ListObjects("PracMap")
'Create an Array out of the Table's Data
Set TempArray = tbl.DataBodyRange
myArray = Application.Transpose(TempArray)
'Designate Columns for Find/Replace data
fndList = 1
rplcList = 2
'Loop through each item in Array lists
For x = LBound(myArray, 2) To UBound(myArray, 1)
'Loop through each worksheet in ActiveWorkbook (skip sheet with table in it)
wb1.Activate
For Each sht In ThisWorkbook.Worksheets
If sht.Name <> tbl.Parent.Name Then
sht.Cells.Replace What:=myArray(fndList, x), Replacement:=myArray(rplcList, x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
End If
Next sht
Next x
End Sub
当我单步执行代码(F8)并将鼠标悬停在Ubound(myArray,1)上时,它返回一个值&#34; = 3&#34;这是我最大的线索,为什么它只循环3次。对于它所做的3个循环,What:= myArray(fndList,x)和Replacement:= myArray(rplcList,x)显示相应列的相应前3行值。但是,循环在此之后结束。另外,例如,如果我将表格粘贴到Sheet3上的工作簿中,它就会起作用,并且会执行所有43个循环。
非常感谢任何见解!
答案 0 :(得分:0)
在@arcadeprecinct的帮助下,我能够修复数组以读取适当数量的循环。我必须编辑读取的代码行
For Each sht In ThisWorkbook.Worksheets
要
For Each sht In wb1.Worksheets
这允许查找和替换功能对相应的“Elig.xlsx”工作簿进行更改。感谢所有帮助。