Vba for Excel 宏中的集合数组

Posted

技术标签:

【中文标题】Vba for Excel 宏中的集合数组【英文标题】:Array of Collections in Vba for Excel macro 【发布时间】:2019-06-13 15:46:20 【问题描述】:

我目前正在尝试将我创建的集合添加到集合数组中。当我将我的收藏添加到我制作的收藏数组中时,它会不断抛出错误。该集合被添加到底部附近的第二个 for 循环中的数组中。也许我声明它是错误的,或者它只是不可能创建一个集合数组。在声明一个错误时,我没有收到任何错误,idk。有什么想法吗?

更新:它给我的错误是对象变量或未设置块变量。我正在尝试将我制作的集合添加到集合数组中

Update2:根据建议更改了一些代码。目前正在尝试弄清楚如何访问存储在 Collection 数组中的 Collection

Private Sub CommandButton2_Click()
    Dim currentWorksheet As Worksheet
    WS_Count = ActiveWorkbook.Worksheets.Count

    Dim rows As Integer
    rows = WS_Count - 3
    Dim itemsFoundList() As String
    Dim itemsSold() As Integer
    Dim numItems As String
    Dim counter As Integer
    Dim d As Integer

    Dim masterArray() As Collection
    ReDim masterArray(0 To WS_Count)

    Dim itemList As Collection

    counter = 1
    d = 1

    For i = 3 To WS_Count - 1
        Set currentWorksheet = ActiveWorkbook.Worksheets(i)
        Set itemList = New Collection
        numItems = numberOfItems(currentWorksheet, "Drink", "I2", "I18")
        ' MsgBox " " & numItems
        ReDim itemsFoundList(0 To CInt(numItems))
        ReDim itemsSold(0 To CInt(numItems))

        itemsFoundList = itemsFound(currentWorksheet, "Drink", "I2", "I18", CInt(numItems), "A")
        itemsSold = itemsSoldFound(currentWorksheet, "Drink", "I2", "I18", CInt(numItems), "E")

        itemList.Add itemsFoundList
        itemList.Add itemsSold
        itemList.Add currentWorksheet.Name


            Set masterArray(counter) = itemList

            'How to access Collection stored in Array of Collections?'

        counter = counter + 1
     Next i
End Sub

【问题讨论】:

“不断抛出错误”不是描述问题的有效方式。错误信息是什么? 你应该remove the parentheses in all those Adds,你应该初始化masterArray的元素,因为它包含WS_Count + 1Nothings。 @ArcherBird Longs 的数组是否只是 Longs 的集合?在某种意义上,不一定在所有意义上都是数组强加的。一个通常也不添加到数组中,只设置它的元素。您可以通过调整数组大小来“添加”数组,这是由ReDim masterArray(0 To WS_Count) 完成的。之后,该数组具有 WS_Count + 1 元素。所有这些元素都是Nothing,但它们的类型是Collection @Archer re 我认为问题出在 masterArray(counter).Add。 .Add 不是数组的方法。 那行是问题所在,但不是因为您建议的原因。 masterArray(counter)一个集合,只是一个还没有被初始化的集合。 您已删除括号。现在您所要做的就是将Set 添加到masterArray(counter) = itemList 并删除整个无意义的'Accessing stored Collection' 块。 【参考方案1】:

    在 Excel VBA 中无法形成集合数组。如果某个数组将被声明为 Variant 它可以接受其他数组并且可以形成一个锯齿状数组,但是如果某些创建的集合将尝试作为一个元素添加到该数组中,则程序在运行时(而不是在编译时) 将抛出错误消息 Run-time error '450' - image

    在您的示例中,您形成了一个集合集合。要访问包含在集合集合中的集合的单独元素,您首先需要从集合集合中提取单独的集合,然后您将能够访问此提取的集合的单独元素。

【讨论】:

以上是关于Vba for Excel 宏中的集合数组的主要内容,如果未能解决你的问题,请参考以下文章

VBA Excel 二维数组

如何将列值转换为vba宏中的行

VBA Word 从 Excel 中查找和替换 /&-

如何使用 VBA 在 Excel 宏中删除具有两列的重复项?

Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表

java将list集合中的for数据循环添加到String数组中