Главная страница
Навигация по странице:

  • Базовые типы переменных Visual Basic

  • Типы с плавающей точкой

  • Объектные типы Object Рисунок или ссылка на любой другой объект 4 байта Ссылка на объект Типы Variant

  • 2.4. Строковые переменные

  • Тип массива Действие инструкции Erase

  • Пример Dim Товар(1 To 3) As String * 15 L=UBound (Товар)

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

  • Программирование VBA. Федеральное агентство по образованию государственное образовательное учреждение высшего профессионального образования


    Скачать 2.93 Mb.
    НазваниеФедеральное агентство по образованию государственное образовательное учреждение высшего профессионального образования
    АнкорПрограммирование VBA.pdf
    Дата24.04.2017
    Размер2.93 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование VBA.pdf
    ТипУчебное пособие
    #4339
    страница2 из 13
    1   2   3   4   5   6   7   8   9   ...   13
    2.2. Переменные
    Переменные предназначены для хранения данных в оперативной памяти. В программе перед использованием переменные нужно объяв-
    лять. При объявлении переменной надо задаётся её имя и тип. Тип ука- зывает способ представления переменной. В переменных можно хранить

    11
    практически любые типы данных: числа, строк текста, экземпляры объ- ектов, элементы управления и т.д. В VBA различают две группы типов данных: основные, называемые иногда базовыми или встроенными, и ти- пы данных, определяемые пользователем.
    Базовые типы переменных Visual Basic
    Тип
    Хранимая
    информация
    Занимае-
    мая
    память
    Интервалы значений
    Целочисленные типы
    Byte
    Целые числа
    1 байт от 0 до 255
    Boolean
    Логические зна- чения
    2 байта
    True (Истина) или False
    (ложно)
    Integer
    Целые числа
    2 байта от -32768 до 32767
    Long Integer Длинные целые числа
    4 байта
    +/-2.1E9
    Типы с плавающей точкой
    Single
    Вещественные числа одинарной точности с пла- вающей точкой
    4 байта от
    -3.402823Е38 до
    -
    1.401298Е-45 для отрица- тельных чисел и от
    1.401298Е-45 до
    3.402823Е38 для положи- тельных
    Double
    Вещественные числа двойной точности с пла- вающей точкой
    8 байт от -1.7976313486232Е308 до
    -4.94065645841247Е-
    324 для отрицательных чисел и от
    4.94065645841247Е-324 до
    1.7976313486232Е308 для положительных
    Строковые типы
    String (стро- ка фиксиро- ванной дли- ны)
    Текстовая информация
    (строка)
    1 байт на каждый символ
    От 1 до 65400
    String (стро- ка перемен- ной длины длины)
    Текстовая информация
    (строка)
    10 байт + 1 байт на каждый символ
    От 0 до двух миллиардов символов
    Объектные типы
    Object
    Рисунок или ссылка на любой другой объект
    4 байта
    Ссылка на объект
    Типы Variant

    12
    Variant
    Значения любого из перечислен- ных типов данных
    16 байт для чисел,
    22 байта +
    1 байт на каждый символ для строк
    Любое числовое или стро- ковое значение
    Прочие типы
    Currency
    Числа, имеющие до 15 цифр до десятичной точки и 4 цифры после нее
    (денежные единицы)
    8 байт от
    -922337203685477.5808 до 922337203685477.5808
    Date
    Информация о дате и времени
    8 байт от 1 января 100 г. до
    31-го декабря 9999 г.
    Decimal
    Десятичное чис- ло
    14 байт
    Целое – 29 знаков
    Вещественное – 27 знаков после запятой
    Объявление переменных может быть явным или неявным.
    Явное объявление
    Для явного определения переменных существуют разные способы. Как правило, программисты предпочитают использовать следующий синтак- сис:
    [Static|Public|Private]
    Dim
    <ИмяПеременной>
    [As
    <тип>]
    [,<ИмяПеременной>[As <тип>]]…
    Здесь:
     Dim – ключевое слово, которое означает, что объявляется пере- менная и резервируется область памяти для ее хранения;
     ИмяПеременной – имя переменной (идентификатор);
     As (Как) – ключевое слово, которое определяет тип данных для переменной;
     Тип – тип данных для объявляемой переменной;
     Private (Частный), Public (Общий) – ключевые слова, определяю- щие область видимости переменной;
     Static (Статический)- ключевое слово, которое определяет, сохра- няет ли переменная свое значение при завершении процедуры и выходе из неё.
    Примеры инструкций объявления переменных
    Dim Товар As String*15
    Dim Цена As Currency

    13
    Dim Количество As Byte, Вес As Single
    При вводе кода программы с клавиатуры среда программирования оказывает помощь пользователю – после набора ключевого слова As и пробела раскрывается список, в котором наряду с другими типами объек- тов указаны базовые типы переменных:
    Тип переменной можно установить, щелкнув дважды по имени типа в этом списке.
    Неявное объявление
    В этом способе определения переменных никакие инструкции для объяв- ления переменной вообще не используются. Когда транслятор VBA пер- вый раз встречает в коде программы необъявленную переменную, то он назначает ей тип Variant, и переменная может принимать значение любого типа. Следовательно, в программе VBA, в принципе, можно вообще не ис- пользовать инструкцию Dim. Тем не менее использование типа Variant ре- комендуется использовать только в следующих случаях:
     для ускорения процесса отладки программы;
     пользователь не уверен, какой тип данных обрабатывается инст- рукцией в конкретной ситуации.
    Явное объявление переменных позволяет:
     увеличить скорость решения задачи;
    оптимизировать распределение памяти для переменных;
     документировать переменные и избежать ошибок при использова- нии одной переменной в принципиально различных ситуациях.
    Для того чтобы избежать неприятностей в случае ошибочной запи- си имени переменной, необходимо в общей области программного модуля помещать оператор Option Explicit. В этом случае Visual Basic будет рас- ценивать любую неявно объявленную переменную как ошибочную.
    2.3. Константы
    Константа по определению является постоянной величиной и по- этому не меняет своего значения при выполнении программы. Константы в
    VBA подразделяются на константы, определяемые пользователем, и встроенные константы. Встроенная константа должна объявляться; при этом используется оператор Const, аналогичный оператору Dim:
    Const <ИмяКонстанты> [As <ТипДанных>] = <Выражение>

    14
    где <Выражение> – это любое значение или формула, возвращающая значение, которое должно использоваться в качестве константы.
    Пример
    Const ПИ As Single = 3,14
    Встроенные константы используются обычно при работе с объ- ектами приложения. Эти константы не требуют предварительного объяв- ления. Имена встроенных констант начинаются с префикса, который ука- зывает, к объекту какого приложения Microsoft Office они относятся. На- пример, встроенные константы объектов Excel имеют префикс xl, встроен- ные константы языка VBA имеют префикс vb и т.д. Например, встроенные константы vbYes и vbNo используются в функции MsgBox, предназначен- ной для вывода данных на экран.
    Операторы объявления переменных и констант можно размещать в любом месте программного кода, но обязательно до первого оператора, в котором переменная или пользовательская константа применяется. Хо- роший стиль программирования предполагает, что объявление перемен- ных и констант осуществляется в начале процедуры.
    2.4. Строковые переменные
    Различают строки переменной и фиксированной длины. Строки пе-
    ременной длины могут содержать до двух миллиардов символов; их раз- мер заранее не определяется. Когда такой переменной присваивается значение, то размер переменной изменяется так, чтобы он соответствовал длине присвоенного строкового значения.
    Строка фиксированной длины – это строка постоянного размера, указанного при объявлении переменной. Если такой строке присваивается значение более длинное, то лишние символы отбрасываются. Если значе- ние, которое присваивается, короче, то остающееся место заполняется пробелами. Строковые переменные фиксированной длины должны объяв- ляться явно.
    Синтаксис объявления строковой переменной следующий:
    Dim VarName As String [
    *
    ДлинаСтроки] где ДлинаСтроки – целочисленная переменная или константа, содержа- щая число, которое указывает длину строковой переменной.
    Например:
    Dim strMyName As String* 20
    Объявляется строковая переменная фиксированной длины в 20 символов
    Dim intLen As Integer
    Intlen = 10
    Dim MyName As String * Intlen
    Объявляется строковая переменная длиной в 10 символов.

    15
    2.5. Массивы
    представляет собой структуру, все элементы которой имеют одинако- вый тип. Массивы могут быть одномерными и многомерными. Так, для отображения отдельного столбца или отдельной строки таблицы, содер- жащей данные одинакового типа, может быть использован одномерный массив, для отображения таблицы – двумерный, а для отображения сово- купности таблиц – трёхмерный массив. Количество размерностей массива может достигать 60.
    В VBA массив объявляется следующим образом:
    [Public | Private] Dim ИмяМассива([Индексы]) [As ТипДанных] где
    ИмяМассива – идентификатор, определяющий имя массива;
    Индекс – значение номера элемента в размерности массива, зада- ваемого одним из двух способов:
    1. указанием номера последнего элемента в каждой размерно- сти массива;
    2. указанием номеров первого и последнего элемента в каждой размерности массива.
    Примечание
    Номера элементов (индексы) должны быть указаны целым числом.
    При использовании первого метода первому элементу по умолча-
    нию присваивается номер “ноль”. Например, объявление одномерного массива Товар из трёх элементов, каждый из которых состоит не более чем из 15 символов, по умолчанию выглядит следующим образом:
    Dim Товар(2) As String*15
    Для обращения к элементам массива необходимо поместить в круглых скобках за идентификатором массива целочисленное выражение, например, Товар(0), Товар(К*2) – для одномерного массива и Продажи(I,L),
    Продажи(3,4) ) – для двумерного массива; величины I, K, L должны быть целыми.
    В приведённой ниже процедуре ОбъявлениеМассива1
    Sub ОбъявлениеМассива1()
    Dim Товар(2) As String*15
    Товар(0) = "Стул мягкий"
    MsgBox Товар(0)
    End Sub
     выражения Товар(0), Товар(1), Товар(2) являются элементами массива;
     инструкция Товар(0) = "Стул мягкий" присваивает первому элемен- ту массива Товар значение текстовой константы "Стул мягкий";
     функция MsgBox Товар(0) выводит значение этого элемента на эк- ран:

    16
    Примечание
    Инструкция присваивания и функция MsgBox будут подробно рас- смотрены ниже.
    Для изменения начала нумерации индексов массива можно посту- пить одним из следующих способов.
    1. Использовать инструкцию Option Base 1. При этом инструк- ция Option Base 1 должна находиться в самом начале модуля
    VBA, перед первой процедурой модуля, например,
    Option Base 1
    Sub ОбъявлениеМассива2()
    '
    Dim Товар(3) As String
    *
    15
    Товар(1) = "Стул мягкий"
    MsgBox Товар(1)
    '
    End Sub
    По умолчанию инструкция Option Base имеет значение 0 (ноль).
    2. Выполнить явное указание номера первого элемента в каждой размерности массива, например,
    Sub ОбъявлениеМассива3()
    '
    Dim Товар(1 To 3) As String * 15
    Товар(1) = "Стул мягкий"
    MsgBox Товар(1)
    '
    End Sub
    При объявлении многомерного массива в поле индекса указывает- ся несколько индексов, в соответствии с размерностью массива: номер по- следней строки, номер последнего столбца и номер последней таблицы – для трёхмерного массива. Например, двумерный массив из пяти строк и десяти столбцов объявляется без использования инструкции
    Option Base 1 одним из следующих способов:
    Dim Продажи(4,9) As String или
    Dim Продажи(0 To 4,0 To 9) As String

    17
    Примечания
    1. Наличие инструкции Option Base 1 не влияет на индексацию эле- ментов массива, если в его объявлении используется конструкция
    <нижняя граница> To <верхняя граница>
    Массив Продажи можно объявить так:
    Dim Продажи(1 To 5, 1 To 10) As String
    2. Элементы массива Продажи имеют тип строковая переменная
    неопределённой длины.
    Выше рассмотрено объявление массивов, связанных с обработкой только статических данных, т.е.таких, память под которые выделяется во время компиляции и сохраняется в течение всей работы программы.
    В VBA существует другой способ выделения памяти под массивы, ко- торый называется динамическим, в котором память под массивы отводит- ся и может быть перераспределена во время выполнения программы. Та- кие массивы называются динамическими.
    Использование динамических величин предоставляет возможность подключать память динамически, что позволяет:
     увеличить объем обрабатываемых данных;
     если потребность в каких-то данных отпала до окончания про- граммы, то занятую ими память можно освободить для другой ин- формации;
     определять динамически изменяющееся количество реально су- ществующих элементов массива.
    Динамический массив объявляется следующим образом:
    [Public | Private] Dim ИмяМассива() [As ТипДанных] т.е. размерность динамического массива в его объявлении не указывает-
    ся.
    Пример
    Dim Товар() As String
    *
    15
    Перед использованием динамического массива необходимо переопреде- лить его размеры. Это выполняется при помощи инструкции ReDim, ис- пользуемой на уровне процедуры:
    ReDim [Preserve] ИмяМассива(Индексы) [As ТипДанных]
    Параметр Preserve используется для сохранения данных в сущест- вующем массиве при изменении размерности. В противном случае все старые значения элементов массива будут удалены. Однако если новый размер массива меньше, чем количество помещенных в него элементов, часть данных будет потеряна.
    Примеры
    ReDim Товар(1 To 3) As String * 15
    ReDim Preserve Товар(1 To 10) As String * 15

    18
    При использовании параметра Preserve можно изменить размер только последней размерности, а количество размерностей изменить нельзя.
    Массивы типа Variant можно создавать и заполнять одновременно при помощи встроенной функции Array(<СписокЗначений>), например:
    Dim Товар As Variant
    Товар = Array(“Стул”, “Стол”, “Шкаф”)
    Освободить память, занимаемую элементами динамического массива, и повторно инициализировать элементы массива фиксированной дли- ны можно инструкцией Erase:
    Erase СписокМассивов
    Здесь СписокМассивов – один массив или список разделенных запя- тыми массивов. Инициализация элементов массива фиксированной длины осуществляется следующим образом:
    Тип массива
    Действие инструкции Erase
    Фиксированный числовой массив
    Устанавливает каждый элемент в нуль
    Фиксированный массив строк
    (переменной длины)
    Устанавливает каждый элемент на нулевую длину строки ("")
    Фиксированный массив строк
    (фиксированной длины)
    Устанавливает каждый элемент в нуль
    Фиксированный массив типа Variant Устанавливает каждый элемент в Empty
    Массив данных определенных пользователем типов
    Устанавливает каждый элемент, как будто это отдельная переменная
    Массив объектов
    Устанавливает каждый элемент в величину Nothing
    Если количество элементов в динамическом массиве не известно, то для его определения используется функция
    UBound (ИмяМассива [, Измерение])
    Необязательный параметр Измерение имеет тип Variant или Long. Это целое число, указывающее размерность, для которой определяется верхняя граница индекса. Для первой размерности используется число
    1, для второй – 2 и т.д. если аргумент не указывается, по умолчанию используется значение 1.
    Пример
    Dim Товар(1 To 3) As String * 15
    L=UBound (Товар)
    Переменная L получит значение 3.
    Функция UBound обычно используется с функцией LBound для опре- деления размера массива, позволяющей найти наименьшее значение ин- декса указанной размерности. Формат функции:
    LBound (ИмяМассива [, Измерение])

    19
    В объектных моделях приложений Office наряду с массивами исполь- зуются коллекции. Коллекции – это специальные объекты, которые пред- назначены для хранения наборов одинаковых элементов. Коллекции обычно удобнее, чем массивы; они изначально безразмерны и в них пре- дусмотрен стандартный набор свойств и методов.
    2.6. Пользовательские типы данных
    VBA позволяет создавать структурные, так называемые пользова-
    тельские типы данных, аналогичные записям языка Pascal или языков
    PL/1 и COBOL. Например, если нужно обрабатывать сведения о результа- тах экзаменационной сессии, то можно создать пользовательский тип дан- ных с названием Успеваемость.
    Type Успеваемость
    ФИО As String * 20
    №_Зач_кн As String * 8
    Дисциплина As String * 20
    Оценка As String * 20
    End Type
    Примечание1
    Пользовательский тип данных определяется вверху модуля, в процедуре которой он используется, перед началом введения кода процедуры.
    Если пользовательский тип данных создан, то для объявления пере- менной этого типа следует применить инструкцию Dim.
    Пример
    Sub Пользоват_Тип()
    Dim Студенты As Успеваемость
    Студенты.ФИО = InputBox("Введите ФИО")
    Студенты.№_Зач_кн = InputBox("№_Зач_кн")
    Студенты.Дисциплина = InputBox("Дисциплина")
    Студенты.Оценка = InputBox("Оценка")
    MsgBox Студенты.ФИО & Студенты.№_Зач_кн & _
    Студенты.Дисциплина & Студенты.Оценка
    End Sub
    Примечание2
    В инструкции Dim переменную можно объявить с тем же именем, какое определено в пользовательском типе данных. В этом случае приведённый выше пример будет иметь вид:
    Sub Пользоват_ТИП()
    Dim Успеваемость As Успеваемость
    Успеваемость.ФИО = InputBox("Введите ФИО")
    Успеваемость.№_Зач_кн = InputBox("№_Зач_кн")
    Успеваемость.Дисциплина = InputBox("Дисциплина")
    Успеваемость.Оценка = InputBox("Оценка")

    20
    MsgBox Успеваемость.ФИО & Успеваемость.№_Зач_кн & _
    Успеваемость.Дисциплина & Успеваемость.Оценка
    End Sub
    Как правило, пользовательский тип данных определяется для масси- вов, например, так:
    Dim Студенты (1 to 40) As Успеваемость
    Все 40 элементов этого массива состоят из четырёх компонентов, как это указано в пользовательском типе данных Успеваемость. На конкрет- ный элемент массива, например, первый можно сослаться следующим об- разом.
    Студенты(1).ФИО = InputBox("Введите ФИО")
    Студенты(1).
    №_Зач_кн = InputBox("Введите №_Зач_кн")
    Студенты(1).
    Дисциплина = InputBox ("Введите Дисциплина")
    Студенты(1).
    Оценка= InputBox ("Введите Оценка")
    2.7. Операции VBA
    В программах на VBA можно использовать стандартный набор опе- раций над данными. Имеются три основных типа операций:
     математические,
     отношения,
     логические.
    1   2   3   4   5   6   7   8   9   ...   13


    написать администратору сайта