2015-09-08 71 views
0

我有很多麻煩,只需使用已知長度的數組作爲輸入參數傳遞給VBA子/功能。我在其他答案中嘗試了一些修復/解決方法,但出於某種原因或其他原因,它們都不起作用。申報陣列輸入參數

我仍然無法得到它的工作,這裏是我的實際代碼的例子:

Sub toDo() 

ReDim thisArray(1 To 4, 1 To 10): k = 1 
For i = 1 To 4 
For j = 1 To 10 
thisArray(i, j) = k 
k = k + 1 
Next: Next 

pasteArray(Ubound(thisArray,1), Ubound(thisArray,2),2,2,thisArray) 

End Sub 

Public Sub pasteArray(x As Integer, y As Integer, _ 
locX As Integer, locY As Integer, _ 
ParamArray myArray() As Variant) 

ReDim myArray(1 To x, 1 To y) As Double 
Range(Cells(locX, locY), Cells(x + locX - 1, y + locY - 1)) = myArray 

End Sub 

我只是想過去thisArray()細胞(2,2),但我現在得到編譯錯誤:語法錯誤,在我的toDo子行調用pasteArray子。

我也得到一個編譯錯誤:期待=,在同一條線上。我不知道爲什麼它不應該返回任何東西。

+0

我們需要一些更多的信息 - 什麼是你想用'useArray'辦?或者,你通常問你怎麼了'useArray'子使用數組('someArray')從'mainToDo()'子? – BruceWayne

+0

我已經修改了提交的代碼一點,我已經包括了一個例子子,我一直在努力執行。到目前爲止,我一直在通過不做任何工作來獲得我的代碼。不過,由於我會這樣做,所以我想放棄這種解決方法,並將它打包成一個很好的子文件。 = D謝謝 –

回答

0

嘗試這樣的:

Sub mainToDo() 
    Dim someArray(1 To 10) As Integer 
    Dim i As Integer: i = 1 
' For Each ind In someArray 
'  ind = i 
'  i = i + 1 
' Next 
    For j = 1 To 10 
     someArray(j) = i 
     i = i + 1 
    Next 

    useArray (someArray) 

End Sub 

Sub useArray(arr As Variant) 
    For i = LBound(someArray) To UBound(arr) 
     Debug.Print arr(i) 
    Next 
End Sub 

我評論了你的For...Loop,因爲它沒有保存的價值。

0
Sub mainToDo() 
Dim someArray(1 To 10) As Integer 
Dim ind 
    ' Dim someArray(1 To 10) 
    Dim i As Integer: i = 1 
    For Each ind In someArray 
     ind = i 
     i = i + 1 
    Next 
    useArray someArray 
End Sub 

然後,只需設置第二個子。像這樣:

Sub useArray(ByRef someArray() As Integer) 
Dim i As Integer 

For i = LBound(someArray) To UBound(someArray) 
    Debug.Print someArray(i) 
    ' Do whatever you want here, with each array item. 
Next i 
End Sub 

注意:您當前mainToDo()沒有設置任何值到someArray,所以第二次將只打印0數組中的每個項目。

此外,可以通過在陣列作爲一個全局變量,並且使用它作爲這樣(參見this thread例如)。