Ich antwortete this Frage, offenbar zu OPs Zufriedenheit, aber immer noch ihre Frage rätselhaft finden. Ihre Frage umfasste einen Ausdruck, in dem ein Arbeitsmappenobjekt mit einer Zeichenfolge verkettet wurde, die Run-time Error '438': Object doesn't support this property or method
auslöst. Sie können diese Art von Fehler reproduzieren, indem Sie einfachWarum ist das nicht ein Typenkonflikt?
im Direktfenster eingeben.
Meine Frage ist - warum verursacht dies , dass Fehler, anstatt eines Fehlers 13 - Typ Mismatch? Eine vernünftige Schätzung ist, dass VBA versucht, eine Standardeigenschaft für ein Arbeitsmappenobjekt zu finden, und dass eine Standardeigenschaft nicht vorhanden ist. Aber, wenn dem so ist, würde ich erwarten, dass es der folgende Fehler von Microsofts Liste der Visual Basic 6.0-Fehlercodes ist: Automation object doesn't have a default value (Error 443)
.
Es ist meist von akademischem Interesse, aber wenn das Ergebnis der Verkettung eines Objekts ohne eine Standardeigenschaft mit einer Zeichenfolge ist immer Error 438, und das ist die einzige Möglichkeit zum Auslösen von Fehler 438 statt möglicherweise einen anderen Fehler beim Verketten einer Zeichenfolge mit einem Objekt, dann könnte der folgende Code von nutzen sein:
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
ich das auf einer Vielzahl von Objekten getestet haben, und für die ich es auf sie getestet haben ist falsch genau zurückgegeben, wenn _Default
nicht der Fall ist Wenn das Objekt im Objektbrowser angezeigt wird, wird es als (verborgenes) Mitglied des Objekts angezeigt. Trotzdem traue ich dieser Funktion nicht ganz und bin immer noch verwirrt darüber, was hier vor sich geht.
Die Antwort, die Sie selbst gegeben haben, scheint mir völlig in Ordnung zu sein. :) –