首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Excel字符串数组传递给用户定义的VBA函数

问将Excel字符串数组传递给用户定义的VBA函数
EN

Stack Overflow用户
提问于 2015-08-26 09:07:07
回答 3查看 1.1K关注 0票数 1

我希望使用Excel数组函数来生成字符串数组,然后将其传递给用户定义的函数,以去除空格并连接由","分隔的字符串。

我有一个从VBA宏调用时执行此操作的函数。当我尝试将其用作用户定义的函数时,例如=ConcStr({"A","B","C"}),我得到一个#Value!错误。

函数如下:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2015-08-26 09:23:03

如果你重写你的UDF来接受一个Variant,它应该可以工作。此外,您还可以只使用Join函数来完成所需的操作:

代码语言:javascript
复制
Function ConcStr(arr As Variant) As String
    ConcStr = Join(arr, ",")
End Function
票数 1
EN

Stack Overflow用户

发布于 2015-08-26 09:22:10

我能得到你想要的:

代码语言:javascript
复制
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

​

​

票数 0
EN

Stack Overflow用户

发布于 2015-08-26 09:22:59

声明、调整、赋值并将数组作为变量传递。

代码语言:javascript
复制
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版本来简化操作,并用Mid function修改了您的函数,删除了前导逗号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32216431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档