왜 이것은 유형 불일치가 아닌가요?
저는 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을 트리거하는 유일한 방법이 오류 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
개체 브라우저에서 개체를 볼 때 개체의 숨겨진 구성원으로 표시되지 않습니다.그럼에도 불구하고, 저는 이 기능을 잘 신뢰하지 않고 여전히 여기서 무슨 일이 일어나고 있는지에 대해 어리둥절합니다.
VBA는 각 면의 식을 변환하려고 시도합니다.&
연산자를 데이터 값으로 변환합니다.언어 사양에는 다음이 명시되어 있습니다.
- 식의 대상 변수 값 유형이 클래스인 경우:
- 선언된 대상 유형이 변형인 경우 런타임 오류 9
(가입자가 범위를 벗어남)이 상승합니다. - 선언된 대상 유형이 변형이 아니며 대상에 공용 기본 속성 가져오기 또는 함수가 있는 경우 데이터 값의 값은 이 인수 목록을 사용하여 해당 대상에 대해 이 기본 멤버를 호출한 결과입니다.이렇게 하면 인수 목록이 소모됩니다.
- 그렇지 않으면 런타임 오류 438(개체가 이 속성 또는 메서드를 지원하지 않음)이 발생합니다.
당신의 기능과 관련하여, 저는 그저 다음을 사용할 것입니다.
callbyname(O, "_Default", VbGet)
438 오류가 발생할 수 있습니다.
언급URL : https://stackoverflow.com/questions/37943284/why-isnt-this-a-type-mismatch
'programing' 카테고리의 다른 글
Node.js는 경로가 파일인지 디렉토리인지 확인합니다. (0) | 2023.06.12 |
---|---|
루비에서 attr_accessor란 무엇입니까? (0) | 2023.06.12 |
'!:'와 '의 차이점은 무엇입니까?TypeScript 개체 정의에서? (0) | 2023.06.12 |
설치된 종속성에서 @types 유형 제외 (0) | 2023.06.07 |
문을 사용하여 중첩됨 (0) | 2023.06.07 |