寻求用于检测方法参数的测试是一个文本数组

Seeking a test for detecting a parameter to a method is a literal array

提问人:freeflow 提问时间:11/15/2023 更新时间:11/16/2023 访问量:35

问:

我需要确定传递给方法的数组是变量还是文字数组

  1. 按变量传递
Dim myA as Variant
myA = array(1,2,3,4,5)
myMethod myA

诗句 2. 通过文字数组传递

myMethod Array(1,2,3,4,5)

我已经查看了两种类型的参数的变体 VT 类型和 safearray 结构的 ffeatures 标志,在这两种情况下,我都得到了 &H 0880 的 VT 和 &H200C 的 ffeatures 。这意味着目前我无法区分 MyA 和 Array(1,2,3,4,5)。

问这个问题的原因是我正在尝试创建一个持久化对 Array 的引用的类。使用 myA,这没有问题,因为数组独立于类而存在。但是,对于 Array(1,2,3,4,5),数组是瞬态的,一旦方法返回,它就不再存在,因此在这种情况下,我需要复制数组。

我希望能提供关于我下一步应该去哪里的指示。

阵列 VBA 变体

评论

0赞 CHill60 11/15/2023
您可以使用该功能 learn.microsoft.com/en-us/office/vba/language/reference/...IsArray
0赞 freeflow 11/15/2023
@CHill60 这似乎不是一个有用的回应。这两个参数都是数组。它只是将它们呈现为不同的参数的方式。
0赞 CHill60 11/16/2023
好点 - 我误读了这个问题

答:

0赞 freeflow 11/16/2023 #1

我还没有通过测试输入变量找到解决方案。

但是,我发现如果我对输入数组应用了 safearray 锁,那么在文字数组的情况下,它在退出方法后不会被销毁。

此操作确实意味着在我删除锁之前无法调整非文字外部数组的大小,但我认为这是一个可以接受的权衡。