Тип данных vba word

Аннотация: Лекция посвящена описанию основных конструкций и принципов VBA. Она является вводной лекцией по общим приемам программирования на VBA.

5.1. Синтаксические описания

Синтаксис языка программирования — это правила написания программ.

Рассмотрим пример — возьмем из справочной системы описание команды. Мы пока не будем вдаваться в смысл ключевых слов (перед нами — описание оператора цикла), приведенных здесь, остановимся на основных частях описания.

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]

В синтаксических описаниях VBA жирным шрифтом выделены ключевые слова языка, курсивом даны названия переменных и других элементов языка. В квадратных скобках располагаются необязательные элементы – то есть такие элементы, без описания которых можно обойтись. Например, в приведенном описании блоки [statements] будут содержать в себе «полезную нагрузку» циклаоператоры, которые будут выполняться многократно, однако цикл будет работать и без них.

Элементы, которые допускают альтернативный выбор, разделяются знаком » | «. Например, такая запись: » one | two » обозначает «one или two».

Ниже мы будем останавливаться на существенно важных особенностях тех или иных конструкций. Если вам понадобятся подробности — вы сможете найти их в справке к VBA.

Теперь рассмотрим понятие переменной — важнейшее понятие в любом языке программирования.

5.2. Переменные

05-01-Переменная.docm — пример к п. 5.2.

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

У переменной есть несколько важнейших характеристик. Первая — имя переменной. Используя имя, мы можем обращаться к переменной в программе. Вторая характеристика — это тип данных, которые могут храниться в переменной. Тип определяет характер данных, которые мы можем хранить в переменной. Например, это могут быть числовые данные (возраст пользователя) и строковые данные (имя пользователя).

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

  • Имя переменной должно состоять из букв и цифр, причем оно должно начинаться с буквы.
  • Имя не может быть длиннее 255 символов
  • Имя не должно содержать специальных знаков ( #, $, % и т.д.) и пробелов.
  • В качестве имен нельзя использовать зарезервированные слова VBA (например – if, dim, for и т.д.).

При именовании переменных старайтесь пользоваться латинскими буквами. Иначе возможны проблемы при работе ваших программ на различных версиях Office.

Например, такие имена переменных выглядят вполне корректно: str_Name, num_Age, str_Name1, num_Item2 и т.д. Обратите внимание на префиксы, которыми мы снабдили имена переменных. Это признак особого стиля именования переменных. Он очень напоминает стиль именования элементов управления, который мы рассматривали выше.

Напишем программу на VBA, иллюстрирующую простой пример работы с переменными. Сначала она должна задать пользователю вопрос: «Как вас зовут», а потом — вывести его имя в окне сообщения.

Для этого добавим в документ Microsoft Word кнопку с именем cmd_Variables и надписью «Имя пользователя«. Зададим ее обработчику Click следующий код (листинг 5.1.):

txt_Name = InputBox("Введите ваше имя")
 MsgBox (txt_Name)


Листинг
5.1.
Код обработчика Click кнопки cmd_Variables

Первая строка этого кода содержит новую для вас функцию InputBox. Она используется для вывода окна с сообщением и полем для ввода данных. Строка, которая передается функции в качестве параметра — это и есть сообщение, которое будет выведено в окне.

На рис. 5.1. вы можете видеть это окно.

Окно ввода данных

Рис.
5.1.
Окно ввода данных

Выражение txt_Name = означает, что мы присваиваем переменной с именем txt_Name то, что пользователь введет в окне ввода данных, как бы говорим программе: «Сохрани в переменной txt_Name то, что пользователь введет в окне». Когда пользователь сообщает свое имя и нажимает OK —введенная им строка записывается в переменную txt_Name. Введем на приглашение программы имя «Александр», вы можете ввести любое другое имя.

Теперь мы можем выполнять много разных действий с этой переменной. В частности — использовать в качестве параметра, передаваемого функции MsgBox. В данном примере мы так и поступили — вызвали MsgBox, указав вместо выводимого текста имя переменной. В результате в окне сообщения вывелось имя пользователя, введенное на предыдущем этапе (рис. 5.2.).

Имя пользователя в окне сообщения

Рис.
5.2.
Имя пользователя в окне сообщения

Обратите внимание на то, что мы не заключили имя переменной в кавычки. Иначе в окне сообщения вывелось бы лишь имя переменной ( txt_Name ), но не хранимый в ней текст.

5.3. Типы данных в VBA

Тип данных определяет важнейшие свойства переменной. А именно, следующее:

  • что может храниться в переменной (текст, число, некоторые другие виды данных);
  • размер памяти, необходимый для хранения переменной (измеряется в байтах);
  • операции, которые можно производить с переменной (например, невозможно извлечь квадратный корень из слова «Привет» так как эта операция не определена для строковых данных);

Вы уже можете предположить как минимум два типа данных, которые могут хранить переменные — строковые и числовые. На самом деле список типов данных VBA гораздо обширнее.

В табл. 5.1. вы найдете информацию об основных типах данных VBA.

Таблица
5.1.
Типы данных в VBA

Тип данных Размер, байт Описание Диапазон значений
Variant 16 (числа)
22+длина строки (строки)
Может хранить данные любых типов
Integer 2 Целое число от -32768
до 32767
Long 4 Длинное целое от -2147483648
до 2147483647
Single 4 Число с плавающей запятой Для отрицательных:
от -3.402823E38
до -1.401298E-45
Для положительных:
от 1.401298E-45
до 3.402823E38
Double 8 Число с плавающей запятой двойной точности, для отрицательных значений и для положительных Для отрицательных
от -1.79769313486231E308
до -4.94065645841247E-324
Для положительных:
от 4.94065645841247E-324
до 1.79769313486232E308
Byte 1 Байт от 0 до 255
Currency 8 Денежный формат от -922,337,203,685,477.5808
до 922,337,203,685,477.5807
Decimal 14 Масштабируемое целое 29-значное число с 28 знаками справа от запятой
Boolean 2 Логический True или False
Date 8 Дата и время от 1 января 1900 г. до 31 декабря 9999 г.
Object 4 Ссылка на объект Различные виды объектов
String Зависит от длины строки Строка

Как видите, в VBA существует немало типов данных. Наверное, сейчас вам кажется, что их слишком много. Может показаться, что нет ничего удобнее типа данных Variant. Однако надо учесть, что за универсальность типа Variant приходится платить производительностью и системными ресурсами. Чем больше места требуется для хранения переменной — тем ниже скорость работы с ней.

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

Как правило, для работы с дробными числами и различных вычислений используют тип данных Double. Для переменных, которые используются в циклах, счетчиках — Integer или Long. В работе со строками используют String. Объектные переменные имеют самые разные типы, которые определяются объектами, для обращения к которым они создаются. В небольших проектах вполне оправдано использование переменных типа Variant – это не слишком замедлит работу. Однако, если размер проекта растет или вы нуждаетесь в ускорении ресурсоемких вычислений – подходите к выбору типов данных ответственно.

Если при объявлении переменной не указывать ее тип — он автоматически устанавливается в Variant. Объявляя переменную без указания типа, вы пользуетесь преимуществами работы с объявленными переменными, и, в то же время, можете гибко использовать переменную для хранения различных типов данных (например – чисел с плавающей запятой и целых чисел). Такой подход — объявление переменных без указания типа — допустим при создании небольших проектов, а так же — на начальном этапе работы над достаточно масштабными программами, когда вы не знаете точно, какой тип данных понадобится для той или иной переменной. В листингах, которые вы найдете ниже, мы явно задавали тип переменных лишь тогда, когда это либо требовалось по ходу выполнения примера (например – типы объектных переменных ), либо, когда это нужно для лучшего понимания материала (числовой тип для возраста, строковой — для имени и т.д.) В основном же мы использовали переменные типа Variant.

Выше мы уже говорили о венгерской нотации как о способе именования объектов. Те же правила действуют и для переменных. Префикс имени обычно говорит о типе переменной. В табл. 5.2. приведены некоторые префиксы.

Таблица
5.2.
Префиксы и типы переменных

Префикс имени переменной Пояснения
s, str Строковая переменная
n, num
Числовая переменная (существует множество числовых типов данных, название каждого из которых может быть использовано в качестве префикса, например, int для Integer, dbl для Double и т.д.)
b, bool Логическая переменная
O, obj Объектная переменная

Для работы с переменными можно использовать два подхода. При первом мы выбираем имя переменной и используем ее в программе без каких-либо подготовительных действий. Именно так мы работали с переменной в примере к п. 5.2. Такая переменная приобретет тип Variant. Второй подход предусматривает объявление переменных перед использованием.

В данной статье мы познакомимся с типами данных VBA языка. При объявлении переменной можно и не указывать VBA типы данных, в таком случае ей автоматически будет присвоен тип Variant, в этом случае размер данных будет зависеть от хранимых в переменной значений, например, строковые данные, целые, вещественные числа и так далее.

Хотя язык VBA и VBScript происходят из одного семейства, для VBA мы можем явно указывать тип данных с помощью ключевого слова As, а в VBScript такой возможности нет. Так как поддерживаемые VBA типы данных идентичны как для Visual Basic for Applications так и для VBScript, то я решил не повторятся тут с их описанием, просто ознакомьтесь со статьей типы данных VBScript.

VBA позволяет представлять числовые значения в экспоненциальной форме, в некоторых случаях это экономит код. После символа E указывается степень десятичных знаков, например:

  • -5.43E2 – тут мы записали число -543 в экспоненциальной форме.
  • 3.4Е6 – число 3 400 000
  • 5Е9 – число 5 000 000 000

Хорошо, теперь давайте рассмотрим на примерах применение типов данных.

Содержание

  1. VBA тип данных Date
  2. Целые типы Byte, Integer и Long
  3. Числа с плавающей точкой – Single и Double
  4. Числа с фиксированной точкой – Currency
  5. Текстовые строки – String
  6. Логический тип Boolean
  7. Variant
  8. Object

VBA тип данных Date

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

  • #30/12/1986# — указываем заданную дату
  • #12/30/1996 12:24:00 PM# — указываем дату и время

Или же просто прописать целое число, в этом случаем произойдет автоматическое определение даты. Редактор Visual Basic автоматически может изменять или дополнять вводимые данные, так, если мы указали время (часы и минуты) без секунд, то, произойдет автоматическое добавление секунд.

Создайте новую форму с тремя метками (объект Label) и одной кнопкой (объект CommandButton), в редакторе кода пропишите:

Sub Get_Date()
    Dim dDate_1 As Date, dDate_2 As Date, dDate_3 As Date
    dDate_1 = 12345
    dDate_2 = #12/30/1986 12:22:00 PM#
    dDate_3 = #10/5/1999#
    Label1.Caption = dDate_1
    Label2.Caption = dDate_2
    Label3.Caption = dDate_3
End Sub
 
Private Sub CommandButton1_Click()
    Call Get_Date
End Sub

Целые типы Byte, Integer и Long

Тут все предельно просто, Byte хранит целые значения от 0 до 255, Integer  — от -32 768 до 32 767, а Long  — от -2 147 483 648 до 2 147 483 647. Обратите внимание, что типы являются вложенными, то есть, Long охватывает Byte и Integer, Integer охватывает тип Long. Дело не только в диапазоне допустимых значений, но и в памяти, теоретически, данные типа Byte будут занимать 1 байт, Integer – 2 байта и Long – 4 байта памяти, но все зависит от платформы. Да и зацикливаться на этом не стоит, так как объем ОЗУ сейчас огромный, а мега программу вы и так не создадите, используя макросы.

Числа с плавающей точкой – Single и Double

Числа с плавающей точкой являются вещественными и могут содержать любое количество цифр до или после запятой.

Числа с фиксированной точкой – Currency

Это тоже вещественные значения, но, число цифр после запятой является фиксированным и составляет 4 знака.

Текстовые строки – String

В языке VBA текстовые строки заключаются в двойные кавычки. Обратите внимание, что тут нет разделения на “строка” – набор символов или “символ” – один символ. Для строк характерна возможность конкатенации (объединения) с помощью оператора &.

Логический тип Boolean

Тип данных VBA Boolean позволяет хранить логическое значение true или false. Стоит помнить, что при попытке отобразить логическое значение, хранящееся в переменной, оно автоматически преобразуется в строку и мы увидим true или false.

Variant

Variant – это универсальный тип, он автоматически назначается переменной, для которой не указан подтип данных, Variant как бы включает в себя все остальные подтипы. Фактически, Variant автоматически приводит присваиваемое значение к нужному типу, но использует больше всего памяти.

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

Object

Данный vba тип данных служит для создания ссылки на объект. С ним придется часто сталкиваться при работе с объектной моделью Microsoft Office, так как там содержится множество классов.

Помимо встроенных VBA типов данных, можно формировать и собственные, для этого служит ключевое слово Type, данный вопрос мы рассмотрим подробно в отдельной статье.

Что бы присвоить переменной 16-ричное значение, то перед ним нужно прописать &H, например, &HFF00. Как правило, 16-ричные значения используются, когда нужно задать код цвета.

In this blog post we explain data types in VBA and provide detailed definitions for when they should be used.

Firstly a word on VBA variable names; a variable may be named anything you wish as long as it conforms to VBA’s naming rules. Variable names must start with a letter, may contain number characters or underscores ( _ ) but that’s it! Punctuation marks are not allowed. Also unlike other languages VBA is case-insensitive! This is important to understand and is demonstrated below.

Finally, there are some keywords that cannot be used as variable names.

Sub Declarations()
   Dim a as String	  	  ‘ a valid variable name
   Dim b_ as String		  ‘ a valid variable name
   Dim _b as String		  ‘ variable names must start with a letter
   Dim 2b as String		  ‘ variable names must start with a letter
   Dim c1 as String		  ‘ a valid variable name
   Dim d12 as String		  ‘ a valid variable name
   Dim e_e1 as String	  ‘ a valid variable name
   Dim f! as String		  ‘ punctuation not allowed in variable names
   Dim g as String		  ‘ a valid variable name
   Dim G as String		  ‘ an invalid variable name.  VBA is case-
				  ‘   insensitive, variables also cannot be
				  ‘   declared more than once in a code block
  Dim aVariableName as String	  ‘ a valid variable name
  Dim a_Variable_Name as String	  ‘ a valid variable name
  Dim HELLOWORLD as String	  ‘ a valid variable name

  Dim dim as String		  ‘ variable name is invalid as Dim is a keyword
End Sub

Boolean – (Yes/No)

A variable of type Boolean is the simplest possible data type available in VBA. It can only be set to 0 or -1. These are often thought of as states and correspond to Access’s Yes/No fields. In VBA you can assign a Boolean variable to True (-1) or False (0) or the numbers indicated in the brackets.
Notice we used capitalised words for True and False, which is because they are VBA keywords and you cannot name a variable a Keyword.

Sub trueOrFalse()
   Dim foo As Boolean
   Dim bar As Boolean
   foo = True      ' foo holds the value True
   bar = False     ' bar holds the value False
End Sub

Integer

At the beginning of the post we said that we have to tell the computer what type of data to expect before we can work on it. An Integer is another number data type, but its value must be between -32,768 and 32,767, and it must be a whole number, that is to say, it mustn’t contain decimal places. If you or your users try to save a decimal value (eg 2.5) to an integer variable, VBA will round the decimal value up or down to fit into an Integer data-type.

Sub IntegerDataType()
   Dim foo As Integer
   Dim bar As Integer
   Dim oof As Integer
   foo = 12345     ' foo is assigned the value 12,345
   bar = 2.5       ' bar is assigned the value 3 as VBA rounds it up
   bar = 2.4       ' bar is assigned the value 3 as VBA rounds it down
   foo = 32768     ' causes an overflow error as 32,768 is too big
End Sub

Long

Long is another number type and works just like Integer except it can hold a much larger range; Any number between -2,147,483,648 and +2,147,483,647.

Sub LongDataType()
   Dim foo As Long
   foo = 74345     ' foo is a variable assigned the value 74,345
End Sub

Single

Single is the smaller of the two “floating point” data types. Singles can represent any decimal number between -3.4028235E+38 through 1.401298E-45 for negative numbers and 1.401298E-45 through 3.4028235E+38 for positive numbers. Put more simply, the single data type has a decimal point in it.

Sub DoubleDataType()
   Dim foo As Single
   Dim bar As Single
   foo = 1.1       ' foo keeps the .1 decimal part
   bar = -20.2     ' bar also keep the decimal part
   foo = foo * bar ' foo equals -22.2200008392334
End Sub

Double

This is a “floating point” number as well and range in value from -1.79769313486231570E+308 through -4.94065645841246544E-324 for negative values and from 4.94065645841246544E-324 through 1.79769313486231570E+308 for positive values.

Sub DoubleDataType()
   Dim foo As Double
   Dim bar As Double
   foo = 1.1       ' foo keeps the .1 decimal part
   bar = -20.2     ' bar also keep the decimal part
   foo = foo * bar ' foo equals -22.2200008392334
End Sub

Currency

This data-type is a third “floating-point data” type in disguise. It’s a Single which has been engineered to represent behaviours typical of currencies. In particular it rounds off numbers to four decimal places. See the Figure below:

Sub CurrencyDataType()
   Dim bar As Single
   Dim foo As Currency
   bar = 1.1234567     ' this is the Single
   foo = bar           ' add the Single to the Currency
   MsgBox bar     ' bar contains 1.1234567
   MsgBox foo     ' foo contains 1.1235. Notice that the 4th digit
                   '   has been rounded up to 5
End Sub

Date

The Date data type is used to perform operations that involve dates AND times. In VBA there are several functions that operate on date variables which perform date and time calculations. It is important to know that date and time operations can be quite complicated and to help ease your burden you can use VBA’s DateTime object which encapsulates a lot of the difficulty of working with dates and time and can make them a little less of a headache to deal with. Date data types are the most complicated of all the data types to work with.

Here are a few operations we can do with date data types.

Sub DateDataTypes()
   Dim bar As Date
   Dim foo As Date
   bar = #11/15/1978#              ' bar set to this date but has no time
   foo = #12/10/2012 11:37:00 PM#  ' foo is set to this date and time
   bar = #1:00:09 AM#              ' bar is 1 hour and 9 seconds
   foo = #9:00:00 PM#              ' foo is 9PM
   foo = foo + bar                 ' foo is now 22:00:09
   MsgBox foo
   foo = foo - bar                 ' foo is back to 9PM
   MsgBox foo
End Sub

String

A String is any set of characters that are surrounded by double-quotation marks. For example “dog” is a String that contains three characters. Strings are very important to us as they can contain human language, and in fact contain almost any data we want, even numbers and punctuation marks. Strings are very versatile and you will use them extensively in your code. Often when you ask your users for information you will first store their input in a String before actually using the data provided; in this way Strings are often thought of as a safe data type.

Below are some Figures of Strings in action.

Sub StringDataTypes()
   Dim bar As String
   Dim foo As String
   Dim foobar As String

   bar = "Hello"                 ' bar now contains "Hello"
   foo = "world!"                ' foo contains "world!"
   foobar = bar & " " & foo      ' foobar now contains "Hello world!"
   ' notice that foobar has a +" "+ this means a SPACE character has been
   ' inserted into the String, without it foobar would contain "Helloworld!"

   foobar = bar + " " + foo      ' This Figure also shows that you can add
   ' Strings together (but you cannot subtract!)

   foo = "H" & "E" & "L" & "P"   ' foo now contains "HELP"
   bar = foo & foo               ' bar now contains "HELPHELP"
End Sub

Confusion

As stated above, when you collect input from a user you will usually collect it into a String. But be careful not to confuse String with Number data types. For example:

Sub Confusion()
   Dim bar, foo As String
   Dim foobar As String
 
   foo = "12.5"        ' user inputs "12.5"
   bar = "6.3"         ' user inputs "6.3"
   foobar = foo * bar  ' we multiple 12.5 and 6.3
   Debug.Print foobar  ' print the result - 0
                      ' It's ZERO!
  ' Remember foo and bar are STRING data types, 
  'so multiplying foo and bar as above is like 
  'saying "aaa" * "bbb" = 11  ? It doesn't make sense. 
  'But we collect data in a String because a String 
  'can accept all user input, even if they 12  put a 
  'punctuation mark in there.

  foo = "12.5.2"      ' user made a mistake
  bar = "ifvgj212m"   ' cat walks across the keyboard

  ' When collecting user input the data held in a String 
  'can be tested for accuracy and correctness before we 
  'load it into an Integer. If the user has not entered 
  'data correctly we ignore or display a useful message 
  'like "Error"...
End Sub

Variant

A variant is a special type which can contain any of the data types mentioned above (along with some others).

When a value is assigned to the variant data type the variable mutates into the type of the data assigned to it, and in some cases VBA can “detect” the type of data being passed and automatically assign a “correct” data type. This is useful for collecting data from users and also for writing procedures and functions for which you want to be able to call with a variable of any type.

Sub VariantDataType()
   Dim bar As Variant
   Dim foo As Variant
   Dim foobar As Variant
   bar = 1             ' bar is now an Integer
   foo = "oi!"         ' foo is now a String
   foobar = bar + 1.1  ' foobar is now a Double with the value of 2.1
   MsgBox TypeName(bar)    ' Integer
   MsgBox TypeName(foo)    ' String
  MsgBox TypeName(foobar) ' Double
End Sub

Related Posts

Variables Variables

Visual Basic for Applications может управлять различными типами данных. Как и в большинстве других систем программирования Visual Basic разделяет обрабатываемые данные на числа, текст, даты и другие типы. Ниже будут приведены описания основных типов данных VBA, а также будет показан объем памяти занимаемый каждым типом и диапазоны значений, которые эти типы могут сохранять.

Типы данных для хранения целых чисел

Для хранения целых чисел используется один из трех численных типов данных.

Byte

Байт — это единица измерения компьютерной и дисковой памяти, состоящая из восьми битов или двоичных разрядов. Обычно один алфавитный символ требует для хранения одного байта памяти.

Тип данных Byte используется для хранения положительных чисел от 0 до 255 и занимает 1 байт памяти.

Integer

Integer — это целое число, число, не имеющее дробной части. Целые числа не содержат десятичного знака, даже если дробная часть равна нулю.

Тип данных Integer используется для хранения чисел от -32768 до 32767 и требует 2-х байтов памяти.

Long

Long — длинное целое число.

Тип данных Long используется для хранения чисел от -2147483648 до 2147483647 и требует 4-х байтов памяти.

Типы данных для хранения дробных чисел

Для хранения чисел, имеющих дробную часть используются типы данных с плавающей и с фиксированной точкой. Числа с плавающей точкой получили свое название вследствие того, что десятичная точка «плавает» в зависимости от того, насколько большое или маленькое значение сохраняется в памяти. VBA имеет два различных типа данных с плавающей точкой и один с фиксированной.

Single

Числа, сохраняемые с использованием типа Single, называют числами одинарной точности.

Тип данных Single используется для хранения отрицательных чисел от -3,402823*1038 до -1,401298*10-45, положительных чисел от 1,401298*10-45 до 3,402823*1038 и требует 4-х байтов памяти.

Double

Числа, сохраняемые с использованием типа Double, называют числами двойной точности.

Тип данных Double используется для хранения отрицательных числел от -1,79769313486232*10308 до -4,94065645841247*10-324, положительных от 4,94065645841247*10-324 до 1,79769313486232*10308 и требует 8-и байтов памяти.

Currency

Тип данных Currency используется для хранения чисел от -922337203685477,5808 до 922337203685477,5807 и требует 8-и байтов памяти.

Этот тип данных используется для хранения чисел с фиксированной точкой, десятичная точка всегда находится в одном и том же положении, справа от десятичной точки всегда имеется только четыре цифры. Числа типа Currency не имеют ошибок округления, используются при «денежных» вычислениях.

Типы данных для хранения дат, текстовых строк и логических значений

Date

Тип данных Date использует 8 байтов памяти для хранения дат и времени. 

String

Любые текстовые данные, содержащие буквы алфавита, цифры, знаки пунктуации и различные символы называются строками. Существуют строки переменной и фиксированной длины.

Тип данных String (переменной длины) используется для хранения текста с количеством символов от 0 до 2 миллиардов и требует памяти в размере 10 байт+один байт на один символ.

Тип данных String (фиксированной длины) используется для хранения текста с количеством от 1 до 654000 символов и требует памяти в размере один байт на один символ.

Boolean

Логические значения True и False называют булевыми значениями. Булевы значения получают как результат операций сравнения.

Тип данных Boolean может иметь одно из двух значений True или False и требует 2-х байтов памяти.

Типы данных Variant и Object

Variant

Тип данных Variant — это особый тип данных, который используется для всех переменных с необъявленным явно типом. Не смотря на то, что типы Variant удобны, они требуют большого объема памяти, а математические операции и операции сравнения над данными этого типа выполняются медленнее.

Тип данных Variant может хранить любой тип данных, за исключением типа Object. Диапазон для данных этого типа зависит от фактически сохраняемых данных и требует памяти в размере 16 байт + 1 байт на символ.

Object

Тип данных Object используется для доступа к любому объекту, распознаваемому VBA. Сохраняет адрес объекта и требует 4-х байтов памяти.

Переменные, типы данных и константы

Главное предназначение VB А — обработка данных. Некоторые данные сохраняются в объек­тах, например, диапазонах рабочих листов. Другие данные хранятся в созданных вами переменных.

Переменная представляет собой именованное место хранения данных в памяти компью­тера.

Переменные могут содержать данные разных типов — от простых логических, или бу­левых, значений ( True или False ) до больших значений с двойной точностью (см. следующий раздел).

Значение присваивается переменной с помощью оператора равенства (подробнее об этом — далее в главе).

VBA поддерживает несколько огра­ничений в именовании переменных:

  • Можно использовать в названиях символы букв, числа и некоторые знаки препи­нания, но первой в имени переменной всегда должна вводиться буква.
  • VBA не различает регистры.
  • Нельзя использовать в именах пробелы или точки.
  • Чтобы сделать имена переменных удобочитаемыми, используют смешанный регистр (например, InterestKate , а не interestkate ) или вводят символ подчеркивания ( lnterest _ Rate ).
  • Специальные символы объявления типов (#, $, %, & или !) не применяются в имени переменной.
  • Названия переменных ограничены длиной 254 символов.
  • Не допускается применять в качестве названий переменных или процедур зарезервированные слова, т.е. такие слова, которые используются VBA .

Определение типов данных

  • Тип данных указывает, в каком виде данные хранятся в памяти: как целые значения, дей­ствительные числа, текст н т.п.
  • VBA может автоматически типизировать данные, что приводит к медленному выполнению операций и не эффективному использованию памяти.
  • При явном объявлении типа данных всех используемых пе­ременных VBA может выполнять дополнительную проверку ошибок на эта­пе компиляции.
  • При явном объявлении типа данных программа работает быстрее и занимает меньше места в оперативной памяти.
  • Чтобы обеспечить обязательное объявление всех используемых переменных, необходимо включить строку
    Option . Explicit
    в качестве первой инструкции в модуле VBA .

В таблице перечислены поддерживаемые в VBA типы данных

Тип данных

Резервируется байт

Наименьшее значение

Наибольшее значение

Byte

1

0

255

Boolean

2

False (Ложь)

True (Истина)

Integer

2

-32768

32767

Long

4

-2147483648

2147483647

Single

4

-3.402823 Е38

-1.401298 Е-45

1.401298Е-45

3.402823Е38

Double

8

-1,79769313486232Е308

-4,94065645341247Е-324

4,94065645841247Е-324

1,79769313486232Е308

Currency

8

-922337203685477,5808

922337203685477,5807

Decimal

14

+/-79228162514264337593543950335 без десятичных знаков

+/-7,9228162514264337593543950335 с 28-ью знаками после запятой

Date

8

1 января 100 года

31 декабря 9999 года

Object

4

Любая ссылка на объект

string (пере­менной длины)

10 байт + длина строки

0

приблизительно 2 млрд

string (фикси­рованной длины)

Длина строки

1

65400

Variant (числа)

16

Любое числовое значение в рамках диапазона типа данных Double

Variant (сим­волы)

22 байта + длина строки

0

приблизительно 2 млрд

Пользовательский

Зависит от типа

Зависит от элемента

  • Чтобы в тексте программы распознать тип данных переменной или константы можно использовать стандартную приставку (префикс) в нижнем регистре в названии переменной в соответствии с приведенной таблицей.

Префикс

Тип данных

b

Boolean

i

Integer

l

Long

s

Single

d

Double

с

Currency

dt

Date / Time

str

String

obj

Object

v

Variant

u

Пользовательский

Объявление переменных

  • Если для переменной, используемой в процедуре VBA , не объявлен тип данных, то, по умолчанию, будет задан тип данных Variant .
  • Данные, которые хранятся в Variant , изменяют свой тип, в зависимости от того, ка­кие операции над ними выполняются.
    Пример 1 .

Sub VariantDemo ()

MyVar = «123»

MyVar = MyVar / 2

MyVar = «Ответ: » & MyVar

MsgBox MyVar

End Sub

  • При обработке типа дан­ных Variant могут возникнуть проблемы.
    Пример 2 . Какое сообщение выдаст следующая процедура?

Sub VariantDemo 2()

MyVar = «123»

MyVar = MyVar + MyVar

MyVar = «Ответ: » & MyVar

MsgBox MyVar

End Sub

Функция определения типа данных

Для определения типа данных переменной используется функция VBA TypeName .

Пример 1.

Sub VariantDemo2()

MyVar = «123»

MsgBox TypeName(MyVar)

MyVar = MyVar / 2

MsgBox TypeName(MyVar)

MyVar = «Ответ: » & MyVar

MsgBox TypeName(MyVar)

MsgBox MyVar

End Sub

Тестирование явного объявления типов данных

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

Sub TimeTestU

Dim x As Integer, у As Integer

Dim A As Integer, В As Integer, С As Integer

Dim i As Integer, j As Integer

Dim StartTime As Date, EndTime As Date

‘ Сохранение времени начала вычислений

StartTime = Timer

‘ Выполнение вычислений

х = 0

у = 0

For i = 1 То 5000

For j = 1 То 1000

А = х + у + i

В = у — х — i

С = х — у — i

Next j

Next i

‘ Получение времени окончания вычислений

EndTime = Timer

‘ Отображение общего времени

MsgBox Format(EndTime – StartTime)

End Sub

Задача.

Сравните время выполнения этой программы и время выполнения этой же программы при превращении операторов Dim в комментарии.

Область действия переменных

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

Область действия

Способ объявления переменной

Отдельная процедура

В процедуру включается оператор Dim или static

Отдельный модуль

Перед первой процедурой в модуле вводится оператор Dim или private

Все модули

Перед первой процедурой в модуле вводится оператор Public

Локальные переменные

  • Локальная переменная — это переменная, объявленная в процедуре.
  • Локальные перемен­ные могут использоваться только в процедуре, в которой они объявлены.
  • После выполнения процедуры переменная становится невостребованной, поэтому Excel освобождает соответст­вующую область памяти.
  • Если требуется сохранить значение переменной, объявите ее как static .
  • Чтобы объявить локальную переменную — вставьте оператор Dim между операторами Sub и End Sub .
  • Dim – сокращение от Dimension (Размерность). В старых версиях BASIC этот оператор использовался исключительно для объявления размерности массива.
  • Другой способ указания типа данных для переменной : язык VBA позволяет присоединить символ к на­званию, чтобы указать ее тип данных.
    Пример, можно объявить пере­менную MyVar как целое число, добавив к ее названию символ %: Dim MyVar %
  • Символы объявления типов данных представлены для большинства типов данных VBA (отсутствующие в таблице типы данных не имеют собственного символа объявления типа).

Тип данных

Символ объявления типа

Integer

%

Long

&

Single

!

Double

#

Currency

@

String

S

•  Локальные переменные позволяют экономно использовать память, так как VBA освобождает память, которую они используют, после окончания выполнения процедуры.

Переменные уровня модуля

Иногда необходимо, чтобы переменная была доступна во всех процедурах модуля. В та­ком случае объявите переменную перед первой процедурой модуля (за пределами процедур или функций).

В приведенном ниже примере оператор Dim — первая инструкция в модуле. Обе проце­дуры MySub и YourSub имеют доступ к переменной CurrentValue .

Dim CurrentValue As Integer

Sub MySub{)

‘ -[Здесь вводится текст процедуры] —

End SUb

Sub YourSub()

‘-[Здесь вводится текст процедуры] —

End Sub

Значение переменной уровня модуля не изменяется при окончании выполнения процедуры.

Переменные Public

Чтобы сделать переменную доступной во всех процедурах всех модулей VBA в проекте, необ­ходимо объявить переменную на уровне модуля с помощью ключевого слова Public перед первой процедурой модуля, например, так:

Public CurrentRate as Long

Код объявления пере­менных Public должен вводиться в стандартном модуле VB А, а не в коде модуля листа или формы.

Переменные Static

Переменные Static — особый случай. Они объявляются на уровне процедуры и сохра­няют свое значение после окончания процедуры.

Sub MySub()

Static Counter As Integer

‘-[Здесь вводится текст процедуры] –

End Sub

Работа с константами

Константа – имено­ванное значение или строка, которая не меняется при выполнении программы.

Объявление констант

Константы объявляются с помощью оператора Const .

Примеры :

Const NumQuarters as Integer = 4

Const Rate = .0725, Period = 12

Const ModName as String = «Budget Macros»

Public Const AppName as String = «Budget Application»

Во втором примере тип данных не объявлен. Следовательно, указанные две константы имеют тип Variant .

Константы имеют область действия как и переменные.

Область действия

Способ объявления константы

Отдельная процедура

В процедуре или функции

Отдельный модуль

Перед первой процедурой в модуле

Все модули

Перед первой процедурой в модуле с ключевым словом Public

При попытке изменить значение константы в процедуре VBA вы получите ошибку.

Использование предопределенных констант

В Excel и VBA существует целый ряд предопределенных констант, которые можно ис­пользовать без объявления.

В сле­дующей процедуре для изменения ориентации страницы активного листа на альбомную при­менена встроенная константа ( xlLandscape ):

Sub SetToLandscape()

ActiveSheet.PageSetup.Orientation = xlLandscape

End Sub

Константу xlLandscape можно обнаружить путем записи макроса.

Описание констан­т можно найти в справочной системе.

Если включен параметр AutoList Members , то можно получить помощь непосредственно при вводе кода. Во многих случаях VBA автоматически перечисляет все константы, присваиваемые опреде­ленному свойству.

Управление строками

В VBA представлено два типа строк.

  • Строки фиксированной длины объявляются с определенным количеством символов. Максимальная длина строки составляет 65535 символов.
  • Строки переменной длины теоретически могут вмещать до 2 млрд. символов.

Память для строки отводится из расчета 1 байт на каждый символ и для хранения заголовка строки.

В следующем примере переменная MyString объявляется как строка с максимальной длиной 50 символов. YourString тоже объявлена как строка, но она имеет переменную

длину:

Dim MyString As String * 50

Dim YourString As String

Работа с датами

Переменная, определенная как Date , занимает 8 байт памяти и может содержать даты в диапазоне от 1 января 100 года до 31 декабря 9999 года.

В VBA дата и время определяются как значения, заключенные между знаками # (см. далее).

Ошибка дат в Excel

В Excel используется неправильное предположение, что 1900 год – високосный.

В ячейке с формулой =ДАТА(1900;2;29) появится значение 29 февраля 1900 года.

Функция DateSerial (190 Q ,2,29) в VBA возвратит 1 марта 1900 года (!).

Операторы присвоения

Оператор присвоения — это инструкция VBA , выполняющая математическое вычисление и присваивающая результат переменной или объекту.

Выражение определяется как комбинация ключевых слов, операторов, переменных и констант. Эта комбинация возвращает в результате строку, число или объект. Выражение может осуществлять вычисление, обрабатывать символы или тестировать данные.

В VBA оператором присвоения выступает знак равенства (=).

Примеры использования операторов присвоения (выражения приводятся справа от знака равенства):

х = 1

X = X + 1

х = ( у * 2) ! ( г * 2) FileOpen = True FileOpen = Not FileOpen Range С «The Year»).Value = 2001

Выражения могут быть очень сложными. Чтобы сделать длинные выражения более удобными для восприятия, используйте символ продолжения строки (пробел с подчеркиванием).

Зачастую в выражениях применяются функции. Это могут быть встроенные функции VBA , функции рабочих листов Excel или специальные функции, разработанные в VBA .

Булевы операторы VBA

Таблица. Булевы операторы VBA

Оператор

Действие

not

Логическое отрицание выражения

And

Логическая конъюнкция двух выражений

Or

Логическая дизъюнкция двух выражений

xoR

Логическое отрицание двух выражений

Eqv

Логическая эквивалентность двух выражений

imp

Логическая импликация двух выражений

Примеры.

  1. Свойство DisplayGridLines принимает значение True или False . Следовательно, применение оператора Not изменяет True на False , a False — на True :
    ActiveWindow . DisplayGridLines = _
    Not ActiveWindow . DisplayGridLines
  2. Представленное далее выражение осуществляет логическую операцию And . Оператор MsgBox отображает True , только если Лисг1 — активный лист и активная ячейка находит­ся в строке 1. Если одно или оба этих условия неверны, оператор MsgBox отображает False :
    MsgBox ActiveSheet . Name = «Лист1» And ActiveCell . Row = 1
  3. Следующее выражение осуществляет логическую операцию Or . Оператор MsgBox отображает True , если активен лист Лист1 или Лист2:
    MsgBox ActiveSheet.Name = » Лист 1″ Or ActiveSheet.Name = » Лист 2″

Массивы

Массив — это именованная группа проиндексированных элементов одного типа. На конкретный элемент массива ссылаются, используя имя массива и индекс. Например, массив MonthNames из 12-ти строк (каждая переменная соответствует названию месяца). Можно обратиться к первому элементу массива как
MonthNames(0), ко второму — как MonthNames(1) и т.д., до MonthNames(11).

Одномерные массивы

Массив объявляется с помощью операторов Dim или Public . Можно определить количество элементов в массиве: введите первый индексный номер, ключевое слово То и последний индексный номер — вся конструкция будет заключена в скобки. Например, так можно объявить массив, содержащий ровно 100 целых чисел:
Dim MyArray(1 To 100) As Integer

Многомерные массивы

Массивы VBA могут иметь до 60-ти измерений. Показанный ниже оператор объявляет двухмерный 100-элементный массив целых чисел:
Dim MyArray(1 To 10, 1 То 10) As Integer

Так присваивается значение элементу предыдущего массива
МуАггау(1, 4) = 125

Трехмерный массив
Dim MyArray(1 To 5, 1 То 6, 1 То 7) As Integer
состоит из 420 чисел типа Double.

Динамические массивы

Динамический массив не имеет предопределенного количества элементов. Динамический массив объявляется с незаполненными значениями в скобках:

Dim MyArray () As Integer

Перед использованием динамического массива необходимо обратиться к оператору
ReDim , указывающему VBA , сколько элементов находится в массиве
или
ReDim Preserve , если решено сохранить текущую длину массива.

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

Переменные объектов

Переменная объекта — это переменная, представляющая целый объект, например, диапазон или рабочий лист. Переменные объектов имеют особое значение по двум причинам:

¦ значительно упрощают программу;

¦ ускоряют выполнение программы.

Переменные объектов, как и обычные переменные, объявляются с помощью оператора Dim или Public . Например, в следующем операторе переменная inputArea объявляется как объект Range : Public InputArea As Range

Чтобы узнать, каким образом переменные объектов упрощают программу, проанализируем процедуру, написанную без их использования:

Sub KoObjVar()

Worksheets(» Лист 1″).Range(«Al»).Value =124

Worksheets(» Лист 1″).Range(«Al»).Font.Bold = True

Worksheets(» Лист 1″).Range(«Al»).Font.Italic = True

End Sub

Эта процедура вводит значение в ячейку А1 листа Лист1 активной рабочей книги, а затем делает шрифт содержимого ячейки полужирным и курсивным. В примере введено довольно много кода для такой простой операции. Чтобы пощадить себя, сведите процедуру к исполь­зованию объектной переменной:

Sub ObjVar()

Dim MyCell As Range

Sec MyCell = Worksheets(» Лист 1″).Range(«Al»)

MyCell.Value =124

MyCell.Font.Bold = True

MyCell.Font.Italic = True

End Sub

После объявления переменной MyCell как объекта Range оператор Set присваивает ей сам объект. В результате в следующих операторах используется упрощенная ссылка MyCell вместо длинной Worksheets (» Лист1″) . Range(» Al «).

Пользовательские типы данных

VBA позволяет создавать специальные, или пользовательские, типы данных . Определенный пользователем тип данных может облегчить управление некоторыми типами данных. Например, если приложение обрабатывает сведения о клиенте, то можно создать пользовательский тип данных с названием
Customerlnfo:

Type Customerlnfo
Company As String * 25
Contact As String * 15
RegionCode As Integer
Sales As Long
End Type

Пользовательские типы данных определяются вверху модуля перед началом

Если пользовательский тип данных уже создан для объявления переменной этого типа примените оператор Dim . Обычно пользовательский тип данных определяется для массивов:

Dim Customers ( 1 To 100) As Customerlnfo

Все 100 элементов этого массива состоят из четырех компонентов (как указано в пользовательском типе данных— Customerlnfo ). Вы можете сослаться на конкретный компонент элемента :

Customers(5).Company = «Acme Tools»

Customers(1).Contact = «Tim Robertson»

Customers(1).RegionCode = 3

Customers(1).Sales = 150677

Чтобы скопировать информацию из Customers (1) в Customers ( 2 ), используется следующая инструкция:

Customers (2) = Customers (1)

Предыдущий пример эквивалентен приведенному далее блоку инструкций:

Customers(2).Company = Customers(1).Company

Customers(2).Contact = Customers(1).Contact

Customers(2}.RegionCode = Customers(1).RegionCode

Customers(2).Sales = Customers(1).Sales

Понравилась статья? Поделить с друзьями:
  • Тип графического редактора в word
  • Тип графики в word 2010
  • Тип word в паскале что это
  • Тип word application не определен
  • Тип shape в excel