2017-08-25 31 views
-2

我有一個創建並返回數組的函數:無法指定數組,自定義函數

Function test() 
    Dim resultArray(1 To 3, 1 To 2) As Variant 
    Set resultArray(1, 1) = ThisWorkbook.Worksheets("setup").Range("A1:A1000") 
    Set resultArray(2, 1) = ThisWorkbook.Worksheets("setup").Range("B1:B1000") 
    Set resultArray(3, 1) = ThisWorkbook.Worksheets("setup").Range("C1:C1000") 

    Set resultArray(1, 2) = ThisWorkbook.Worksheets("setup").Range("D1:D1000") 
    Set resultArray(2, 2) = ThisWorkbook.Worksheets("setup").Range("E1:E1000") 
    Set resultArray(3, 2) = ThisWorkbook.Worksheets("setup").Range("F1:F1000") 


    test=resultArray 
End Function 

Sub testTestFunction() 
    Dim storedRanges() As Variant 'works fine 
    'Dim storedRanges(1 To 3, 1 To 2) As Variant 'error on the next line 
    storedRanges=test() 
    MsgBox ("DONE") 
End Sub 

我嘗試初始化Dim storedRanges() As VariantDim storedRanges(1 To 3, 1 To 2) As Variant的方法,只有前者的作品。爲什麼會發生?

+1

你的代碼甚至不應該編譯,你定義了兩次相同的變量(storedRanges) –

+0

@Vincent G,修正了現在編譯的問題。 – Ans

+0

好吧,鑑於它編譯,它在這裏工作。您在(3,2)大小的數組的(1,1)位置存儲對範圍的引用。 –

回答

0

傳遞數組要填充到的程序作爲參數ByRef可能適合你的需求:

Sub Test() 

    Dim storedRanges(1 To 3, 1 To 2) As Object 

    PutRanges storedRanges 

End Sub 

Sub PutRanges(q() As Object) 

    With ThisWorkbook.Worksheets("setup") 
     Set q(1, 1) = .Range("A1:A1000") 
     Set q(2, 1) = .Range("B1:B1000") 
     Set q(3, 1) = .Range("C1:C1000") 
     Set q(1, 2) = .Range("D1:D1000") 
     Set q(2, 2) = .Range("E1:E1000") 
     Set q(3, 2) = .Range("F1:F1000") 
    End With 

End Sub 
0

我使用動態陣列,而不是靜態地分配的一個:

Function test() As Variant() 
    Dim resultArray() As Variant 
    ReDim resultArray(1 To 3, 1 To 2) 
    Set resultArray(1, 1) = ThisWorkbook.Worksheets("setup").Range("A1:A1000") 
    Set resultArray(2, 1) = ThisWorkbook.Worksheets("setup").Range("B1:B1000") 
    Set resultArray(3, 1) = ThisWorkbook.Worksheets("setup").Range("C1:C1000") 

    Set resultArray(1, 2) = ThisWorkbook.Worksheets("setup").Range("D1:D1000") 
    Set resultArray(2, 2) = ThisWorkbook.Worksheets("setup").Range("E1:E1000") 
    Set resultArray(3, 2) = ThisWorkbook.Worksheets("setup").Range("F1:F1000") 


    test = resultArray 
End Function 

Sub testTestFunction() 
    Dim storedRanges() As Variant 'works fine 
    'Dim storedRanges(1 To 3, 1 To 2) As Variant 'error on the next line 
    storedRanges = test() 
    MsgBox ("DONE") 
End Sub 

結果是你所期望的。