문제
런타임 시 VB6에서 객체의 유형(문자열 이름이면 충분함)을 어떻게 얻을 수 있습니까?
즉.다음과 같은 것:
If Typeof(foobar) = "CommandButton" Then ...
/편집하다: 명확히 하려면 동적 형식 개체를 확인해야 합니다.예:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
출력은 "CommandButton"입니다.
해결책
당신이 찾고있는 것은 TypeOf가 아닌 TypeName이라고 생각합니다.
If TypeName(foobar) = "CommandButton" Then
DoSomething
End If
편집하다:동적 개체란 무엇을 의미하나요?CreateObject ( "")로 생성 된 개체를 의미합니까? 원인은 여전히 작동해야합니다.
편집하다:
Private Sub Command1_Click()
Dim oObject As Object
Set oObject = CreateObject("Scripting.FileSystemObject")
Debug.Print "Object Type: " & TypeName(oObject)
End Sub
출력
Object Type: FileSystemObject
다른 팁
TypeName은 당신이 원하는 것입니다 ...다음은 몇 가지 출력 예입니다.
VB6 코드:
Private Sub cmdCommand1_Click()
Dim a As Variant
Dim b As Variant
Dim c As Object
Dim d As Object
Dim e As Boolean
a = ""
b = 3
Set c = Me.cmdCommand1
Set d = CreateObject("Project1.Class1")
e = False
Debug.Print TypeName(a)
Debug.Print TypeName(b)
Debug.Print TypeName(c)
Debug.Print TypeName(d)
Debug.Print TypeName(e)
End Sub
결과:
String
Integer
CommandButton
Class1
Boolean
VB6 사본이 없지만 VB6 사본이 필요하다고 생각합니다.
Typename()
기능...Excel VBA에서 볼 수 있으므로 아마도 동일한 런타임에 있을 것입니다.흥미롭게도 도움말에는 사용자 정의 유형에 대해서는 작동하지 않아야 한다고 제안하는 것 같지만 이것이 제가 지금까지 유일한 방법이었습니다. 하다 그걸 써.
도움말 파일에서 발췌:
TypeName 함수
변수에 대한 정보를 제공하는 문자열을 반환합니다.
통사론
유형 이름(변수 이름)
필요한 바나 이름 인수는 사용자 정의 유형의 변수를 제외한 모든 변수를 포함하는 변형입니다.
VB6에서는 모든 개체가 COM(IDispatch
) 것들.따라서 그것들은 단지 인터페이스일 뿐입니다.
TypeOf(object) is class
아마도 COM get_interface 호출만 수행할 것입니다(정확한 메소드 이름을 잊어버렸습니다. 죄송합니다).