首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDF中缺少ParamArray

UDF中缺少ParamArray
EN

Stack Overflow用户
提问于 2018-06-03 14:51:02
回答 1查看 187关注 0票数 0

我正在尝试确定何时在未提供ParamArray参数的工作表上使用了使用ParamArray的用户定义函数(UDF)。

我尝试过IsEmpty、IsArray、IsError、比较nothing、比较长度为零的字符串等等。

我知道参数数组总是byVal,变量数组总是从零开始,但是如果它不存在,它怎么会是数组呢?

  • 将数组的第一个元素与Nothing或Nothing进行比较会抛出错误
  • IsEmpty reports False
  • IsArray奇怪地报告True
  • IsError报告两个测试和测试的False (0)

testParams自定义项:

代码语言:javascript
复制
Public Function testParams(ByRef ndx As Long, ParamArray tests())
    Select Case ndx
        Case 1
            testParams = CBool(tests(LBound(tests)) Is Nothing)
        Case 2
            testParams = IsEmpty(tests)
        Case 3
            testParams = IsArray(tests)
        Case 4
            testParams = IsError(tests)
        Case 5
            testParams = CBool(tests(LBound(tests)) = vbNullString)
    End Select
End Function

在下面的示例中,我只是返回到尝试访问ParamArray返回的工作表。

如何确定用户是否没有在需要ParamArray参数的实际UDF中提供这些参数?我更喜欢简单的布尔检查,而不是测试某些东西是否为空。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 08:46:49

有关数组分配的详细说明,请参阅http://www.cpearson.com/Excel/IsArrayAllocated.aspx

摘录:

如果使用下面的函数,IsArrayAllocated将准确返回True或False,表示数组是否已分配。此函数既适用于任意维数的静态数组,也适用于任意维数的动态数组,也适用于具有有效(不会导致错误的) LBound值的未分配数组

和函数

代码语言:javascript
复制
Function IsArrayAllocated(Arr() As Variant) As Boolean
    On Error Resume Next
    IsArrayAllocated = IsArray(Arr) And _
        Not IsError(LBound(Arr, 1)) And _
        LBound(Arr, 1) <= UBound(Arr, 1)
End Function

将其与带参数数组的Function一起使用

代码语言:javascript
复制
Function MyFunc(ParamArray pa()) As Variant
    Dim v()
    v = pa
    If IsArrayAllocated(v) Then
        'Do stuff with the parameters
    Else
        'There are no parameters...
    End If
End Function
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50663980

复制
相关文章

相似问题

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