2014-10-28 56 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