2014-10-21 28 views
10

Tôi đang cố gắng viết một hàm chấp nhận một mảng làm đối số. Mảng có thể có bất kỳ số phần tử nào.Làm thế nào để truyền một mảng tới một hàm trong VBA?

Function processArr(Arr() As Variant) As String 
    Dim N As Variant 
    dim finalStr as string  
    For N = LBound(Arr) To UBound(Arr) 
     finalStr = finalStr & Arr(N) 
    Next N 
    processArr = finalStr 
End Function 

Sau đây là cách tôi cố gắng gọi hàm:

Sub test() 
    Dim fString as string 
    fString = processArr(Array("foo", "bar")) 
End Sub 

tôi nhận được một lỗi nói:

Compile Error: Type mismatch: array or user defined type expected.

Tôi đang làm gì sai?

Trả lời

15

Điều này có vẻ không cần thiết, nhưng VBA là một nơi lạ. Nếu bạn khai báo một biến mảng, sau đó đặt nó bằng cách sử dụng Array() sau đó chuyển biến vào hàm của bạn, VBA sẽ được hạnh phúc.

Sub test() 
    Dim fString As String 
    Dim arr() As Variant 
    arr = Array("foo", "bar") 
    fString = processArr(arr) 
End Sub 

Ngoài ra chức năng của bạn processArr() có thể được viết như sau:

Function processArr(arr() As Variant) As String 
    processArr = Replace(Join(arr()), " ", "") 
End Function 

Nếu bạn là thành toàn bộ điều ngắn gọn.

11

Chức năng của bạn làm việc cho tôi sau khi thay đổi tuyên bố của mình cho này ...

Function processArr(Arr As Variant) As String 

Bạn cũng có thể xem xét một ParamArray như thế này ...

Function processArr(ParamArray Arr() As Variant) As String 
    'Dim N As Variant 
    Dim N As Long 
    Dim finalStr As String 
    For N = LBound(Arr) To UBound(Arr) 
     finalStr = finalStr & Arr(N) 
    Next N 
    processArr = finalStr 
End Function 

Và sau đó gọi hàm như thế này ...

processArr("foo", "bar") 
Các vấn đề liên quan