【发布时间】:2017-03-11 07:47:35
【问题描述】:
我正在使用查找和替换宏(见下文),它引用存储参考数据的数组表。
在我当前正在工作的任何给定 ActiveWorkbook 中引用数组表和存储值的查找/替换宏的唯一方法是不可能的。
我需要能够使用和引用我的 Personal.xlsb 默认模板,因为它始终是打开的,以引用下面的数组表。
如何以这种方式将宏指向数组表,这样我就不必将它复制/创建到我想要运行此宏的每个新工作簿中?
这是下面宏的当前引用,也是我让它工作的唯一方法:
'Create variable to point to your table
Set tbl = Worksheets("Table1").ListObjects("Table1")
(指的是我正在使用的 ActiveWorkbook 中的工作表。)
到目前为止,这是我尝试引用另一个文件的方法:
Set tbl = Personal.xlsb("Sheet1").ListObjects("Table1")
------
I thought I had it With this one For sure!!
Set tbl = Workbooks("Personal.xlsb").Sheets("Table1").ListObjects("Table1")
-------
Set tbl = Workbooks("Personal.xlsb").Sheets(1).ListObjects("Table1")
-------
Set wb1 = Application.Workbooks("Personal.xlsb")
Set tbl = wb1("Table1").ListObjects("Table1")
-------
Set wb1 = Workbooks("Personal.xlsb").Sheets("Table1")
Set tbl = wb1("Table1").ListObjects("Table1")
-------
Set wb1 = Workbooks("Personal.xlsb").Sheets("Table1")
Set tbl = wb1.ListObjects("Table1")
我什至试过绝对文件路径,没有。
一旦我将其更改为尝试使用上面的字符串引用 Personal.xlsb,我得到错误 9:下标超出范围
现在每次我想使用此宏时,都必须将我的 Array Table 复制到“Table1”工作表(选项卡)上的每个 Activeworkbook 中!
Sub FindReplace_Multi_ActivesheetOnly()
Dim sht As Worksheet
Dim fndList As Integer
Dim rplcList As Integer
Dim tbl As ListObject
Dim myArray As Variant
'Create variable to point to your table
Set tbl = Worksheets("Table1").ListObjects("Table1")
'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, 1) To UBound(myArray, 2)
'Loop through each worksheet in ActiveWorkbook (skip sheet with table in it)
'For Each sht In ActiveWorkbook.Worksheets
'If sht.name <> tbl.Parent.name Then
ActiveSheet.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
【问题讨论】: