Vba excel определение типа данных

В языке VBA есть универсальные типы данных, т.е. способные хранить как число, так и строку, дату и любой другой тип информации. Например, ячейка в таблице может содержать что угодно и изначально, программа не знает какой в ней тип данных хранится. Кроме того, в самой программе может использоваться тип данных Variant, который так же может содержать любое значение любого типа.

Чтобы определить какой тип данных в ячейке или в переменной типа Variant, можно воспользоваться несколькими способами.

Способ 1. Использовать функцию TypeName для определения типа данных

Эта функция возвращает строку с названием типа данных на английском. В качестве аргумента принимает переменную, значение ячейки.
Обратите внимание: Функция определяет только стандартные типы данных и не может определить пользовательский тип (определенный с помощью Type).

Возможные возвращаемые функцией значения:

Byte Число типа Byte
Integer Целое число
Long Длинное целое число
Single Число одиночной точности с плавающей запятой
Double Число двойной точности с плавающей запятой
Currency Валюта
Decimal Число с плавающей запятой
Date Дата
String Строка
Boolean Логическое
Error Ошибка
Empty Не проинициализировано (т.е. переменная не была объявлена)
Null Неверные данные (в переменной нет корректных данных)
Object Объект (класс)
Unknown Тип данных не известен
Nothing Объект, никуда не ссылающийся

Приведу несколько примеров по использованию TypeName.

Пример 1. Определение типа переменной.

Dim v As Integer
MsgBox TypeName(v) ' Выведет: Integer

Обратите внимание: если вы используете результат TypeName в условии, т.е. проверяете, соответствует ли тип данных определенному, например, Integer, то регистр символов возвращаемого типа имеет значение. Т.е. нужно писать Integer с заглавной буквы, либо использовать приведение всех символов к одному регистру.

Пример 2. Использование TypeName в условии.

Dim v As Integer
If TypeName(v) = "Integer" Then MsgBox "Yes" Else MsgBox "No"         ' Yes
If TypeName(v) = "integer" Then MsgBox "Yes" Else MsgBox "No"         ' No
If LCase(TypeName(v)) = "integer" Then MsgBox "Yes" Else MsgBox "No"  ' Yes

Пример 3. Определение типа данных в ячейке.

MsgBox TypeName(Cells(1, 1).Value) ' Выведет тип данных в ячейке A1

Если функции была передана переменная массив, она вернет тип данных в массиве с добавлением скобок.

Пример 4. Определение типа массива.

Dim Arr1(10) As Integer
Dim Arr2(10)
MsgBox TypeName(Arr1) ' Выведет: Integer()
MsgBox TypeName(Arr2) ' Выведет: Variant()

Способ 2. Проверка на возможность преобразования строки к нужному типу.

Бывает ситуация, когда значение, например, число или дата, содержится в строке. В этом случае TypeName вернет String, а не Integer или Date. Чтобы узнать, что содержится в строке, можно воспользоваться одной из функций IsNumeric, IsDate, IsObject, IsArray, IsNull, IsError.

IsNumeric Проверяет может ли выражение быть преобразовано в число
IsDate Проверяет может ли выражение быть преобразовано в дату
IsObject Проверяет, является ли переменная объектом
IsArray Проверяет, является ли переменная массивом
IsNull Проверка на пустое значение
IsError Проверка выражения на ошибку

Пример 4. Определение может ли переменная быть преобразована в число.

Dim v As String
If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no (т.к. в строке нет числа)
v = "120"
If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes
v = "120.45"
If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no
v = "test 120"
If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no
v = "120 test"
If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no

К сожалению, как видим из примера, нет возможности проверить, содержится ли в строке число с плавающей точкой.

Пример 5. Определение содержит ли переменная дату (может быть преобразована в дату).

Dim firstDate, secondDate As Date
Dim timeOnly, dateAndTime, noDate As String
firstDate = CDate("12.05.2017")
secondDate = #12/5/2017#
timeOnly = "15:45"
dateAndTime = "12.05.2017 15:45"
noDate = "Test"
If IsDate(firstDate) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes
If IsDate(secondDate) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes
If IsDate(timeOnly) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes
If IsDate(dateAndTime) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes
If IsDate(noDate) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no

Проверка, содержится ли число или дата в ячейке листа делается аналогично, как и с переменными.

Помимо этих способов можно конечно еще придумать и другие, например, проверку строки с данными регулярным выражением или пройти по каждому символу в цикле и проверить цифра это или нет и тому подобное. Но на мой взгляд, описанных мной способов вполне достаточно для решения повседневных задач.

Dear Friends,
Some time during the VBA programming you may need to perform different action based on “what is the type of the variable” you are dealing with. Or in other words what kind of data is stored in a variable. In VBA, if you have not defined type of a variable while declaring it using “Dim statement”, then whatever value you assign to that variable, data type of the value is inherited by the variable.

How to find the Data Type of a Variable

How to find the Data Type of a Variable

Get the data type of a Variable in VBA

VarTpe(YourVariable) is a VBA function which

1. Takes your variable name as input parameter
2. Returns the data type of the variable or type of the data stored in this variable.

How to use VarType() VBA function

In the below example, code VBA.VarType(varString) will return 8. This is the return value for String Type variable. Refer the below table for return value for all the data types.


Sub GetTypeOfAllVariables()
    Dim varString As String
    MsgBox "Data Type of the Variable varString is : " & VBA.VarType(varString)
End Sub

Data Types and their Return Value

Variable Type Return Value
Variant 0
Integer 2
Long 3
Single 4
Double 5
Currency 6
Date 7
String 8
Boolean 11
Byte 17

As I mentioned above, this function does not return the variable type what is defined but also based on what kind of value it has stored in it. This is quite possible that a variable defined as Variant is holding a NULL value or Nothing or Empty etc. These are special cases where VBA returns different values based on the data which this Variant variable is holding.

Where should I use this?

In VBA, it is possible to define a variable without any type (default type = Variant). This variable will keep changing its type based on the value assigned to it during run time. Then sometime, during programming it will become important to know what kind of data it has got at this moment before I perform any operation on it.

More about VarType Function

As I believe that Microsoft Excel VBA help is really rich. You should always start with the help provided there. It is available offline as well which is the best part of it. Therefore make use of it in learning VBA.
To know more about these return values which I have not specified here you can get them here:

varType - VBA Function

varType – VBA Function

Содержание

  1. Определение типа данных в ячейке или переменной
  2. Способ 1. Использовать функцию TypeName для определения типа данных
  3. Способ 2. Проверка на возможность преобразования строки к нужному типу.
  4. VarType function
  5. Syntax
  6. Return values
  7. Remarks
  8. Example
  9. See also
  10. Support and feedback
  11. Функция TypeName
  12. Синтаксис
  13. Замечания
  14. Пример
  15. См. также
  16. Поддержка и обратная связь
  17. TypeName function
  18. Syntax
  19. Remarks
  20. Example
  21. See also
  22. Support and feedback

Определение типа данных в ячейке или переменной

В языке VBA есть универсальные типы данных, т.е. способные хранить как число, так и строку, дату и любой другой тип информации. Например, ячейка в таблице может содержать что угодно и изначально, программа не знает какой в ней тип данных хранится. Кроме того, в самой программе может использоваться тип данных Variant, который так же может содержать любое значение любого типа.

Чтобы определить какой тип данных в ячейке или в переменной типа Variant, можно воспользоваться несколькими способами.

Способ 1. Использовать функцию TypeName для определения типа данных

Эта функция возвращает строку с названием типа данных на английском. В качестве аргумента принимает переменную, значение ячейки.
Обратите внимание: Функция определяет только стандартные типы данных и не может определить пользовательский тип (определенный с помощью Type).

Возможные возвращаемые функцией значения:

Byte Число типа Byte
Integer Целое число
Long Длинное целое число
Single Число одиночной точности с плавающей запятой
Double Число двойной точности с плавающей запятой
Currency Валюта
Decimal Число с плавающей запятой
Date Дата
String Строка
Boolean Логическое
Error Ошибка
Empty Не проинициализировано (т.е. переменная не была объявлена)
Null Неверные данные (в переменной нет корректных данных)
Object Объект (класс)
Unknown Тип данных не известен
Nothing Объект, никуда не ссылающийся

Приведу несколько примеров по использованию TypeName.

Пример 1. Определение типа переменной.

Обратите внимание: если вы используете результат TypeName в условии, т.е. проверяете, соответствует ли тип данных определенному, например, Integer, то регистр символов возвращаемого типа имеет значение. Т.е. нужно писать Integer с заглавной буквы, либо использовать приведение всех символов к одному регистру.

Пример 2. Использование TypeName в условии.

Пример 3. Определение типа данных в ячейке.

Если функции была передана переменная массив, она вернет тип данных в массиве с добавлением скобок.

Пример 4. Определение типа массива.

Способ 2. Проверка на возможность преобразования строки к нужному типу.

Бывает ситуация, когда значение, например, число или дата, содержится в строке. В этом случае TypeName вернет String, а не Integer или Date. Чтобы узнать, что содержится в строке, можно воспользоваться одной из функций IsNumeric, IsDate, IsObject, IsArray, IsNull, IsError.

IsNumeric Проверяет может ли выражение быть преобразовано в число
IsDate Проверяет может ли выражение быть преобразовано в дату
IsObject Проверяет, является ли переменная объектом
IsArray Проверяет, является ли переменная массивом
IsNull Проверка на пустое значение
IsError Проверка выражения на ошибку

Пример 4. Определение может ли переменная быть преобразована в число.

К сожалению, как видим из примера, нет возможности проверить, содержится ли в строке число с плавающей точкой.

Пример 5. Определение содержит ли переменная дату (может быть преобразована в дату).

Проверка, содержится ли число или дата в ячейке листа делается аналогично, как и с переменными.

Помимо этих способов можно конечно еще придумать и другие, например, проверку строки с данными регулярным выражением или пройти по каждому символу в цикле и проверить цифра это или нет и тому подобное. Но на мой взгляд, описанных мной способов вполне достаточно для решения повседневных задач.

Источник

VarType function

Returns an Integer indicating the subtype of a variable, or the type of an object’s default property.

Syntax

VarType(varname)

The required varname argument is a Variant containing any variable except a variable of a user-defined type.

Return values

Either one of the following constants or the summation of a number of them is returned.

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 (always added to another constant when returned by this function)

These constants are specified by Visual Basic for Applications. The names can be used anywhere in your code in place of the actual values.

If an object is passed and has a default property, VarType(object) returns the type of the object’s default property.

The VarType function never returns the value for vbArray by itself. It’s always added to some other value to indicate an array of a particular type. For example, the value returned for an array of integers is calculated as vbInteger + vbArray, or 8194.

The constant vbVariant is only returned in conjunction with vbArray to indicate that the argument to the VarType function is an array of type Variant.

Example

This example uses the VarType function to determine the subtypes of different variables, and in one case, the type of an object’s default property.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Функция TypeName

Возвращает данные String, которые предоставляют информацию о переменной.

Синтаксис

TypeName(варнаме)

Обязательный аргументварнаме представляет собой variant, содержащий любую переменную, кроме переменной определяемого пользователем типа.

Замечания

Строка, возвращаемая функцией TypeName, может быть одного из следующих типов:

Возвращаемая строка Переменная
тип объекта Объект, тип которого — objecttype
Byte Значение типа Byte
Integer Integer
Long Целое значение типа Long
Одинарное с плавающей точкой Число с плавающей запятой (точкой) одиночной точности
Double Число с плавающей запятой (точкой) двойной точности
Currency Значение типа Currency
Decimal Десятичная величина
Date Значение типа Date
String String
Логический Значение типа Boolean
Ошибка Значение ошибки
Empty Неинициализированных
Null Отсутствие допустимых данных
Object Объект
Unknown Объект, тип которого не известен
Ничего Объектная переменная, которая не ссылается на объект

Если аргумент varname — массив, возвращаемая строка может быть любой из возможных возвращаемых строк (или Variant) с добавленными пустыми круглыми скобками. Например, если варнаме является массивом целых чисел, TypeName возвращает «Integer() значение .

Пример

В этом примере функция TypeName используется для возврата информации о переменной.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

TypeName function

Returns a String that provides information about a variable.

Syntax

TypeName(varname)

The required varname argument is a Variant containing any variable except a variable of a user-defined type.

The string returned by TypeName can be any one of the following:

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

If varname is an array, the returned string can be any one of the possible returned strings (or Variant) with empty parentheses appended. For example, if varname is an array of integers, TypeName returns «Integer() «.

Example

This example uses the TypeName function to return information about a variable.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

VBA VARTYPE means “Variable Type.” This function helps us to identify the data type assigned to the specific variable. Simply put, it finds what kind of value is stored or assigned to the variable.

Table of contents
  • Excel VBA VarType Function
    • Examples
      • Example #1
      • Example #2
      • Example #3
    • Things to Remember
    • Recommended Articles

Syntax

VarType Syntax

VarName: We need to supply the variable name to find the data stored in the supplied variable name.

So, it takes the variable name as the syntax or argument, and in the output, it returns the data type assigned to the variable or the kind of data stored in the variable.

So, if you have ever wondered how to find the variable data type or the kind of data assigned to the variable, then here we have a VBA functionVBA functions serve the primary purpose to carry out specific calculations and to return a value. Therefore, in VBA, we use syntax to specify the parameters and data type while defining the function. Such functions are called user-defined functions.read more “VarType.”

VBA-VARTYPE.png

You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA VARTYPE Function (wallstreetmojo.com)

Examples

You can download this VBA VARTYPE Excel Template here – VBA VARTYPE Excel Template

Example #1

In VBA, while writing the code, we usually declare variables and assign a data type to them. For example, look at the below VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more.

Code:

Sub VarType_Example()

    Dim MyVar As String

    MyVar = "Hello"

End Sub

Example 1.1

In the above example, we have declared the variable as “String.” For this string, we have assigned the value “Hello.”

It is a straightforward case, but it is also possible to declare the variables without assigning the variables to them, so in such cases, the VarType function helps us.

Code:

Sub VarType_Example()

    Dim MyVar

    MyVar = "Hello"

End Sub

Example 1.2

In the above code, we have not assigned any data type but straight away assigned the value as “Hello,” so by using the VarType function, we can find the variable’s data type.

Open MSGBOX in VBAVBA MsgBox function is an output function which displays the generalized message provided by the developer. This statement has no arguments and the personalized messages in this function are written under the double quotes while for the values the variable reference is provided.read more coding in the above code.

Example 1 (Open MsgBox)

Then, open the VarType function.

Example 1 (Open Vartype)

Now, enter the variable name as the argument of the VarType function.

Code:

Sub VarType_Example()

    Dim MyVar

    MyVar = "Hello"

    MsgBox VarType(MyVar)

End Sub

Example 1.3

Now, run the code and see what we get in the message box.

VBA VarType Output 1

We got the result as 8 because VBA has certain codes for each kind of variable data type, so below is the detailed list for you.

Value Constant Description
0 vbEmpty Variable is not yet initialized
1 vbNull Not valid data is assigned
2 vbInteger The variable value is “Integer” data type
3 vbLong The variable value is “Long” data type
4 vbSingle The variable value is “Single” data type
5 vbDouble The variable value is “Double” data type
6 vbCurrency The variable value is “Currency” data type
7 vbDate The variable value is “Date” data type
8 vbString The variable value is “String” data type
9 vbObject The variable value is “Object” data type
10 vbError The variable value is Error Value
11 vbBoolean The variable value is “Boolean” data type
12 vbVariant The variable value is “Variant” data type (used only with arrays of variants)
13 vbDataObject The variable value is the Data Access Object
14 vbDecimal The variable value is “Decimal” data type
17 vbByte The variable value is “Byte” data type
20 vbLongLong The variable value is “LONG LONG” data type (valid on 64-bit platforms only)
36 vbUserDefinedType The variable value is “User Defined” data type
8192 vbArray The variable value is Array.

Now, our code has retuned the variable data type as 8, i.e., the variable name “MyVar” contains the “String” data type.

Example #2

Now, look at the below code.

Code:

Sub VarType_Example2()

    Dim MyVar

    Set MyVar = ThisWorkbook

    MsgBox VarType(MyVar)

End Sub

Example 2.1

Let’s run this code and see what the result is.

VBA VarType Output 2

The result is 9, i.e., the variable contained the “Object” data type. Yes, this is correct because, for the variable “MyVar,” we have set the workbook reference to “This Workbook.”

Example #3

Now, look at the below code.

Code:

Sub VarType_Example3()

    Dim MyVar

    MyVar = 32500

    MsgBox VarType(MyVar)

End Sub

VBA VARTYPE - Example 3

It will return the result as 2.

VBA VarType Output 3

The number 32500 assigned to the variable is an “Integer” value.

Now, we will change the value to 40000 and see the result.

Code:

Sub VarType_Example4()

    Dim MyVar

    MyVar = 40000

    MsgBox VarType(MyVar)

End Sub

VBA VARTYPE - Example 3.1

It will give the result as 3.

VBA VarType Output 4

The Integer value ends at 32767, so anything above that will treat as a VBA LONG data typeLong is a data type in VBA that is used to store numeric values. We know that integers also store numeric values, but Long differs from integers in that the range for data storage is much larger in the case of long data type.read more.

Now, we will enclose the number in double quotes.

Code:

Sub VarType_Example5()

    Dim MyVar

    MyVar = "40000"

    MsgBox VarType(MyVar)

End Sub

VBA VARTYPE - Example 3.2

Run the code and see the result.

VarType Output 5

We got the result as 8, i.e., String data type.

Anything supplied within the parenthesis will treat as a String variable.

Things to Remember

  • The VarType stands for “Variable Type.”
  • The unique numbers represent Data types, so refer to the table to understand which number represents which variable data type.

Recommended Articles

This article has been a guide to VBA VarType. Here, we learn how to find the variable data type or the kind of data assigned to the variable using the Excel VBA VarType function with examples. You can learn more from the following VBA articles: –

  • Variable Declaration in VBA
  • Public Variables in VBA
  • Global Variables in VBA
  • Return Statement in VBA

На чтение 7 мин Просмотров 1.6к. Опубликовано 07.11.2020

Содержание

  1. Способ 1. Использовать функцию TypeName для определения типа данных
  2. Способ 2. Проверка на возможность преобразования строки к нужному типу.
  3. TypeName и TypeOf. Рекомендуется TypeName and TypeOf…Is
  4. Запуск примера To run the example

В языке VBA есть универсальные типы данных, т.е. способные хранить как число, так и строку, дату и любой другой тип информации. Например, ячейка в таблице может содержать что угодно и изначально, программа не знает какой в ней тип данных хранится. Кроме того, в самой программе может использоваться тип данных Variant, который так же может содержать любое значение любого типа.

Чтобы определить какой тип данных в ячейке или в переменной типа Variant, можно воспользоваться несколькими способами.

Способ 1. Использовать функцию TypeName для определения типа данных

Эта функция возвращает строку с названием типа данных на английском. В качестве аргумента принимает переменную, значение ячейки.
Обратите внимание: Функция определяет только стандартные типы данных и не может определить пользовательский тип (определенный с помощью Type).

Возможные возвращаемые функцией значения:

Byte Число типа Byte
Integer Целое число
Long Длинное целое число
Single Число одиночной точности с плавающей запятой
Double Число двойной точности с плавающей запятой
Currency Валюта
Decimal Число с плавающей запятой
Date Дата
String Строка
Boolean Логическое
Error Ошибка
Empty Не проинициализировано (т.е. переменная не была объявлена)
Null Неверные данные (в переменной нет корректных данных)
Object Объект (класс)
Unknown Тип данных не известен
Nothing Объект, никуда не ссылающийся

Приведу несколько примеров по использованию TypeName.

Пример 1. Определение типа переменной.

Обратите внимание: если вы используете результат TypeName в условии, т.е. проверяете, соответствует ли тип данных определенному, например, Integer, то регистр символов возвращаемого типа имеет значение. Т.е. нужно писать Integer с заглавной буквы, либо использовать приведение всех символов к одному регистру.

Пример 2. Использование TypeName в условии.

Пример 3. Определение типа данных в ячейке.

Если функции была передана переменная массив, она вернет тип данных в массиве с добавлением скобок.

Пример 4. Определение типа массива.

Способ 2. Проверка на возможность преобразования строки к нужному типу.

Бывает ситуация, когда значение, например, число или дата, содержится в строке. В этом случае TypeName вернет String, а не Integer или Date. Чтобы узнать, что содержится в строке, можно воспользоваться одной из функций IsNumeric, IsDate, IsObject, IsArray, IsNull, IsError.

IsNumeric Проверяет может ли выражение быть преобразовано в число
IsDate Проверяет может ли выражение быть преобразовано в дату
IsObject Проверяет, является ли переменная объектом
IsArray Проверяет, является ли переменная массивом
IsNull Проверка на пустое значение
IsError Проверка выражения на ошибку

Пример 4. Определение может ли переменная быть преобразована в число.

К сожалению, как видим из примера, нет возможности проверить, содержится ли в строке число с плавающей точкой.

Пример 5. Определение содержит ли переменная дату (может быть преобразована в дату).

Проверка, содержится ли число или дата в ячейке листа делается аналогично, как и с переменными.

Помимо этих способов можно конечно еще придумать и другие, например, проверку строки с данными регулярным выражением или пройти по каждому символу в цикле и проверить цифра это или нет и тому подобное. Но на мой взгляд, описанных мной способов вполне достаточно для решения повседневных задач.

Универсальные объектные переменные (т. е. переменные, объявляемые как Object ) могут содержать объекты из любого класса. Generic object variables (that is, variables you declare as Object ) can hold objects from any class. При использовании переменных типа Object может потребоваться выполнить различные действия в зависимости от класса объекта. Например, некоторые объекты могут не поддерживать определенное свойство или метод. When using variables of type Object , you may need to take different actions based on the class of the object; for example, some objects might not support a particular property or method. Visual Basic предоставляет два способа определения типа объекта, хранящегося в объектной переменной: функция TypeName и оператор TypeOf. Is . Visual Basic provides two means of determining which type of object is stored in an object variable: the TypeName function and the TypeOf. Is operator.

TypeName и TypeOf. Рекомендуется TypeName and TypeOf…Is

Функция TypeName возвращает строку и является лучшим выбором, если необходимо сохранить или отобразить имя класса объекта, как показано в следующем фрагменте кода: The TypeName function returns a string and is the best choice when you need to store or display the class name of an object, as shown in the following code fragment:

Оператор TypeOf. Is является лучшим выбором для тестирования типа объекта, так как он гораздо быстрее, чем эквивалентное сравнение строк с помощью TypeName . The TypeOf. Is operator is the best choice for testing an object’s type, because it is much faster than an equivalent string comparison using TypeName . В следующем фрагменте кода используется TypeOf. Is в инструкции If. Then. Else : The following code fragment uses TypeOf. Is within an If. Then. Else statement:

В этом случае следует соблюдать осторожность. A word of caution is due here. Оператор TypeOf. Is возвращает True , если объект относится к конкретному типу или является производным от определенного типа. The TypeOf. Is operator returns True if an object is of a specific type, or is derived from a specific type. Почти все, что выполняется с Visual Basic, включает объекты, которые включают в себя некоторые элементы, которые обычно не считаются объектами, например строками и целыми числами. Almost everything you do with Visual Basic involves objects, which include some elements not normally thought of as objects, such as strings and integers. Эти объекты являются производными от Objectи наследуют от них методы. These objects are derived from and inherit methods from Object. При передаче Integer и вычислении с Object оператор TypeOf. Is возвращает True . When passed an Integer and evaluated with Object , the TypeOf. Is operator returns True . В следующем примере сообщается, что параметр InParam является как Object , так и Integer : The following example reports that the parameter InParam is both an Object and an Integer :

В следующем примере используются как TypeOf. Is , так и TypeName для определения типа объекта, переданного в него в аргументе Ctrl . The following example uses both TypeOf. Is and TypeName to determine the type of object passed to it in the Ctrl argument. TestObject процедура вызывает ShowType с тремя различными видами элементов управления. The TestObject procedure calls ShowType with three different kinds of controls.

Запуск примера To run the example

Создайте новый проект приложения Windows и добавьте в форму элемент управления Button, CheckBox и элемент управления RadioButton. Create a new Windows Application project and add a Button control, a CheckBox control, and a RadioButton control to the form.

С помощью кнопки в форме вызовите процедуру TestObject . From the button on your form, call the TestObject procedure.

Добавьте в форму следующий код: Add the following code to your form:

Как и любой язык программирования, VBA содержит широкий круг типов переменных для написания программ.

Переменные разделяют на глобальные и локальные, их описывают выражением Dim имя as тип.

В языке выделяют следующие типы: Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String, Object, Variant.

Byte целые числа от 0 до 255;
Boolean логические значения — True/False;
Integer целые числа от -32768 до 32767;
Long целые числа от -2147483648 до 2147483647;
Currency вещественные числа (целая часть до 15 цифр, дробная до 4 цифр) от -922337203685477,5808 до 922337203685477,5807;
Single вещественные числа одинарной точности от -3.4e38 до +3.4e38
Double вещественные числа одинарной точности от -3.4e38 до +3.4e38
Date дата и время от 1 Января 100 до 31 Декабря 9999;
String текст
Object объект или ссылка на объект;
Variant объект или ссылка на объект;

Если переменная указана вне функции или модуля и объявлена в разделе Declarations, то она является глобальной или Public и доступ к ней возможен из других модулей.

Переменная типа Private доступна только в пределах одного модуля, но из любой функции данного модуля.

Переменная находящаяся внутри функции или модуля доступна локально и обращение к ней возможно только из функции или модуля.

Так же существует тип локальной переменной Static, она позволяет сохранять прежнее значение, объявленное при инициализации.

Приветствую всех.
Нужно определить тип данных в ячейке.

If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Date) Then ‘ (1) если тип Date
Range(Cells(stroka_aktiv, N).Address).Value = Empty
End If
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = String) Then ‘ (2) если тип String
Range(Cells(stroka_aktiv, N).Address).Value = «»
End If
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Empty) Then ‘ (3) если тип Empty
Range(Cells(stroka_aktiv, N).Address).Value = Empty
End If
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Double) Then ‘ (4) если тип Double
Range(Cells(stroka_aktiv, N).Address).Value = 0
End If

Сравнения (1) (2) (4) не получаются.
Если сравнение (4) переделать:
Range(«B22».Value = TypeName(Range(«A22».Value) ‘ (*)
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Range(«B22».Value) Then ‘ если тип Double
Range(Cells(stroka_aktiv, N).Address).Value = 0
End If
(*) — это в отдельную ячейку «A22» записать , например, 152, то в ячейке «B22» сохранится Double и сравнение (4) начинает работать. Но мне так не нравится.
Что нужно писать вместо Date , String, Double , чтобы сравнения работали?

Проверка переменных и выражений с помощью встроенных функций VBA Excel: IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject.

Проверка переменных и выражений

Встроенные функции VBA Excel — IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject — проверяют значения переменных и выражений на соответствие определенному типу данных или специальному значению.

Синтаксис функций для проверки переменных и выражений:

Expression — выражение, переменная или необязательный аргумент для IsMissing.

Все функции VBA Excel для проверки переменных и выражений являются логическими и возвращают значение типа Boolean — True или False.

Функция IsArray

Описание функции

Функция IsArray возвращает значение типа Boolean, указывающее, является ли переменная массивом:

  • True — переменная является массивом;
  • False — переменная не является массивом.

Пример с IsArray

Sub Primer1()

Dim arr1(), arr2(1 To 10), arr3

    Debug.Print IsArray(arr1)  ‘Результат: True

    Debug.Print IsArray(arr2)  ‘Результат: True

    Debug.Print IsArray(arr3)  ‘Результат: False

arr3 = Array(1, 2, 3, 4, 5)

    Debug.Print IsArray(arr3)  ‘Результат: True

End Sub

Как показывает пример, функция IsArray возвращает True и в том случае, если переменная только объявлена как массив, но еще не содержит значений.

Функция IsDate

Описание функции

Функция IsDate возвращает логическое значение, указывающее, содержит ли переменная значение, которое можно интерпретировать как дату:

  • True — переменная содержит дату, выражение возвращает дату, переменная объявлена с типом As Date;
  • False — в иных случаях.

Пример с IsDate

Sub Primer2()

Dim d1 As String, d2 As Date

    Debug.Print IsDate(d1)  ‘Результат: False

    Debug.Print IsDate(d2)  ‘Результат: True

d1 = «14.01.2023»

    Debug.Print IsDate(d1)  ‘Результат: True

    Debug.Print IsDate(Now)  ‘Результат: True

End Sub

Функция IsEmpty

Описание функции

Функция IsEmpty возвращает значение типа Boolean, указывающее, содержит ли переменная общего типа (As Variant) значение Empty:

  • True — переменная содержит значение Empty;
  • False — переменной присвоено значение, отличное от Empty.

Пример с IsEmpty

Sub Primer3()

Dim s As String, v As Variant

    Debug.Print IsEmpty(s)  ‘Результат: False

    Debug.Print IsEmpty(v)  ‘Результат: True

v = 125

    Debug.Print IsEmpty(v)  ‘Результат: False

Range(«A1»).Clear

    Debug.Print IsEmpty(Range(«A1»))  ‘Результат: True

Range(«A1») = 123

    Debug.Print IsEmpty(Range(«A1»))  ‘Результат: False

End Sub

Как видно из примера, функцию IsEmpty можно использовать для проверки ячеек на содержание значения Empty (пустая ячейка общего формата).

Функция IsError

Описание функции

Функция IsError возвращает логическое значение, указывающее, является ли аргумент функции значением ошибки, определенной пользователем:

  • True — аргумент функции является значением ошибки, определенной пользователем;
  • False — в иных случаях.

Пользователь может определить одну или несколько ошибок для своей процедуры или функции с рекомендациями действий по ее (их) исправлению. Возвращается номер ошибки с помощью функции CVErr.

Пример с IsError

Допустим, пользователь определил, что ошибка №25 означает несоответствие аргумента функции Vkuba числовому формату:

Function Vkuba(x)

    If IsNumeric(x) Then

        Vkuba = x ^ 3

    Else

        Vkuba = CVErr(25)

    End If

End Function

Sub Primer4()

    Debug.Print Vkuba(5)  ‘Результат: 125

    Debug.Print IsError(Vkuba(5))  ‘Результат: False

    Debug.Print Vkuba(«пять»)  ‘Результат: Error 25

    Debug.Print IsError(Vkuba(«пять»))  ‘Результат: True

End Sub

Функция IsMissing

Описание функции

Функция IsMissing возвращает значение типа Boolean, указывающее, был ли необязательный аргумент типа данных Variant передан процедуре:

  • True — если в процедуру не было передано значение для необязательного аргумента;
  • False — значение для необязательного аргумента было передано в процедуру.

Пример с IsMissing

Function Scepka(x, Optional y)

    If Not IsMissing(y) Then

        Scepka = x & y

    Else

        Scepka = x & » (а необязательный аргумент не подставлен)»

    End If

End Function

Sub Primer5()

    Debug.Print Scepka(«Тропинка», » в лесу»)  ‘Результат: Тропинка в лесу

    Debug.Print Scepka(«Тропинка»)  ‘Результат: Тропинка (а необязательный аргумент не подставлен)

End Sub

Функция IsNull

Описание функции

Функция IsNull возвращает логическое значение, указывающее, является ли Null значением переменной или выражения:

  • True — значением переменной или выражения является Null;
  • False — в иных случаях.

Пример с IsNull

Функция IsNull особенно необходима из-за того, что любое условие с выражением, в которое входит ключевое слово Null, возвращает значение False:

Sub Primer6()

Dim Var

Var = Null

    If Var = Null Then Debug.Print Var  ‘Результат: «»

    If Var <> Null Then Debug.Print Var  ‘Результат: «»

    If IsNull(Var) Then Debug.Print Var  ‘Результат: Null

End Sub

Функция IsNumeric

Описание функции

Функция IsNumeric возвращает значение типа Boolean, указывающее, можно ли значение выражения или переменной рассматривать как число:

  • True — если аргумент функции может рассматриваться как число;
  • False — в иных случаях.

Пример с IsNumeric

Sub Primer7()

Debug.Print IsNumeric(«3,14»)  ‘Результат: True

Debug.Print IsNumeric(«четыре»)  ‘Результат: False

End Sub

Функция IsObject

Описание функции

Функция IsObject возвращает логическое значение, указывающее, является ли переменная объектной:

  • True — переменная содержит ссылку на объект или значение Nothing;
  • False — в иных случаях.

Функция IsObject актуальна для переменных типа Variant, которые могут содержать как ссылки на объекты, так и значения других типов данных.

Пример с IsObject

Sub Primer8()

Dim myObj As Object, myVar As Variant

    Debug.Print IsObject(myObj)  ‘Результат: True

    Debug.Print IsObject(myVar)  ‘Результат: False

Set myVar = ActiveSheet

    Debug.Print IsObject(myVar)  ‘Результат: True

End Sub


Понравилась статья? Поделить с друзьями:
  • Vba excel описание программы
  • Vba excel открыть книгу по пути
  • Vba excel операции с датой
  • Vba excel открыть книгу невидимой
  • Vba excel операции с датами