2014-03-29 102 views
0

我有其收集,其個月在用戶形式打勾,包含複選框的函數:VBA傳遞數組從2D陣列的子

Function get_entries() As Boolean() 

這將返回一個2D布爾陣列(4,11)表示5×12複選框,而這又表示個月,是根據用戶窗體選定

以我主要功能:

Dim montharr() As Boolean 
montharr = get_entries() 

Call myfunc1(montharr(0)) 
Call myotherfunc(montharr(1)) 
Call myotherfunc(montharr(2)) 
Call myotherfunc(montharr(3)) 
Call myotherfunc(montharr(4)) 

我不能在12個元件的各個數組傳遞到潛艇蘇ccessfully。我曾嘗試將項目聲明爲變體,但這不起作用,並且花了很多年試圖使其發揮作用。任何想法歡迎。

+0

你應該創建新的_1D_數組,其值爲'montharr(0,1)','montharr(0,2)'等,並將其傳遞給'myotherfunc' –

回答

1

這裏有一個方法來 「切片」 2-d數組:

Sub ArraySlicing() 

Dim arr(1 To 5, 1 To 5) 
Dim slice 
Dim x, y 
Dim a As Application 

    For y = 1 To 5 
    For x = 1 To 5 
     arr(y, x) = "R" & y & ":C" & x 
    Next x 
    Next y 

    Set a = Application 

    'get first "column" 
    slice = a.Transpose(a.Index(arr, 0, 1)) 
    Debug.Print Join(slice, ", ") 

    'get second "row" (note double transpose) 
    slice = a.Transpose(a.Transpose(a.Index(arr, 2, 0))) 
    Debug.Print Join(slice, ", ") 

End Sub 

Index()給你一個2-d陣列 - (X,1)或(1,X) - Transpose()將進行轉換的一個一維數組。