如何在VBA中动态创建工作簿数组

时间:2016-01-31 12:25:47

标签: excel-vba vba excel

我正在尝试将工作簿对象添加到工作簿数组中 该数组是在单独的模块中创建的public类型

Option Explicit
Public w() As Workbook
Public i As Integer

然后我在工作表

中存储的子程序中有以下程序
Sub test_addwbobjects()
ReDim Preserve w(2)
Application.Workbooks("Quick analysis - Moneycontrol.xlsx").Activate
Set w(i) = ActiveWorkbook
'Set w(i) = Application.Workbooks("Quick analysis - Moneycontrol.xlsx")
i = i + 1
'ActiveSheet.Range("b2") = w(0).Sheets("CF analysis").Range("b2")
'ActiveSheet.Cells(1, 1) = w(i).Sheets("CF analysis").Range("b2")
'ActiveSheet.Range("b2") = w(1).Sheets("CF analysis").Range("b5")
End Sub

上下文: 工作簿“快速分析 - Moneycontrol.xlsx”包含公司的财务模型。我希望能够比较多家公司的财务信息,因此为了这个目的,我想在每次将公司的财务信息粘贴到“快速分析 - Moneycontrol.xlsx”工作簿中时创建工作簿对象

我目前正在使下标超出范围错误。

任何人都可以帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

也许这会有所帮助:

Public w As Collection

Sub Test_addWBObject()

    Set w = New Collection

    w.Add Item:=Workbooks("Quick analysis - Moneycontrol.xlsx"), _
          Key:="MyUniqueKeyForThisWorkbook"

    'Can use collection as this:
    ThisWorkbook.Worksheets("Sheet1").Range("A1") = w(1).Worksheets("Sheet1").Range("C2")

    'or this
    ThisWorkbook.Worksheets("Sheet1").Range("A1") = w("MyUniqueKeyForThisWorkbook").Worksheets("Sheet1").Range("C2")

    'or this
    Dim wrkBk As Variant
    For Each wrkBk In w
         ThisWorkbook.Worksheets("Sheet1").Range("A1") = wrkBk.Worksheets("Sheet1").Range("C2")
    Next wrkBk

    'or this
    Dim x As Long
    For x = 1 To w.Count
        ThisWorkbook.Worksheets("Sheet1").Range("A1") = w(x).Worksheets("Sheet1").Range("C2")
    Next x

End Sub