VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
ИмяБолее255СимволовНеПоместившеесяЗдесь...
Go4It
4ScoreArd7
You_Did_It
WhoDunIt?
СиниеГлаза
Черные Глаза
В программном коде все равно можно будет печатать имя переменной, используя как прописные, так и строчные буквы. Например, в каждом из следующих трех операторов используется одна и та же переменная:
loudvariabie = Ярко-красная
10UDvARIABLE =Ucase(10UDvARIABLE)
MsgBox(LoudVariable)
Конечно, слишком долго наслаждаться альтернативными версиями имени вам не удастся.
Редактор Visual Basic запоминает то имя, которое вы задаете в объявлении, и если вы напечатаете имя как-то иначе, оно будет автоматически скорректировано, как только вы перейдете в другую строку.
Соглашения об именах в VBA
В рамках правил, обсуждавшихся в предыдущем разделе, объектам программы можно назначать любые имена. Тем не менее можно значительно облегчить себе жизнь в программировании, если придерживаться определенной логичной схемы выбора имен. По мере того как ваши программы будут становиться длиннее, все труднее будет помнить о типе и назначении каждой конкретной переменной. Поэтому имеет смысл научиться создавать имена, которые смогут кое-что подсказать.
В идеале, нужно выбрать определенный метод и строго его придерживаться. Один такой метод, используемый многими программистами, состоит в том, чтобы имя начиналось с некоторого префикса, соответствующего типу объекта, а за префиксом следовало сокращенное описательное имя, которое начинается с прописной буквы. Например, если при создании программы инвентаризации требуется целая переменная, в которой должен храниться инвентарный номер, то вполне подходящим именем для такой переменной будет intPartNo.
В табл. 6.1 приведены префиксы, рекомендуемые для часто используемых объектов VBA.
Вместо предложенных вы можете создать свои собственные или использовать их как суффиксы. Главное- непременно их использовать.
В главах 1-5 я не придерживался этих соглашений по той простой причине, что сначала их нужно было объяснить. Но начиная с этой главы я постараюсь следовать тому, что здесь проповедую.
Таблица 6.1. Префиксы, рекомендуемые для имен объектов VBA
Префикс
Тип объекта
Пример
Переменные
byt
Byte
BytDaysInMonth
bool
Boolean
BooIClearedStacus
int
Integer
IntWeeksOnChart
lng
Long integer
LngPopulation
sng
Single
SngRadius
dbl
Double
DblParsecs
cur
Currency
CurUnitPrice
str
String
StrLastNarae
date
Date/Time
DateBirthdate
var
Variant
VarSerialNumber
obj
Object
ObjStampCo11ection
Элементы управления
Txt
Text box (текстовое поле)
TxtEnterName
lbl
Label (надпись)
LblAnswerMessage
cmd
Command button (кнопка)
CmdCalculateInterestRate
mnu
Menu (меню)
MnuTools
Cmb
Combo box (поле со списком)
CmbToyCategory
fra
Frame (фрейм)
FraHabitat
opt
Option button (переключатель)
OptGasolineGrade
Chk
Check box (флажок)
ChkCaseSensiuive
Другие
Bas
Module (модуль)
BasTextFormatFunctions
Frm
UserForm (пользовательская форма)
FrmOptionsDialog
Сделайте программный код красивым
В общем-то, программному коду совсем не обязательно выглядеть красиво - нужно, чтобы он легко читался. В этом разделе предлагается несколько простых рекомендаций по оформлению программного кода для того, чтобы вам было легче расшифровать свой же программный код завтра, через неделю или в следующем году, если это потребуется.
Отступы в программе
Запомните: следует выработать правила использования отступов и неуклонно их придерживаться. Компилятор VBA игнорирует все пробелы в начале строк, так что вы можете смело использовать отступы для наведения порядка. Сравните следующие два фрагмента программного кода и решите, какой из них легче понять:
If intA = 27 Then
If txtChooseColor.Text = Беж Then
intA = 33
intB = 0
End If
For Each objCbar In CommandBars
If objCbar.Name = Моя панель инструментов Then
If objCbar.Visible = False Then
objCbar.Visible = True
end If
End If
Next objCbar
End If
* * *
If intA = 27 Then
If txtChooseColor.Text = Беж Then
intA = 33
intB = 0
End If
For Each objCbar In CommandBars
If objCbar.Name = Моя панель инструментов Then
If objCbar.Visible = False Then
objCbar.Visible = True
end If
End If
Next objCbar
End If
Оба эти фрагмента дают один результат, но отступы во втором фрагменте позволяют сразу сказать для каждого из операторов End If, какой из расположенных выше операторов If. . .Then будет ему парой. В результате легче отследить путь выполнения программы в зависимости от сложившихся условий.
Правила для отступов
В каких же строках программного кода следует сделать отступ и какой по величине? Нужно установить отступы одного размера для связанных по смыслу операторов, чтобы связь между такими операторами была зрительно очевидной. Конкретнее говоря, операторы, выполняющиеся вместе при каком-то общем условии, должны иметь и одинаковые отступы.
Например, если VBA выполняет операторы внутри конструкции If. . .Then. . .Else.
Do ... Loop или For Next как одну группу, то операторы такой группы должны иметь один и тот же отступ. Вот подходящий пример программного кода:
Do While intC 20
intA = intA + 1
If intA = intB Then
intA – 5
intB – 10
.Else
intA = intB
intC = 20
.End If
Loop
VBA выполняет оператор intA = intA + 1 и структуру If.. .Then. .. Else прикаждом проходе структуры Do... Loop. По этой причине я использовал один и тот же отступ и для оператора intA = intA + 1, и для трех операторов, задающих структуру If. . .Then. . .Else ( If. . .Then, Else и End If ). Два оператора, следующие непосредственно за оператором If . . .Then, будут выполняться, если только intA = intE, поэтому эти два оператора получают дополнительный отступ, как и два оператора, следующие за Else.
Обратите внимание, что управляющие структуры типа Do ... Loop и If . . . Then. . .Else всегда состоят как минимум из двух операторов (один должен определить начало структуры, а второй - ее конец). Дня структуры Do. . .Loop завершающий оператор Loop, а для If... Then . . .Else - это End If. Если в рамках структуры есть другие операторы, для них следует использовать тот же отступ. Это позволит ясно различить и саму структуру, и содержащиеся в ней подчиненные операторы. (Управляющие структуры будут подробно рассмотрены в главе 8.)
Как сделать отступ
Для добавления отступа в строке программного кода нажмите клавишу пробела или Tab, чтобы сдвинуть текстовый курсор вправо. Можно задать расстояние, на которое клавиша Tab сдвигает курсор, если выбрать Tools=Options. В диалоговом окне Options (Параметры) на вкладке Editor (Редактор) есть поле Tab Width (Отступ табуляции), где можно впечатать число, соответствующее количеству пробелов. Поскольку пространства в окне редактора Visual Basic не слишком много, лично я установил отступ табуляции, равный 3 пробелам, хотя можно указать любое число от 1 до 32.
Если по каким-то причинам нажимать клавишу табуляции вам не слишком удобно, всегда можно сдвинуть начало строки вправо или влево с помощью предлагаемых VBA кнопок Indent (Добавить отступ) и Outdent (Удалить отступ) соответственно. Эти кнопки применяются не только к отдельным строкам, но и к выделенным фрагментам текста, так что одним щелчком можно добавить или убрать отступ целого блока. Обратите внимание на то, что при использовании этих кнопок положение точки ввода в строке игнорируется - всегда увеличивается или уменьшается отступ сразу всей строки.
Автоматические отступы
Чтобы до минимума уменьшить объем выполняемой вами работы, редактор Visual Basic автоматически устанавливает отступ в новой строке, равный отступу в предыдущей. Если в новой строке отступ должен быть меньше, просто нажмите клавишу удаления символа перед курсором (клавишу Back Space ). Если навязанная помощь вас слишком уж раздражает, автоматическое создание отступов можно отменить на вкладке Editor в диалоговом окне Tools=Options.
Свободное пространство - это хорошо
Оставленные между группами родственных операторов пустые строки намекают на важность выделенного таким образом фрагмента программного кода. Кроме того, это уменьшает плотность программы и еще упрощает зрительное восприятие программного кода (рис. 6.2).