TypeName в Excel VBA возвращает что?


Я хочу проверить, какой тип данных находится в: Cells(2, 1).Value т. е. "что здесь происходит?" под.

Я попробовал имена (целочисленные / длинные и т. д.) но, кажется, не принимает.

If TypeName(Cells(r, 1).Value) = "WHAT GOES HERE?"  Then
    MsgBox "Yes"

Else
    MsgBox "No"

End If
4 2

4 ответа:

Что ж, заглянув в MSDN, мы получим таблицу возможных возвращаемых значений

String Returned     Variable
-------------------------------------------------------------------
Object type         An object whose type is objecttype
Byte                Byte value
Integer             Integer
Long                Long integer
Single              Single-precision floating-point number
Double              Double-precision floating-point number
Currency            Currency value
Decimal             Decimal value
Date                Date value
String              String
Boolean             Boolean value
Error               An error value
Empty               Uninitialized
Null                No valid data
Object              An object
Unknown             An object whose type is unknown
Nothing             Object variable that doesn't refer to an object

Кроме того, вы также можете увидеть приведенную выше таблицу, используя встроенную справку (кредит идет Акселю Рихтеру). Чтобы быстро перейти на соответствующую страницу, выберите функцию и нажмите F1 или перейдите на страницу справки через обозреватель объектов следующим образом:

Введите описание изображения здесь

Если ваша ячейка содержит число, то вероятное имя типа - "Double"

If TypeName(Cells(r, 1).Value) = "Double"  Then
    MsgBox "Yes"

Else
    MsgBox "No"

End If

Краткое Примечание:Вы можете просто попробовать его. Заполните ячейку, которую вы хотите проверить, значением и используйте

MsgBox TypeName(cells(2, 1).Value)

Если ячейки пусты, то возвращается Empty.

Если вам нужен номер переменной из таблицы MSDN , то вам нужен VarType. Вот так:

+===================+=======+====================================================+ | 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 value | +-------------------+-------+----------------------------------------------------+ | vbDate | 7 | Date value | +-------------------+-------+----------------------------------------------------+ | vbString | 8 | String | +-------------------+-------+----------------------------------------------------+ | vbObject | 9 | Object | +-------------------+-------+----------------------------------------------------+ | vbError | 10 | Error value | +-------------------+-------+----------------------------------------------------+ | vbBoolean | 11 | Boolean value | +-------------------+-------+----------------------------------------------------+ | vbVariant | 12 | Variant (used only with arrays of variants) | +-------------------+-------+----------------------------------------------------+ | vbDataObject | 13 | A data access object | +-------------------+-------+----------------------------------------------------+ | vbDecimal | 14 | Decimal value | +-------------------+-------+----------------------------------------------------+ | vbByte | 17 | Byte value | +-------------------+-------+----------------------------------------------------+ | vbLongLong | 20 | LongLong integer (Valid on 64-bit platforms only.) | +-------------------+-------+----------------------------------------------------+ | vbUserDefinedType | 36 | Variants that contain user-defined types | +-------------------+-------+----------------------------------------------------+ | vbArray | 8192 | Array | +-------------------+-------+----------------------------------------------------+

Тогда вы можете просто использовать

If VarType(TempArray) = vbObject Then Или If VarType(TempArray) = 9 Then