2014-10-21 24 views
10

Diziyi argüman olarak kabul eden bir işlev yazmaya çalışıyorum. Dizi herhangi bir sayıda eleman içerebilir. Neyi yanlış yapıyorumDizide VBA'da bir işleve nasıl geçirilir?

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

: Ben bir hata söyleyerek olsun

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

: Burada

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 

ben işlevi çağırmak için deneyin nasıl?

cevap

15

Bu gereksiz görünüyor, ancak VBA garip bir yer. Bir dizi değişkeni bildirirseniz, Array() kullanarak ayarlayın ve sonra değişkeni işlevinize geçirin, VBA mutlu olacaktır. Eğer bütün kısalık şeyin içine ise

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

:

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

Ayrıca fonksiyon processArr() olarak yazılmış olabilir.

11
Ayrıca böyle bir ParamArray düşünebiliriz

Function processArr(Arr As Variant) As String 

İşleviniz bu onun beyanı değiştirdikten sonra benim için çalıştı

... ...

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 

Ve sonra işlevini çağırmak bunun gibi ...

processArr("foo", "bar")