2014-10-28 116 views
0

我正试图填充一个3d数组,并且(在这一点上)简单地在msgbox中返回它,我想在数组中的数据是在colums 9,15和16中,并且会像...Excel VBA数组(3d)新手

2342341234,1969年1月1日,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 

非常感谢。

+0

什么行给你的错误?阅读有关在VBA帮助中声明数组的信息。你的代码中也有重复的MonthArray声明。 – 2014-10-28 12:01:48

回答

0

这不是一个关于如何创建和填充这些值的三维数组的完整讨论,而只是指出您的错误出现在代码中,这只是创建一条线。

我怀疑你的错误出现在Global Month或Dim MonthArray语句中。在VBA中,数组没有“命名”参数。如果是这样的问题,你可以尝试这样的:

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) 

如果你想使用命名的参数(可用于调试真正的方便,你也许应该定义一个类的对象

在VBA中,我通常使用公共及不全局;你应该消除你的代码的身体你MonthArray重复申报此外,Let语句是可选的

您还需要确保您的NumberOfRows变量设置为某个值。它没有被设置为该模块中的任何内容,但由于它是一个公共变量,因此您可能会在其他位置设置它。

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

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

谢谢罗恩,我无法告诉你我花了多少时间努力工作,而不会在这里羞辱自己。我会upvote,如果我可以......用你的笔记,工作代码是低于

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 
+0

很高兴你能工作。一些我认为你可能一直试图做的事情可以通过类来启用。请参阅Chip Pearson的[VBA中的类](http://www.cpearson.com/Excel/Classes.aspx)的介绍。 – 2014-10-28 12:42:35