2010-07-19 14 views

Odpowiedz

64

Czy VarType jest tym, czego potrzebujesz?

Powoduje zwrócenie wartości wskazującej podtyp zmiennej.

+--------------+-------+---------------------------------------------+ 
| Constant | Value |     Description     | 
+--------------+-------+---------------------------------------------+ 
| vbEmpty  |  0 | Empty (uninitialized)      | 
| vbNull  |  1 | Null (no valid data)      | 
| vbInteger |  2 | Integer          | 
| vbLong  |  3 | Long integer        | 
| vbSingle  |  4 | Single-precision floating-point number  | 
| vbDouble  |  5 | Double-precision floating-point number  | 
| vbCurrency |  6 | Currency         | 
| vbDate  |  7 | Date          | 
| vbString  |  8 | String          | 
| vbObject  |  9 | Automation object       | 
| vbError  | 10 | Error          | 
| vbBoolean | 11 | Boolean          | 
| vbVariant | 12 | Variant (used only with arrays of Variants) | 
| vbDataObject | 13 | A data-access object      | 
| vbDecimal | 14 | Decimal Value        | 
| vbByte  | 17 | Byte          | 
| vbLongLong | 20 | LongLong integer (64 bit)     | 
| vbArray  | 8192 | Array          | 
+--------------+-------+---------------------------------------------+ 

Funkcja VarType nigdy nie zwraca wartość Array sama. To jest zawsze dodawane do pewnej innej wartości, aby wskazać tablicę określonego typu określonego jako . Wartość dla wariantu jest zwracana tylko wtedy, gdy została dodana wartość do tablicy Array, aby wskazać, że argument funkcji zmiennej VarType o numerze jest tablicą. Na przykład wartość zwrócona dla tablicy liczb całkowitych jest obliczana jako 2 + 8192 lub 8194. Jeśli obiekt ma właściwość domyślną, VarType (obiekt) zwraca typ jego domyślnej właściwości .

+1

VarType (indeks) zwraca 8. Co to oznacza. –

+5

8 = vbString - wskazuje ciąg znaków (z linku w mojej odpowiedzi) –

+2

Pozdrawiam. Zdrowy rozsądek powinien był powiedzieć, aby to sprawdzić przed pytaniem. Przepraszam. + Rep. –

26

Jeśli chcesz uzyskać nazwę typu obiektu przypisany do zmiennej z Set, można użyć zamiast TypeName.

Class SomeClass 
    '' empty class 
End Class 

Dim x 
Set x = New SomeClass 
WScript.Echo TypeName(x) '' displays "SomeClass" 
1

vartype jest właściwe ...

Dim x 
x=123 
msgbox VarType(x) 
3
Dim a, b, c, d, e, f 
a = 10 
b = "text" 
c = Split("John Doe,Jane Smith,Dick Tracy", ",") 
d = 1.2 
e = Null 
f = True 
MsgBox "'a' is " & fVarType(a) & vbNewLine & _ 
     "'b' is " & fVarType(b) & vbNewLine & _ 
     "'c' is " & fVarType(c) & vbNewLine & _ 
     "'d' is " & fVarType(d) & vbNewLine & _ 
     "'e' is " & fVarType(e) & vbNewLine & _ 
     "'f' is " & fVarType(f) & vbNewLine & _ 
     "'g' is " & fVarType(c(0)) 

Function fVarType(x) 
    Const ArrayCode = 8192 
    Dim y 
    y = VarType(x) 
    If y < ArrayCode Then 
     fVarType = fGetType(VarType(x)) 
    Else 
     fVarType = "vbArray with " & fGetType(VarType(x)- ArrayCode) & " elements" 
    End If 
End Function 

Function fGetType(vType) 
    Select Case vType 
     Case 0 fGetType = "vbEmpty" 
     Case 1 fGetType = "vbNull" 
     Case 2 fGetType = "vbInteger" 
     Case 3 fGetType = "vbLong" 
     Case 4 fGetType = "vbSingle" 
     Case 5 fGetType = "vbDouble" 
     Case 6 fGetType = "vbCurrency" 
     Case 7 fGetType = "vbDate" 
     Case 8 fGetType = "vbString" 
     Case 9 fGetType = "vbObject" 
     Case 10 fGetType = "vbError" 
     Case 11 fGetType = "vbBoolean" 
     Case 12 fGetType = "vbVariant" 
     Case 13 fGetType = "vbDataObject" 
     Case 14 fGetType = "vbDecimal" 
     Case 17 fGetType = "vbByte" 
     Case Else fGetType = "undetected" 
    End Select 
End Function 
+0

http://hastebin.com/sahanaqozo.avrasm O (1) ified to dla ciebie.^_^ – Dmitry

7

Tmdean „s odpowiedź działa również uzyskać nazwę typu (nie całkowita) z (prawie) wszystkie inne typy zmiennych (za http://msdn.microsoft.com/en-us/library/ie/y58s1cs6%28v=vs.84%29.aspx)

dim i,s,a 
i = 1 
s = "Hello world" 
a = split("Hello World"," ") 

WScript.Echo TypeName(i) 'Displays "Integer" 
WScript.Echo TypeName(s) 'Displays "String" 
WScript.Echo TypeName(a) 'Displays "Variant()" 
+0

Czy to jest odpowiedź czy spostrzeżenie? – Lankymart

+0

@Lankymart - Nie rozumiem pytania. Czy przykład nie działa w rzeczywistości dla kogoś? – user66001

0
Dim TypeDictionary 

Set TypeDictionary = CreateObject("Scripting.Dictionary") 
TypeDictionary.Add 0, "vbEmpty" 
TypeDictionary.Add 1, "vbNull" 
TypeDictionary.Add 2, "vbInteger" 
TypeDictionary.Add 3, "vbLong" 
TypeDictionary.Add 4, "vbSingle" 
TypeDictionary.Add 5, "vbDouble" 
TypeDictionary.Add 6, "vbCurrency" 
TypeDictionary.Add 7, "vbDate" 
TypeDictionary.Add 8, "vbString" 
TypeDictionary.Add 9, "vbObject" 
TypeDictionary.Add 10, "vbError" 
TypeDictionary.Add 11, "vbBoolean" 
TypeDictionary.Add 12, "vbVariant" 
TypeDictionary.Add 13, "vbDataObject" 
TypeDictionary.Add 17, "vbByte" 

Public Function GetType(argument) 
    GetType = TypeDictionary.Item(VarType(argument)) 
End Function 

Thi Wersja s inwestuje więcej wysiłku w konfigurowanie słownika, ale potem szuka dowolnego typu w jednym czeku (kciuki) zamiast sprawdzać każdy typ za każdym razem.

równoważny kod JScript (hipotetyczne, ponieważ JScript ma typeof i brakuje wielu VB typy):

var TypeDictionary = { 
    0: 'vbEmpty', 
    1: 'vbNull', 
    2: 'vbInteger', 
    3: 'vbLong', 
    4: 'vbSingle', 
    5: 'vbDouble', 
    6: 'vbCurrency', 
    7: 'vbDate', 
    8: 'vbString', 
    9: 'vbObject', 
    10: 'vbError', 
    11: 'vbBoolean', 
    12: 'vbVariant', 
    13: 'vbDataObject', 
    17: 'vbByte' 
}; 

var GetType = function() { 
    return TypeDictionary[arguments[0]]; 
};