我回答this问题,显然是对OP的满意,但仍然发现他们的问题令人费解。他们的问题涉及一个表达式,其中工作簿对象与字符串连接,触发Run-time Error '438': Object doesn't support this property or method
。只需键入
?"Hello, " & ThisWorkbook
在立即窗口中。
我的问题是 - 为什么这会引起 错误,而不是错误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
我已经在各种对象上对此进行了测试,对于那些我在其上测试过的对象,当_Default
在查看时未显示为对象的(隐藏)成员时,它返回了False在对象浏览器中。尽管如此,我不太相信这个功能,我仍然对这里发生的事情感到困惑。
答案 0 :(得分:9)
VBA将尝试将&
运算符每一侧的表达式转换为数据值。语言规范指出:
关于你的功能,我只是使用:
callbyname(O, "_Default", VbGet)
会在适当时引发438错误。