Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Теперь немножко сухой теории. Начнем наше знакомство с синтаксисом языка программирования VBA с описания переменных и констант.

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

Обычно перед тем, как использовать переменную, производится ее объявление — т. е. вы заранее сообщаете Visual Basic, какие именно имена переменных вы будете использовать в своей программе, и при этом объявляется также тип данных, для хранения которых предназначена эта переменная. В VBA, как и в обычном Basic, для этого используется оператор Dim. Вот синтаксис такого описания:

Dim имяПеременной As типПеременной

В VBA приняты стандартные соглашения о правилах именования переменных. Имя должно начинаться с буквы, оно не может быть длиннее 255 символов[2], не допускается использование в качестве имен переменных ключевых слов VBA и имен стандартных объектов, и оно не должно содержать пробелов и следующих специальных символов:

.! # $ % & @

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

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

Во многих языках программирования, например, в Pascal, переменные должны быть объявлены обязательно, и эти объявления используются компилятором для резервирования памяти для переменных. В то же время в предшественнике VBA, обычном Basic, объявление переменных не являлось обязательным, а для определения типа данных использовались специальные соглашения о наименовании — тип данных, хранящихся в переменной, определялся последним символом в названии переменной. Велись длительные баталии между сторонниками сокращения записи процедур за счет отказа от объявлений переменных и сторонниками обязательного описания всех переменных. Аргументы обеих сторон достаточно серьезны — действительно, большая часть обязательных описаний в простых программах достаточно тривиальна и требуется изрядная доля занудства при методичном выписывании объявлений типа

Dim i As Integer, j As Integer

Dim x As Double

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

В VBA принято поистине Соломоново решение: предоставить разрешение этой дилеммы самому программисту. В этом языке имеется замечательный оператор

Option Explicit

Если вы начнете свой модуль с этого оператора (он должен быть расположен в самом начале модуля, до того, как начнется первая процедура этого модуля), то VBA будет требовать обязательного объявления переменных в этом модуле и генерировать сообщения об ошибке всякий раз, как встретит необъявленную переменную. Кроме того, если вы строгий пурист и хотели бы, чтобы это требование было бы обязательным для всех ваших модулей без исключения, вы можете выполнить следующую установку параметров редактора Visual Basic (выполнять эти команды нужно в окне редактора Visual Basic):

Ø Сервис Ø Параметры 0 Редактор
ý явное описание переменных
q OK

Установка этого параметра приведет к тому, что Visual Basic будет автоматически добавлять оператор Option Explicit в начало каждого вновь создаваемого модуля. Учтите однако, что этот флажок не влияет на все ранее созданные модули — если вы хотите добавить этот оператор к уже существующим модулям, вам придется проделать это вручную.

А теперь приведем краткую сводку используемых типов данныхVBA (табл. 6.3-1):

Таблица 6.3-1. Типы данных

Тип данных Описание
Array Массив переменных, для ссылки на конкретный элемент массива используется индекс. Требуемая память: зависит от размеров массива.
Boolean Принимает одно из двух логических значений: True (ИСТИНА) и False (ЛОЖЬ). Требуемая память: 2 байта.
Byte Число без знака от 0 до 255 Требуемая память: как нетрудно догадаться, 1 байт.
Currency Используется для произведения денежных вычислений с фиксированным количеством знаков после десятичной запятой, в тех случаях, когда важно избежать возможных ошибок округления. Диапазон возможных значений: от —922 337 203 685 477,5808 до 922 337 203 685 477,5807. Требуемая память: 8 байтов. Символ определения типа по умолчанию: @
Date Используется для хранения дат. Диапазон возможных значений: от 1 января 0100 г. до 31 декабря 9999 г. Требуемая память: 8 байтов.
Double Числовые значения с плавающей точкой двойной точности. Диапазон возможных значений для отрицательных чисел: от —1,79769313486232E308 до —4,94065645841247E—324, Диапазон возможных значений для положительных чисел: от 4,94065645841247E—324 до 1,79769313486232E308 Требуемая память: 8 байтов. Символ определения типа по умолчанию: #
Integer Короткие целые числовые значения. Диапазон возможных значений: от —32 768 до 32 767. Требуемая память: 2 байта. Символ определения типа по умолчанию: %
Long Длинные целые числовые значения. Диапазон возможных значений: от —2 147 483 648 до 2 147 483 647. Требуемая память: 4 байта. Символ определения типа по умолчанию: &
Object Используется только для хранения ссылок на объекты. Требуемая память: 4 байта.
Single Числовые значения с плавающей точкой обычной точности. Диапазон возможных значений для отрицательных чисел: от —3,402823E38 до —1,401298E—45, Диапазон возможных значений для положительных чисел: от 1,401298E—45 до 3,402823E38 Требуемая память: 4 байта. Символ определения типа по умолчанию:!
String Используется для хранения строковых значений. Длина строки: от 0 до 64K байтов. Требуемая память: 1 байт на символ. Символ определения типа по умолчанию: $
Variant Может использоваться для хранения любых данных. Как нетрудно догадаться, при использовании этого типа данных не самым экономным способом расходуется память, и переменные этого типа требуют дополнительного времени на обработку, так что если вы заботитесь об эффективности программы, то пользуйтесь этим типом данных с осторожностью.
User-defined Определяемые пользователем типы данных, назначение и размер выделяемой памяти зависит от определения. Используется для описания структур данных. Позволяет хранить в переменной такого типа множество различных значений различного типа.

Несколько дополнительных соображений по поводу переменных и типов данных.

· При описании переменнойуказание типа данных может быть опущено. Тип переменной может в таком случае определять последний символ имени переменной: @, #, %, &,! или $ (Currency, Double, Integer, Long, Single или String соответственно). Если же последний символ не является ни одним из вышеперечисленных, то в этом случае переменной будет назначен по умолчанию тип данных Variant, который позволяет хранить в ней данные любого типа. Следует быть осторожным с такими переменными — работа с ними требует не только дополнительной памяти и времени на обработку, но и понимания, какие именно преобразования данных происходят при их использовании. Неаккуратное использование таких переменных может служить источником коварных ошибок. Можно провести некоторую аналогию с упоминавшимся выше оператором Option Explicit, требующим явного объявления переменных.

· Если объявить переменную как переменную одного типа, а затем попытаться присвоить ей значение другого, несовместимого типа данных, будет выдано сообщение об ошибке. Многие программисты для определения типа данных используют так называемые символы определения типа (см. таблицу 6.3-1), добавляя специальный символ в конец имени переменной. Таким образом можно задать тип переменной, не описывая его явно. Например, поскольку символ "$" является символом определения типа для строковых данных, то переменная под именем text$ автоматически становится переменной типа "строка символов". При этом присутствие символа определения типа напоминает о том, к какому типу данных относится эта переменная, и поможет избежать ошибок использования несовместных типов данных.

· Учтите также, что нельзя использовать в одной и той же процедуре имена переменных, отличающиеся друг от друга только специальным символом определения типа в конце переменной: например, не допускается одновременное использование переменных var$ и var%. Не допускается и явное объявление переменной, уже содержащей символ определения типа в конце имени, с помощью описателя "As типПеременной " (даже если такое определение не противоречит обычному применению символа определения типа). Так, например, вы получите сообщение об ошибке, попытавшись ввести любое из следующих определений:

Dim var1% As String

Dim var2% As Integer

Dim var3$ As String

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

Sub SplitStr(str1 As String, str2 As String, str3 As String)

· Определение типа данных возвращаемого функцией значения завершает заглавную строку функции, например,

Function FindSplitSpace(str1) As Integer

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

Совет

Если вы хотите, чтобы ваша программа занимала меньше памяти и работала быстрее, то старайтесь, когда это возможно, использовать конкретные типы переменных, а не универсальный тип Variant. Если вы сравните размеры переменных, то увидите, что для переменных Variant требуется больше места, чем для переменных любого другого типа, а кроме того, на обработку таких переменных тратится дополнительное время, нужное для выяснения того, к какому конкретному типу данных принадлежит эта переменная в момент обработки. Может показаться, что в таком случае лучше вообще не использовать подобные переменные. Это не так, часто подобные переменные просто необходимы: например, в том случае, когда вы точно не уверены, какие именно данные будут присвоены переменной. Приведем здесь лишь один пример. Если вы хотите, чтобы пользователь программы ввел некоторое целое значение, необходимое для дальнейшей работы программы, то переменную, в которую вы хотите поместить это значение, лучше всего объявить именно как Variant, несмотря на то, что ввести предполагается именно целое число. Дело в том, что пользователь может ошибиться и ввести, например, вещественное число, или вообще нечаянно нажать не на ту клавишу и ввести строковое значение. В таком случае при присваивании введенного значения переменной целого типа произойдет программная ошибка. Если же переменная для ввода будет объявлена как Variant, ничего страшного не случится: введенное значение будет благополучно присвоено этой переменной, и вы получите возможность проанализировать введенное значение и попросить пользователя повторить ввод, если введенное им значение не отвечает нужным условиям.

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

Описаниепредопределенных встроенных констант, используемых для различных объектов приложений Office и Visual Basic, можно найти во встроенной Справке — в разделах описания свойств объектов (реже — в разделах описания методов). Имена встроенных констант используют стандартные соглашения, позволяющие определить, к объектам какого приложения относится эта константа. Например, встроенные константы, относящиеся к объектам Excel, начинаются с букв "xl", относящиеся к объектам Word — с букв "wd", а относящиеся к объектам VBA — с букв "vb".

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

Константы Excel:

xlUnderlineStyleNone, xlUnderlineStyleSingle, xlUnderlineStyleDouble, xlUnderlineStyleSingleAccounting, xlUnderlineStyleDoubleAccounting
(соответственно: нет подчеркивания, одной чертой, двойной чертой, бухгалтерское, двойное бухгалтерское).

Константы Word:

wdUnderlineNone, wdUnderlineDash, wdUnderlineDotDash, wdUnderlineDotDotDash, wdUnderlineThick, wdUnderlineDotted, wdUnderlineDouble, wdUnderlineSingle, wdUnderlineWords, wdUnderlineWavy (соответственно: нет подчеркивания, подчеркивание черточками, точка-тире, точка-точка-тире, жирное, точками, двойное, одной чертой, только слова, волнистой линией).

Вот пример оператора, назначающего одиночное подчеркивание текста в активной ячейке в рабочей книге Excel:

ActiveCell.Font.Underline = xlUnderlineStyleSingle

Программист может создать свои собственные константы с помощью специального оператора Const:

Const имяКонстанты = выражение

Const имяКонстанты As типДанных = выражение

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

Const maxLen = 30

Совет

Если вы собираетесь использовать в вашей программе какие-либо константы, то мы настоятельно рекомендуем не полениться и придумать для этих констант осмысленные имена и описать эти константы в самом начале модуля, а затем использовать всюду только именованные константы. Это не только делает программу понятнее, но и проще в сопровождении и отладке. Зачастую значение той или иной константы требуется изменить (хотя бы на время отладки), и тогда достаточно поменять лишь одно значение в описании именованной константы. Если же непосредственное значение использовалось прямо в тексте кода программы, то изменить все вхождения этого значения намного сложнее.





Дата публикования: 2014-12-28; Прочитано: 662 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...