Excel VBA数组(3d)新手

时间:2014-10-28 11:46:18

标签: excel vba populate multidimensional-array

我试图填充一个3d数组并且(此时)只是在msgbox中返回它,数组中我想要的数据是colums 9,15和16,就像......

2342341234,11 / 01 / 1969,18:00

我一直遇到类型不匹配,无法理解原因,如果可以,请提供帮助,欢迎所有建议,因为我是这方面的新手

Option Explicit
Global NumberOfRows As Integer
Global FirstRowOfData As Integer
Global LastRowOfData As Integer
Global i As Integer 'row loop
Global HospNo() As Integer
Global TRCDate() As Date
Global TRCTime() As Date
Global MonthArray(HospNo, TRCDate, TRCTime)


Sub CreateMonthArray()

    FirstRowOfData = 1

    With ActiveSheet
        LastRowOfData = Range(.Range("A1"), .Range("A65535").End(xlUp)).Count
    End With

    Dim MonthArray(HospNo, TRCDate, TRCTime)

    For i = FirstRowOfData To NumberOfRows

        Let MonthArray(HospNo) = (ActiveSheet.Cells(i + 1, 9).value)
        Let MonthArray(TRCDate) = (ActiveSheet.Cells(i + 1, 15).value)
        Let MonthArray(TRCTime) = (ActiveSheet.Cells(i + 1, 16).value)

    MsgBox MonthArray(HospNo(i), TRCDate(i), TRCTime(i))

    Next i

End Sub

非常感谢。

2 个答案:

答案 0 :(得分:0)

这不完全讨论如何创建和填充这些值的3D数组,而只是指出您所呈现的代码中的错误位置,这只是创建一行。

我怀疑你的错误出现在Global或Dim MonthArray语句中。在VBA中,Arrays没有"命名为"参数。如果这是问题,您可以尝试类似:

Global MonthArray(0 to 2) as Variant

然后,在您的代码中:

MonthArray(0) = (ActiveSheet.Cells(i + 1, 9).value)
MonthArray(1) = (ActiveSheet.Cells(i + 1, 15).value)
MonthArray(2) = (ActiveSheet.Cells(i + 1, 16).value)

如果你想使用Named Arguments(这对于调试来说非常方便,你可能应该定义一个Class对象。

在VBA中,我通常使用Public而不是Global;并且您应该在代码正文中消除MonthArray的重复声明。此外,Let语句是可选的。

您还需要确保将NumberOfRows变量设置为某个值。它未设置为此模块中的任何内容,但由于它是Public变量,因此您可能将其设置在其他位置。

最后,您的MsgBox语句应该通过索引号访问MonthArray中的数据。 EG:

MsgBox MonthArray(0) & ", " &  MonthArray(1) & "m " & MonthArray(2)

答案 1 :(得分:0)

谢谢罗恩,我不能告诉你我花了多长时间才努力让自己在这里工作而不羞辱自己。如果可以的话,我会提出这个问题......有了你的笔记,工作代码就在下面

Option Explicit
Public NumberOfRows As Integer
Public FirstRowOfData As Integer
Public LastRowOfData As Integer
Public i As Integer 'row loop
'Public HospNo() As Integer
'Public TRCDate() As Date
'Public TRCTime() As Date
Public MonthArray(0 To 2) As Variant


Sub CreateMonthArray()

    FirstRowOfData = 1

    With ActiveSheet
        LastRowOfData = Range(.Range("A1"), .Range("A65535").End(xlUp)).Count
    End With

    'Dim MonthArray(HospNo, TRCDate, TRCTime)

    For i = FirstRowOfData To LastRowOfData

         MonthArray(0) = (ActiveSheet.Cells(i + 1, 9).value)
         MonthArray(1) = (ActiveSheet.Cells(i + 1, 15).value)
         MonthArray(2) = (ActiveSheet.Cells(i + 1, 16).value)

    MsgBox MonthArray(0) & ", " & MonthArray(1) & ", " & MonthArray(2)

    Next i

End Sub