|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Переменные, типы данных и константы
Время создания: 16.03.2019 23:43
Текстовые метки: переменные, VBA
Раздел: Разные закладки - VBA
Запись: xintrea/mytetra_db_adgaver_new/master/base/1484220920l3q8n1srtz/text.html на raw.githubusercontent.com
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Главное предназначение VB А — обработка данных. Некоторые данные сохраняются в объектах, например, диапазонах рабочих листов. Другие данные хранятся в созданных вами переменных. Переменная представляет собой именованное место хранения данных в памяти компьютера. Переменные могут содержать данные разных типов — от простых логических, или булевых, значений ( True или False ) до больших значений с двойной точностью (см. следующий раздел). Значение присваивается переменной с помощью оператора равенства (подробнее об этом — далее в главе). VBA поддерживает несколько ограничений в именовании переменных:
Определение типов данных
В таблице перечислены поддерживаемые в VBA типы данных
Объявление переменных
Sub VariantDemo () MyVar = "123" MyVar = MyVar / 2 MyVar = "Ответ: " & MyVar MsgBox MyVar End Sub
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 в комментарии.
Область действия переменных Область действия переменной определяет, в каких модулях и процедурах она может использоваться. Существуют следующие типы областей действия переменных.
Локальные переменные
• Локальные переменные позволяют экономно использовать память, так как 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 . Константы имеют область действия как и переменные.
При попытке изменить значение константы в процедуре VBA вы получите ошибку. Использование предопределенных констант В Excel и VBA существует целый ряд предопределенных констант, которые можно использовать без объявления. В следующей процедуре для изменения ориентации страницы активного листа на альбомную применена встроенная константа ( xlLandscape ): Sub SetToLandscape() ActiveSheet.PageSetup.Orientation = xlLandscape End Sub Константу xlLandscape можно обнаружить путем записи макроса. Описание констант можно найти в справочной системе. Если включен параметр AutoList Members , то можно получить помощь непосредственно при вводе кода. Во многих случаях VBA автоматически перечисляет все константы, присваиваемые определенному свойству. Управление строками В VBA представлено два типа строк.
Память для строки отводится из расчета 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
Примеры.
Массивы Массив — это именованная группа проиндексированных элементов одного типа. На конкретный элемент массива ссылаются, используя имя массива и индекс. Например, массив MonthNames из 12-ти строк (каждая переменная соответствует названию месяца). Можно обратиться к первому элементу массива как Одномерные массивы Массив объявляется с помощью операторов Dim или Public . Можно определить количество элементов в массиве: введите первый индексный номер, ключевое слово То и последний индексный номер — вся конструкция будет заключена в скобки. Например, так можно объявить массив, содержащий ровно 100 целых чисел: Многомерные массивы Массивы VBA могут иметь до 60-ти измерений. Показанный ниже оператор объявляет двухмерный 100-элементный массив целых чисел: Так присваивается значение элементу предыдущего массива Трехмерный массив Динамические массивы Динамический массив не имеет предопределенного количества элементов. Динамический массив объявляется с незаполненными значениями в скобках: Dim MyArray () As Integer Перед использованием динамического массива необходимо обратиться к оператору Оператор 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 позволяет создавать специальные, или пользовательские, типы данных . Определенный пользователем тип данных может облегчить управление некоторыми типами данных. Например, если приложение обрабатывает сведения о клиенте, то можно создать пользовательский тип данных с названием Type Customerlnfo Пользовательские типы данных определяются вверху модуля перед началом Если пользовательский тип данных уже создан для объявления переменной этого типа примените оператор 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
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Так же в этом разделе:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|