我正在尝试确定何时在未提供ParamArray参数的工作表上使用了使用ParamArray的用户定义函数(UDF)。
我尝试过IsEmpty、IsArray、IsError、比较nothing、比较长度为零的字符串等等。
我知道参数数组总是byVal,变量数组总是从零开始,但是如果它不存在,它怎么会是数组呢?
testParams自定义项:
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中提供这些参数?我更喜欢简单的布尔检查,而不是测试某些东西是否为空。
发布于 2018-06-04 08:46:49
有关数组分配的详细说明,请参阅http://www.cpearson.com/Excel/IsArrayAllocated.aspx
摘录:
如果使用下面的函数,IsArrayAllocated将准确返回True或False,表示数组是否已分配。此函数既适用于任意维数的静态数组,也适用于任意维数的动态数组,也适用于具有有效(不会导致错误的) LBound值的未分配数组
和函数
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一起使用
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 Functionhttps://stackoverflow.com/questions/50663980
复制相似问题