Я ответил на этот вопрос, по-видимому, удовлетворенности 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
Я тестировал это на разных объектах, и для тех, кого я тестировал, он возвращался False именно тогда, когда _Default
не отображается как (скрытый) член объекта при просмотре в Обозреватель объектов. Тем не менее, я не вполне доверяю этой функции и все еще озадачен тем, что здесь происходит.