繁体   English   中英

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

[英]Excel VBA: refer to an array table in a different workbook than the active workbook

我正在使用查找和替换宏(见下文),它引用存储参考数据的数组表。

没有办法,引用数组表和查找/替换宏的存储值的唯一方法是从我正在使用的任何给定的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:下标超出范围

现在每次我想使用这个宏时,我的数组表必须复制到'Table1'表(Tab)上的每个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

你差不多尝试了一切!

语法是: Workbook(Index) 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”)

Dim wb As Workbook
Set wb = Workbooks("Personal.xlsb")

'Create variable to point to your table
  Set tbl = wb.Worksheets("Table1").ListObjects("Table13")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM