相关疑难解决方法(0)

如何确定是否在VB6中初始化了一个数组?

将未扩展的数组传递给VB6的Ubound函数将导致错误,因此我想在检查其上限之前检查它是否已被标注尺寸.我该怎么做呢?

arrays vb6

52
推荐指数
6
解决办法
5万
查看次数

如何在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
查看次数

VBA:是什么导致传递给ParamArray的这个字符串参数变为一个数字(看起来像一个指针)?

最终编辑:它确实似乎是一个编译器错误 - 请参阅接受的答案.

在Excel 2007中使用VBA,我在'Class1'中有以下代码:

Option Explicit

Public Function strange(dummy As String, ParamArray pa())
    Debug.Print pa(LBound(pa))
End Function

Public Sub not_strange(dummy As String, ParamArray pa())
    Debug.Print pa(LBound(pa))
End Sub

Public Function also_not_strange(ParamArray pa())
    Debug.Print pa(LBound(pa))
End Function
Run Code Online (Sandbox Code Playgroud)

以及模块中的一些模式代码:

Option Explicit

Public Function not_strange_either(dummy As String, ParamArray pa())
    Debug.Print pa(LBound(pa))
End Function

Public Sub outer(v)
    Dim c As Class1
    Set c = New Class1

    Call c.strange("", v(LBound(v)))
    Call c.not_strange("", v(LBound(v)))
    Call c.also_not_strange(v(LBound(v)))

    Call not_strange_either("", v(LBound(v)))
End Sub
Run Code Online (Sandbox Code Playgroud)

如果从立即窗口调用'outer',如下所示:

call outer(array("a"))
Run Code Online (Sandbox Code Playgroud)

我得到了看起来很奇怪的输出: …

excel vba compiler-bug

11
推荐指数
1
解决办法
1457
查看次数

标签 统计

vba ×2

arrays ×1

compiler-bug ×1

excel ×1

types ×1

variant ×1

vb6 ×1