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

时间:2017-03-11 07:47:36

标签: arrays excel-vba vba excel

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

没有办法,引用数组表和查找/替换宏的存储值的唯一方法是来自我目前工作的任何给定的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

2 个答案:

答案 0 :(得分:0)

你几乎尝试了一切!

语法为:Workbook(Index) Index可以是数字(从第一个打开的工作簿开始为1),也可以是名为Index的工作簿的名称(不是a / path / to / file,也不是file.ext)

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

Dim wb as Workbook
Set wb = Workbooks("Personal")

至于引用表格和表格(其余代码)显示正确。

如果您仍然无法找到工作簿的名称,如果您打开VBA编辑器,您将在左侧看到(对于新的未保存的工作簿),它会显示{{1} Book1是工作簿的名称,或者您可以打开即时窗口VBAProject (Book1)并键入(CTRL+G)并按Enter键,它将输出名称。

答案 1 :(得分:0)

最后!在这里和那里得到一些帮助和反馈,我们想出来了!

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

奇怪的部分是学习表名(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")