[英]Why isn't this a type mismatch?
我回答了這個問題,顯然是對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。 不過,我不太相信這個功能,我仍然對這里發生的事情感到困惑。
VBA將嘗試將&
運算符每一側的表達式轉換為數據值。 語言規范指出:
至於你的功能,我只想使用:
callbyname(O, "_Default", VbGet)
這將在適當時引發438錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.