引用不同工作簿中的表以执行多个查找和替换数组而不捕获整个表

时间:2016-09-06 14:28:10

标签: vba excel-vba excel

我试图修改我发现的脚本,以适应不同工作簿中的表,而不是我运行宏的表。

在努力完成相应的活动工作簿中的功能后,我终于让它对所需的工作簿进行了更改。但是,我构建的数组只循环了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个循环。

非常感谢任何见解!

1 个答案:

答案 0 :(得分:0)

在@arcadeprecinct的帮助下,我能够修复数组以读取适当数量的循环。我必须编辑读取的代码行

For Each sht In ThisWorkbook.Worksheets

For Each sht In wb1.Worksheets

这允许查找和替换功能对相应的“Elig.xlsx”工作簿进行更改。感谢所有帮助。