Tôi đã trả lời this câu hỏi, rõ ràng cho sự hài lòng của OP, nhưng vẫn thấy câu hỏi của họ khó hiểu. Câu hỏi của họ liên quan đến một biểu thức trong đó một đối tượng sổ làm việc được nối với một chuỗi, kích hoạt Run-time Error '438': Object doesn't support this property or method
. Bạn có thể tạo lại loại lỗi này bằng cách chỉ cần nhậpTại sao loại này không phù hợp?
?"Hello, " & ThisWorkbook
Trong cửa sổ ngay lập tức.
Câu hỏi của tôi là - tại sao điều này tăng lỗi, thay vì lỗi 13 loại không phù hợp? Một dự đoán hợp lý là VBA cố gắng tìm một thuộc tính mặc định cho một đối tượng sổ làm việc và rằng một thuộc tính mặc định không tồn tại. Tuy nhiên, nếu có, tôi hy vọng nó sẽ là lỗi sau đây từ danh sách các mã lỗi Visual Basic 6.0 của Microsoft: Automation object doesn't have a default value (Error 443)
.
Đó là phần lớn quan tâm học tập, nhưng nếu kết quả của việc ghép một đối tượng không có thuộc tính mặc định bằng chuỗi luôn là Lỗi 438 và đó là cách duy nhất kích hoạt Lỗi 438 thay vì có thể xảy ra lỗi khi ghép nối chuỗi với một đối tượng, sau đó mã sau đây có thể được sử dụng:
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
tôi đã thử nghiệm này trên một loạt các đối tượng, và đối với những người tôi đã thử nghiệm nó trên nó đã trở lại False chính xác khi nào _Default
không hiển thị như một thành viên (ẩn) của đối tượng khi được xem trong Trình duyệt đối tượng. Tuy nhiên, tôi không hoàn toàn tin tưởng vào chức năng này và vẫn còn bối rối bởi những gì đang diễn ra ở đây.
Câu trả lời bạn đã trao cho mình có vẻ hoàn toàn ổn với tôi. :) –