【问题标题】:Can I populate the same array from two differeent subs?我可以从两个不同的 sub 填充相同的数组吗?
【发布时间】:2016-08-22 17:30:40
【问题描述】:

我有一个代码,我开始在一个 sub 中填充一个数组。稍后在另一个子中,我试图用其他信息填充相同的数组。它不起作用,因为我收到运行时错误 9。我被告知我不能这样做,因为 redim 不适用于我的数组的第一维。

我的问题是有另一种方法可以完成这项工作吗?以下是我目前所拥有的。

发生错误:

Sub PartTwo()

    ReDim WorkArray(1 To GEMclass.NumofP, 1 To 4)

    For c = 1 To UBound(FullArray, 1)       
        If GEMclass.g = FullArray(c, 1) Then                                        
            Count = Count + 1 

            WorkArray(Count, 1) = FullArray(c, 1)
            WorkArray(Count, 2) = FullArray(c, 4)
            WorkArray(Count, 3) = FullArray(c, 7)
            WorkArray(Count, 4) = FullArray(c, 6)        
        End If        
    Next c

    ReDim Preserve WorkArray(1 To GEMclass.NumofP, 1 To 4)                
    CumulativePartners = GEMclass.NumofP

End Sub

Sub PartThree()

    For e = 1 To Count        
        If dict.Exists(WorkArray(e, 2)) Then

            TempCP = CumulativePartners
            CumulativePartners = CumulativePartners + dict(WorkArray(e, 2)).NumofP                                             
            For f = 1 To UBound(FullArray, 1)

                If WorkArray(e, 2) = FullArray(f, 1) Then                                
                    For g = 1 To dict(WorkArray(e, 2)).NumofP                                    
                        Dim test As Integer
                        test = TempCP + g

                        WorkArray(test, 1) = FullArray(f, 1)<---Runtime error 9
                        WorkArray(test, 2) = FullArray(f, 4)
                        WorkArray(test, 3) = FullArray(f, 7)
                        WorkArray(test, 4) = FullArray(f, 6)                                        
                    Next g                                
                End If

            Next f                
            ReDim Preserve WorkArray(1 To CumulativePartners, 1 To 4)
        Else
            MsgBox "No"
        End If        
    Next e

End Sub

【问题讨论】:

  • 出现错误时testUBound(WorkArray, 1)的值是多少?
  • 第 1 步:使用 Option Explicit 并了解变量范围。 WorkArray 在哪里声明?谁在打电话给PartTwo?谁在打电话给PartThree
  • test的值为3,值为。你的意思是ubound Fullarray的值吗?答案是 25
  • 我正在使用显式选项。变量在另一个子 (Partone) 中声明。第一部分也调用了 PartTwo 和 PartThree。

标签: arrays vba excel multidimensional-array


【解决方案1】:

顺便说一句,您的范围界定不正确。 Part2 试图引用仅对 Part3 本地的变量。它应该是这样的:

Option Explicit

Dim WorkArray(1 to GEMclass.NumofP, 1 To 4)

Sub PartTwo()
    'Your code
End Sub

Sub PartThree()
    'Your code
End Sub

如果你在同一个模块中重新构造你的声明,WorkArray 将成为两个子例程的可用变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多