programing

왜 이것은 유형 불일치가 아닌가요?

powerit 2023. 6. 12. 21:55
반응형

왜 이것은 유형 불일치가 아닌가요?

저는 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

반응형