2015-08-26 34 views
1

我希望使用Excel數組函數來生成一個字符串數組,然後將其傳遞給用戶定義的函數以去除空格並連接由","分隔的字符串。將Excel字符串數組傳遞給用戶定義的VBA函數

我有一個函數在從VBA宏調用時執行此操作。當我嘗試將它用作用戶定義的功能時,例如=ConcStr({"A","B","C"}),我得到一個#Value!錯誤。

功能如下:

Sub StrTest() 
    Dim StaticArray(1 To 3) As String 
    Dim Result As String 
    StaticArray(1) = "A" 
    StaticArray(2) = "B" 
    StaticArray(3) = "C" 
    Result = ConcStr(Arr:=StaticArray) 
    MsgBox Result 
End Sub 

Function ConcStr(Arr() As String) As String 
    MsgBox "started" 
    Dim N As Long 
    Dim Total As String 
    For N = LBound(Arr) To UBound(Arr) 
     MsgBox Arr(N) 
     Total = Total & "," & Arr(N) 
    Next N 
    ConcStr = Total 
End Function 
+0

IIRC,您不能交換固定大小的數組和動態數組。 – RBarryYoung

回答

0

我能得到你想要的東西有:

Public Function ConcatString(ByVal arr As Variant) As String 
    ConcatString = vbNullString 
    Dim i As Long, n As Long, z as Long 
    z = LBound(arr) : n = UBound(arr) 
    For i = z To n 
     ConcatString = ConcatString + arr(i) 
    Next i 
End Function 

use

+0

數組參數「{」A「,」B「,」C「}的UDF不作爲VBA中的靜態數組傳遞。變體是應該用什麼來代替。 – ja72

+0

如果傳入的'arr'是零,例如LBound(arr)爲0? Your For ...接下來將跳過第一個數組元素。 – Jeeped

+0

好的。所以我解決了這個問題。我假設它將僅被用作UDF。 – ja72

0

申報,暗淡,分配並在傳遞數組作爲一個變種。

Sub StrTest() 
    Dim StaticArray As Variant, Result As String 

    ReDim StaticArray(1 To 3) 

    StaticArray(1) = "A" 
    StaticArray(2) = "B" 
    StaticArray(3) = "C" 

    Result = ConcStr(Arr:=StaticArray) 
    MsgBox Result 
    Result = ConcStr2(Arr:=StaticArray) 
    MsgBox Result 

End Sub 

Function ConcStr(Arr As Variant) As String 
    MsgBox "started" 

    Dim N As Long, Total As String 

    For N = LBound(Arr) To UBound(Arr) 
     MsgBox Arr(N) 
     Total = Total & "," & Arr(N) 
    Next N 

    ConcStr = Mid(Total, 2) 'Mid to get rid of the first comma 

End Function 

Function ConcStr2(Arr As Variant) As String 
    'could just be like this, 
    ConcStr2 = Join(Arr, ",") 
End Function 

我已經添加了一個替代Join Function版本simplfy的事情,並與Mid function修改你的函數刪除前導逗號。

+0

謝謝大家,非常感謝 – Lulu

1

如果您將UDF重寫爲接受Variant,則應該起作用。此外,您可以使用Join函數來完成您所需要的功能:

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