2015-08-26 35 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