Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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



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

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

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

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

Static | Public | Private | Dim ИмяПеременной1 [ As Тип1][, ИмяПеременной2 [ As Тип2]]…….

где:

Dim (Размер)  ключевое слово, которое сообщает VBA, что декларируется переменная и резервируется область памяти для ее хранения;

ИмяПеременной  имя переменной (идентификатор, не входящий в перечень ключевых слов VBA);

As (Как)  ключевое слово, которое сообщает VBA, что определяется тип данных для переменной;

Тип  тип данных для объявляемой переменной;

Private (Частный), Public (Общий)  ключевые слова, определяющие область видимости переменной;

Static (Статический)  ключевое слово, которое указывает на то, что переменная сохраняет свое значение при завершении блока программы и выходе из него.

Пример:

Dim x As Single, i As Integer объявляется переменная x, ко-

торая может принимать значения нецелых чисел оди-

нарной точности, и переменная i которая может при-

нимать значения целых чисел.

При подготовке кода программы среда программирования оказывает помощь пользователю: после набора ключевого слова As раскрывается список, в котором наряду с другими типами объектов указаны и стандартные типы переменных. Тип переменной можно установить, дважды щелкнув мышью на требуемом имени типа в этом списке.

Другим способом явного объявления типа переменной является задание последнего символа в имени (суффикса). Явное объявление переменных с помощью суффикса имеет следующий синтаксис:



Static | Private | Public | Dim ИмяПеременнойСуффикс

Например:

Dim strInputMsg$  объявляется переменная типа String;

Static sngCalcAverage!  объявляется переменная типа Single;

Private intNumVal%  объявляется переменная типа Integer.

В табл. 2.1 приведены типы переменных и соответствующие им суффиксы.

Таблица 2.1

Тип переменной Суффикс

Integer %

Long &

Single!

Double #

Currency @

String $

Если имя переменной не оканчивается ни одним из этих суффиксов, то тип переменной  Variant.

Неявное объявление переменных определяет тип переменных по первым буквам. Для этого существуют специальные операторы определения типов  DefТип_Данных. Они определяют тип для всех используемых переменных, если не указано явное объявление или отсутствует суффикс. Синтаксис неявного объявления переменных имеет вид:

DefТип_Данных ДиапазонБукв [,ДиапазонБукв]...

где:

• Тип_Данных  сокращенное название типа данных;

• ДиапазонБукв  указывает границы диапазона первых букв, для которых задается тип данных по умолчанию.

Например:

DefInt AK 'Переменные, имена которых начинаются

'с букв А  К, будут иметь тип Integer.

DefStr LZ 'Переменные, имена которых начинаются

'с букв L  Z, будут иметь строковый тип.

Для обязательного явного объявления всех переменных в начале модуля следует поместить директиву Option Explicit. В этом случае VBA будет расценивать любую неявно объявленную переменную как ошибочную. Использование этой директивы не допускает возможности неправильного ввода имени переменной, которая применяется в одной или нескольких процедурах модуля.

Примеры явного объявления переменных:

Dim х As Single, strName$, lngOld&

Dim у As Integer

Dim x, у As String, Birds%

Следует отметить, что хороший стиль программирования предполагает использование явной декларации (объявления) переменных с помощью ключевых слов Dim, Private, Public, Static.

5.1. Строка. Объявление строковых переменных

Строка (string) представляет собой последовательность символов VBA, заключенных в двойные кавычки. Различают строки переменной и фиксированной длины. Строки переменной длины могут содержать до двух миллиардов символов. Когда такой переменной присваивается значение, то размер переменной изменяется так, чтобы он соответствовал длине присвоенного строкового значения.

Строка фиксированной длины  это строка постоянного размера, указанного при объявлении переменной. Если такой строке присваивается значение более длинное, то лишние символы отбрасываются. Если значение, которое присваивается, короче, то остающееся место заполняется пробелами. Строковые переменные фиксированной длины должны декларироваться явно. Синтаксис декларации следующий:

Dim VarName As String * ДлинаСтроки

где ДлинаСтроки  целочисленная переменная или константа, указывающая длину строковой переменной.

Например:

Dim strMyName As String * 20 ‘Объявляется строковая переменная с ‘фиксированной длиной в 20 символов

В VBA определена единственная строковая операция  конкатенация. Эта операция применяется для объединения нескольких строк в одну. Операция конкатенация обозначается символом амперсанда «&» или сложения «+». Присвоим строковой переменной s значение «Студент Иванов».

Dim a As String, b As String, s As String

а = «Студент»

b = «Иванов»

s = a & ««& b

MsgBox s

В окне сообщения появится строка «Студент Иванов».

5.2. Константы. Объявление констант

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

Символьная константа служит для изображения отдельных знаков и представляет собой лексему, состоящую из символа (или любой последовательности символов), заключенного в двойные кавычки. Например, Р, Program, 3.14, +  неименованные символьные константы.

Целая десятичная константа представляется десятичным целым числом: 44, 684, 0, 1024  неименованные десятичные целые константы.

Вещественные константы представляются в памяти ЭВМ в двух формах: в форме с фиксированной точкой и в форме с плавающей точкой. В форме с фиксированной точкой вещественная константа состоит из следующих частей: целая часть (десятичная целая константа); десятичная точка; дробная часть (десятичная целая константа). В форме с плавающей точкой вещественная константа состоит из следующих частей: целая часть (десятичная целая константа); десятичная точка; дробная часть (десятичная целая константа); буква «е» или «Е», которая заменяет основание системы счисления 10; показатель (десятичная целая константа).

Например: 44., 3.14159  неименованные десятичные вещественные константы с фиксированной точкой. 44.825е2, 0.314159Е1  неименованные десятичные вещественные константы с плавающей точкой.

Различают встроенные константы VBА (предопределенные константы) и именованные константы, создаваемые пользователем.

Встроенные константы используются, например, для определения цветовых наборов, задач доступа к данным, кодов клавиш, контуров и т.д. Встроенные в VBА константы имеют префикс vb.

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

MsgBox «Текстовое сообщение», vbInformation

В этом примере предопределенная константа vbInformation указывает, что в окне сообщения должен быть значок «Информация».

MsgBox «Нет данных для расчета», vbExclamation

В этом примере предопределенная константа указывает, что в окне сообщения должен быть значок «Внимание».

Однако встроенного запаса констант при подготовке программы иногда бывает недостаточно. В этом случае можно создавать собственные именованные константы. Для объявления именованных констант служит ключевое слово Const. Синтаксическая конструкция для декларирования (объявления) констант напоминает декларацию переменных и имеет вид:

[Public  Private] Const ИМЯ_КОНСТАНТЫ [As Тип] = значение

Например:

Const PI As Single = 3.14159 Объявлена именованная ‘числовая константа для хранения ‘значения  в формате Single

5.3. Определение времени жизни и области видимости переменных и констант

Термины время жизни и область видимости переменной означают место использования переменной и время ее существования. Область видимости переменной определяет часть программы, которая «знает» о существовании данной переменной. При объявлении переменной в процедуре получить или изменить ее значение можно только из кода этой процедуры. Однако иногда требуется использовать переменную, значения которой должны быть доступны из всех процедур модуля или проекта.

Примечание: Понятие о процедурах, модулях и проектах приведены в пунктах 3.2, 3.4, 7.2, и 7.3 настоящего пособия.

Существует три типа области видимости переменной:

• переменные, которые объявлены после заголовка процедуры Sub, распознаются только в этой процедуре. Они объявляются при помощи инструкций Dim или Static. Такие переменные называются локальными;

• переменные, которые объявлены сразу после заголовка модуля, то есть перед заголовками процедур, используются во всех процедурах только этого модуля. В процедурах других модулей этого проекта они использоваться не могут. Объявляются они при помощи инструкций Dim или Private. Такие переменные называются локальными для этого модуля и глобальными для всех процедур модуля.

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

Переменные, объявленные с помощью инструкции Private, сохраняют свои значения только при выполнении процедуры, в которой они объявлены. При завершении процедуры значения этих переменных теряются (не определены) и при повторном запуске этой процедуры им надо присваивать значения заново.

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

5.4. Массивы. Объявление массивов

Элементами массивов являются переменные с индексами. Массив представляет собой структуру данных, все элементы которой имеют одинаковую физическую природу. Массивы могут быть одномерными и многомерными. Так, для отображения вектора может быть использован одномерный массив, а для отображения матрицы  двумерный. Кроме того, массивы могут быть статическими и динамическими. В статическом массиве количество элементов определяется при его объявлении.

Объявление статического массива имеет следующий вид:

• Dim | Public | Private Имя_Массива (Индексы) As Тип_Данных

• где:

• Dim | Public | Private  ключевые слова, декларирующие массив и область его видимости;

• Имя_Массива  идентификатор, определяющий имя массива;

• Индексы  значение индекса (номера) последнего элемента в массиве по каждой размерности, считая с нулевого;

• As  ключевое слово, предваряющее указание типа элементов массива;

• Тип_Данных  любой, действительный для VBА тип данных (стандартный или созданный пользователем).

При определении размерности надо указывать верхнюю, а также нижнюю границу. Если нижний индекс не задан явно, нижняя граница массива определяется директивой Option Base. Если эта директива отсутствует, нижняя граница массива равна нулю.

Например, объявление целочисленного одномерного массива из восьми элементов может выглядеть следующим образом:

Option Base 1

Dim MyArray(8) As Integer 'Одномерный целочисленный массив из 8 элементов

или

Dim MyArray(7) As Integer 'Одномерный целочисленный массив из 8 элементов

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

Dim strMyArray(4,5) As String 'Двумерный массив из 5 строк и 6 столбцов

При необходимости базовый индекс можно изменить путем использования ключевого слова То при объявлении массива:

Dim strMyArray (3 То 10) As String

В этом примере базовому индексу массива установлено значение 3. Подобным образом можно устанавливать как положительные, так и отрицательные базовые индексы:

Dim strMyArray (-3 То 4) As String

Объявление динамического массива отличается от объявления статического массива тем, что «Индексы» в круглых скобках отсутствуют и имеет следующий вид:

Dim | Public | Private Имя_Массива () As Тип_Данных

Количество элементов в объявленном массиве и его размерность в процессе выполнения программы можно переопределить с помощью ключевого слова ReDim. Синтаксическая конструкция переопределения массива имеет вид:

ReDim [Preserve] ИмяМассива(Индексы) [As ТипДанных],

где:

• ReDim  ключевое слово, указывающее, что переопределяются размеры массива;

• Preserve  необязательное ключевое слово, с помощью которого дается указание, чтобы все элементы переопределяемого массива сохранили свое значение;

• Индексы  размерности массива (до 60).

Например:

Dim strMyArray () As String 'Одномерный массив из 10 элементов

ReDim strMyArray (9) 'Объявление динамического массива

'(базовый индекс равен 0)

При написании программ имеется возможность узнать границы массива во время выполнения программы. Для этой цели в VBА введены две функции, формат которых имеет следующий вид:

LBound(Имя_массива [, Номер_измерения])

RBound(Имя_массива [, Номер_измерения])

Функция LBound позволяет получить нижнюю границу массива, а UBound  верхнюю. Обе функции принимают в качестве аргументов идентификатор массива и номер измерения, границу которого нужно получить. Нумерация измерений начинается с единицы. Если параметр Номер_измерения опущен, то его значение принимается равным единице. Обе функции возвращает значение типа Long.

В VBА имеется возможность быстрого заполнения массива значениями.Эта возможность реализована в функции Array. Ее формат:

Array (Список_элементов)

В качестве аргументов функция принимает список значений, разделенных запятой. Возвращает она заполненный заданными значениями массив, сохраненный в переменной типа Variant. Например:

Dim d As Variant, i As Integer

d = Array(Пн, Вт, Ср, Чт, Пт)

For i = LBound(d) To UBound(d)

MsgBox d(i)

Next i

5.5. Типы данных, определяемые пользователем

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

Создание нового типа осуществляется следующей синтаксической конструкцией:

Туре ИмяТипа

Имя1 As Тип 'Структурный элемент1 создаваемого типа  ‘базовый тип

Имя2 As Тип 'Структурный элемент2 создаваемого типа  'базовый тип

ИмяN As Тип 'Структурный элемент N создаваемого типа  'базовый тип

End Type

где:

• Туре  ключевое слово, которое указывает, что создается новый пользовательский тип данных:

• ИмяТипа  имя создаваемого типа (идентификатор);

• ИмяN As Tun  описание структурного элемента N создаваемого типа;

• End Type  ключевые слова, завершающие описание нового типа.

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

Туре Сотрудник

strФамилия As String ‘Структурный элемент для хранения фамилии

ДатаРождения As Date 'Структурный элемент для даты рождения

ДатаПоступления As Date 'Структурный элемент для хранения

'даты поступления на работу

End Type

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

Dim udtСлужащий As Сотрудник 'Объявлена переменная

'пользовательского типа Сотрудник

Обращение к элементу пользовательского типа имеет синтаксис:

ИмяПеременной.Имя Структурного Элемента

Например:

udtСлужаший. strФамилия=" Иванов


Дата добавления: 2015-08-27; просмотров: 123 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Маленькая собачка – размером с кота, | В финском народном эпосе есть сказание о Вяйнемёйнене, который отнял у полярного чудовища счастье финского народа. Во время возвращения на него напали злые воины чудовища. Вяйнемёйненеу удалось

mybiblioteka.su - 2015-2024 год. (0.024 сек.)