Получение типа среды выполнения VB6
Вопрос
Как получить тип (достаточно имени в виде строки) объекта в VB6 во время выполнения?
то естьчто-то вроде:
If Typeof(foobar) = "CommandButton" Then ...
/РЕДАКТИРОВАТЬ: чтобы уточнить, мне нужно проверить динамически типизированные объекты.Пример:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
Где вывод будет «CommandButton»
Решение
Я думаю, что вы ищете TypeName, а не TypeOf.
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, но я думаю, вам понадобится
Typename()
функция...Я вижу это в Excel VBA, так что, вероятно, это та же среда выполнения.Интересно, что справка, похоже, предполагает, что она не должна работать для определяемого пользователем типа, но это почти единственный способ, которым я когда-либо пользовался. делать используй это.
Выдержка из файла помощи:
ТипИмя Функция
Возвращает строку, содержащую информацию о переменной.
Синтаксис
Имя типа (имя_переменной)
Требуемый аргумент Varname-это вариант, содержащий любую переменную, за исключением переменной пользовательского типа.
Это должно оказаться трудным, поскольку в VB6 все объекты являются COM (IDispatch
) вещи.Таким образом, они являются лишь интерфейсом.
TypeOf(object) is class
вероятно, выполняет только вызов COM get_interface (извините, я забыл точное имя метода).