相关疑难解决方法(0)

将数组传递给ParamArray

是否可以将数组的所有元素传递给ParamArray?

例如,我想将ParamArray传递给另一个ParamArray:

Sub test()
    p1 "test", "banane", "birne"
End Sub

Sub p1(ParamArray keys() As Variant)
    p2 keys 'should be the same as: p2 "test", "banane", "birne"
End Sub

Sub p2(ParamArray keys() As Variant)
    Dim key As Variant
    For Each key In keys
        Debug.Print key 'Run-time error '13' Type mismatch (key is an array)
    Next key
End Sub
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ParamArray p2不包含元素keys,但它获取数组对象keys.因此,我必须检查,如果传递数组:

Sub test()
    p1 "test", "banane", "birne"
    p2 "test", "banane", "birne"
End Sub

Sub p1(ParamArray keys() As …
Run Code Online (Sandbox Code Playgroud)

parameters vba parameter-passing paramarray

15
推荐指数
3
解决办法
2万
查看次数

如何在VBA中为Variant分配Variant?

(警告:虽然乍看之下可能看起来像是一个问题,但这不是初学者级别的问题.如果你熟悉"强迫"一词,或者你曾经研究过VBA规范,请继续阅读.)

假设我有一个类型的表达式Variant,我想将它分配给一个变量.听起来很简单吧?

Dim v As Variant

v = SomeMethod()    ' SomeMethod has return type Variant
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果SomeMethod返回一个Object(即VarType为vbObject的Variant),则强制启动并v包含该对象的"简单数据值".换句话说,如果SomeMethod返回对TextBox的引用,v则将包含一个字符串.

显然,解决方案是使用Set:

Dim v As Variant

Set v = SomeMethod()
Run Code Online (Sandbox Code Playgroud)

这不幸的是,如果失败,SomeMethod没有返回一个对象,例如一个字符串,产生类型不匹配错误.

到目前为止,我找到的唯一解决方案是:

Dim v As Variant

If IsObject(SomeMethod()) Then
    Set v = SomeMethod()
Else
    v = SomeMethod()
End If
Run Code Online (Sandbox Code Playgroud)

这有SomeMethod两次打电话的不幸副作用.

没有需要调用SomeMethod两次的解决方案?

vba types variant

14
推荐指数
1
解决办法
3198
查看次数

将参数数组传递给 CallByName VBA

我正在使用 callByName I VBA 动态调用类的不同方法。根据方法的不同,我将拥有不同数量的参数,这些参数将保存在一个数组中。不幸的是 CallByName 接受一个 param 数组,因此传递一个变量数字并不简单。有没有办法解决这个问题,我找到了一个使用类型信息库的解决方案,但这似乎不适用于 VBA,即使我已将其添加为参考。下面是我想要的插图

 Public Sub Initialize_Object(ByRef TaskObject, Task_Collection)

 Dim Task_begin As Variant, Method_Parameters As Variant

 Task_begin = Task_Collection("Method")

 CallByName TaskObject, Task_begin, VbMethod, Method_Parameters
Run Code Online (Sandbox Code Playgroud)

arrays vba callbyname

3
推荐指数
1
解决办法
2224
查看次数