Joh*_*man 18 excel vba excel-vba
我回答了这个问题,显然是对OP的满意,但仍然发现他们的问题令人费解.他们的问题涉及一个表达式,其中工作簿对象与字符串连接,触发Run-time Error '438': Object doesn't support this property or method.只需键入即可重现此类错误
?"Hello, " & ThisWorkbook
Run Code Online (Sandbox Code Playgroud)
在立即窗口中.
我的问题是-为什么会发生这种提高是错误,而不是错误13 -类型不匹配?一个合理的猜测是VBA尝试查找工作簿对象的默认属性,并且默认属性不存在.但是,如果是这样,我希望它是Microsoft的Visual Basic 6.0错误代码列表中的以下错误:Automation object doesn't have a default value (Error 443).
它主要是学术兴趣,但如果将没有默认属性的对象与字符串连接的结果总是错误438,这是触发错误438的唯一方法,而不是在将字符串与对象连接时可能出现的另一个错误,然后可能会使用以下代码:
Function HasDefault(O As Variant) As Boolean
Dim i As Long
If Not IsObject(O) Then Exit Function
On Error Resume Next
i = Len("Hello, " & O)
If Err.Number = 438 Then
HasDefault = False
Else
HasDefault = True
End If
End Function
Run Code Online (Sandbox Code Playgroud)
我已经在各种对象上对此进行了测试,对于那些我在其上测试过_Default的对象,当在对象浏览器中查看时没有显示为对象的(隐藏)成员时,它返回了False .不过,我不太相信这个功能,我仍然对这里发生的事情感到困惑.
VBA将尝试将&运算符每一侧的表达式转换为数据值.语言规范指出:
至于你的功能,我只想使用:
callbyname(O, "_Default", VbGet)
Run Code Online (Sandbox Code Playgroud)
这将在适当时引发438错误.