Arrays Excel VBA:引用与活动工作簿不同的工作簿中的数组表

Arrays Excel VBA:引用与活动工作簿不同的工作簿中的数组表,arrays,excel,vba,Arrays,Excel,Vba,我正在使用Find and Replace宏(见下文),该宏引用存储引用数据的数组表 对于查找/替换宏,引用数组表和存储值的唯一方法是从我当前正在使用的任何给定ActiveWorkbook中 我需要能够使用并引用Personal.xlsb默认模板,因为它始终处于打开状态,以引用下面的数组表。 如何以这种方式将宏指向数组表,这样我就不必将它复制/创建到我要运行此宏的每个新工作簿中? 这是下面宏的当前引用,也是我使其工作的唯一方法: 'Create variable to point to your

我正在使用Find and Replace宏(见下文),该宏引用存储引用数据的数组表

对于查找/替换宏,引用数组表和存储值的唯一方法是从我当前正在使用的任何给定ActiveWorkbook中

我需要能够使用并引用Personal.xlsb默认模板,因为它始终处于打开状态,以引用下面的数组表。

如何以这种方式将宏指向数组表,这样我就不必将它复制/创建到我要运行此宏的每个新工作簿中?

这是下面宏的当前引用,也是我使其工作的唯一方法:

'Create variable to point to your table  
Set tbl = Worksheets("Table1").ListObjects("Table1")
(指我正在使用的Active工作簿中的工作表。)

到目前为止,为了引用另一个文件,我尝试了以下方法:

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:下标超出范围

现在,每当我想使用此宏时,必须将我的数组表复制到“Table1”工作表(选项卡)上的每个Active工作簿中

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
Sub FindReplace\u Multi\u ActivesheetOnly()
将sht变暗为工作表
作为整数的Dim fndList
将rplcList设置为整数
作为ListObject的Dim tbl
Dim myArray作为变体
'创建指向表的变量
Set tbl=工作表(“表1”)。列表对象(“表1”)
'使用表的数据创建数组
设置TempArray=tbl.DataBodyRange
myArray=Application.Transpose(TempArray)
'为查找/替换数据指定列
fndList=1
rplcList=2
'循环遍历数组列表中的每个项
对于x=LBound(myArray,1)到UBound(myArray,2)
'循环浏览Active工作簿中的每个工作表(跳过其中包含表的工作表)
'对于ActiveWorkbook.工作表中的每个sht
'如果sht.name tbl.Parent.name,则
ActiveSheet.Cells.Replace What:=myArray(fndList,x),Replacement:=myArray(rplcList,x)_
LookAt:=xlPart,SearchOrder:=xlByRows,MatchCase:=False_
SearchFormat:=False,ReplaceFormat:=False
"完"
“下一步
下一个x
端接头

你几乎什么都试过了

语法是:
Workbook(Index)
索引可以是一个数字(第一个打开的工作簿以1开头),也可以是一个命名的
Index
,它是工作簿的名称(不是/path/to/file,也不是file.ext)

因此,要将个人工作簿设置为工作簿对象,可以使用

Dim wb as Workbook
Set wb = Workbooks("Personal")
至于参考图纸和表格(代码的其余部分)似乎是正确的


如果您在查找工作簿名称时仍有问题,如果您打开VBA编辑器,您将看到左侧(对于新的未保存工作簿)显示
VBAProject(Book1)
Book1是工作簿的名称,或者您可以打开即时窗口
(CTRL+G)
然后键入
?ActiveWorkBook.Name
并按enter键,它将输出名称。

您几乎已经尝试了所有方法

语法是:
Workbook(Index)
索引可以是一个数字(第一个打开的工作簿以1开头),也可以是一个命名的
Index
,它是工作簿的名称(不是/path/to/file,也不是file.ext)

因此,要将个人工作簿设置为工作簿对象,可以使用

Dim wb as Workbook
Set wb = Workbooks("Personal")
至于参考图纸和表格(代码的其余部分)似乎是正确的


如果您在查找工作簿名称时仍有问题,如果您打开VBA编辑器,您将看到左侧(对于新的未保存工作簿)显示
VBAProject(Book1)
Book1是工作簿的名称,或者您可以打开即时窗口
(CTRL+G)
并键入
?ActiveWorkBook.Name
并按enter键,它将输出名称。

最后!在这里和那里的帮助和反馈下,我们找到了答案

老实说,主要的问题是知道真实的参考名称。第二个是正确的语法。我从一开始就离这里很近

奇怪的是,我发现表名(ListObject)不是我想象的那样。有几种方法可以通过高亮显示表格并单击出现的设计选项卡或像Adam提到的那样使用(CTRL+G)来找到答案。我发现这个表实际上名为Table13,而不是Table1,没有这个正确的语法,任何语法都不重要

这是我需要添加/更改的正确vba编码语法,尽管我确信这不是唯一的方法。这是关键:(“表13”)


终于!在这里和那里的帮助和反馈下,我们找到了答案

老实说,主要的问题是知道真实的参考名称。第二个是正确的语法。我从一开始就离这里很近

奇怪的是,我发现表名(ListObject)不是我想象的那样。有几种方法可以通过高亮显示表格并单击出现的设计选项卡或像Adam提到的那样使用(CTRL+G)来找到答案。我发现这个表实际上名为Table13,而不是Table1,没有这个正确的语法,任何语法都不重要

这是我需要添加/更改的正确vba编码语法,尽管我确信这不是唯一的方法。这是关键:(“表13”)


谢谢你的帮助!我还是有点困惑。哈哈,这是我发现的。。(添加注释中没有格式:)1)VBAProject(Personal.xlsb)[这是我模板的文件名]2)Sheet1(Personal)[下一步]3)Sheet2(表1)[然后是我试图参考的表]注:奇怪的是使用Sheet2(表1)中的Cntl+G--上面写着“Table13”,所以我需要在这里使用所有三个引用:“创建变量以指向您的表//设置tbl=工作簿(“个人”).Sheets(“Table1”).ListObjects(“Table1”)//我不知道在哪里”