Правила оформления кода
VBA не накладывает на структуру программы (процедуры) каких-либо особых ограничений. Однако желательно придерживаться следующих рекомендаций:
1. В соответствии с правилами хорошего стиля программирования размещать инструкции описания в начале процедуры, т.е. структурно выделив в ней описательную и исполнительную части.
2. Использовать комментарии.
Комментарии, т.е. пояснения к фрагменту текста процедуры, не являются программным кодом и поэтому компилятором игнорируются. Комментарии выполняют две важные функции:
- Делают программу легко читаемой, поясняя смысл кода и алгоритма. Комментарии могут располагаться в любом месте процедуры. Закомментированный текст в начале программы используется для указания действия, выполняемого ею, и краткой справке об авторе программы. Комментарии по тексту процедуры обычно используются для пояснения ключевых фрагментов кода.
- Временно отключают от выполнения закомментированные фрагменты программы, что бывает очень полезно при ее отладке.
Для ввода комментариев используется символ (´) апостроф. Его можно использовать в любом месте строки. При этом все символы, начиная от апострофа до конца строки, будут восприниматься компилятором как комментарий.
Например:
Sub Lab1 ()
´программирование линейных алгоритмов
´задание 2.2
´выполнил студент гр. МТ-11
´Иванов И.И.
Dim S As Integer ´S – сумма положительных чисел
Dim i As Byte ´i – переменная цикла
…
End Sub
3. Перенос строк кода.
Длинные инструкции можно размещать в нескольких строках. Для этого используют признак продолжения строки, состоящей из двух символов: пробела и подчеркивания(_).
Например,
y = 2 * Sqr(x+3) - (log(x^2) +2) _
/ (sin(x-1));
При переносе строк необходимо помнить:
- Нельзя разбивать переносом строковые константы. Если строковая константа длинная, и ее все же необходимо разбить, следует использовать операцию конкатенации (сцепления).
Например,
y= “В обрабатываемом массиве нет” & _
“ положительных чисел”;
- За признаком продолжения строки нельзя ставить комментарий.
- Допустимо не более семи продолжений одной и той же строки.
- Строка не может состоять более чем из 1024 символов.
4. Расположение нескольких операторов в одной строке.
Использование знака двоеточия (:) позволяет разместить несколько операторов (инструкций) на одной строке. Это всегда короткие операторы, как правило, операторы присваивания. Например, конструкции
x=x+a
y=x-b
эквивалентны такой
x=x+a: y=x-b
5. Выделение логических уровней кода отступами.
Любая информация воспринимается лучше, если она имеет иерархическую структуру (процедура, цикл, вложенный цикл, ветвление, вложенное ветвление, описательные инструкции и т.д.). В VBA такая структура создается с помощью отступов в коде в нужных местах. Это не только облегчит чтение кода, но и поможет увидеть его структуру.
Правила отступа просты. Основной текст программы набирайте с отступом, например, в три пробела. Каждый вложенный блок (например, инструкции, расположенные внутри оператора цикла) сдвиньте еще на три пробела и т.д.
2. ОРГАНИЗАЦИЯ ВВОДА – ВЫВОДА ДАННЫХ
Для обмена информацией с пользователем в Windows используются специальные формы, которые называются диалоговыми окнами.
В проектах VBA при организации диалога с пользователем используются две разновидности встроенных диалоговых окон: окна сообщений и окна ввода.
Окно ввода (InputBox) обеспечивает ввод информации, а окно сообщений (MsgBox) выводит сообщения для пользователя.
Кроме того, в программах VBA, написанных для приложения MS Excel, есть возможность ввод и вывод данных осуществить непосредственно из ячеек (в ячейки) рабочего листа.
2.1. ОКНО СООБЩЕНИЯ. Стандартная процедура MsgBox
Вывод – это процесс переноса информации из оперативной памяти компьютера на внешний носитель (экран, принтер, файл).
Практически любое информационное сообщение или предупреждение пользователь может вывести в специальном диалоговом окне.
Программная поддержка окна сообщения осуществляется встроенной процедурой MsgBox, которая
- выводит на экран диалоговое окно, содержащее сообщение и одну или более кнопок (см. рис.1-5). Кнопка OK выводится всегда. Остальные кнопки – по усмотрению разработчика.
- устанавливает режим ожидания нажатия кнопки пользователем.
Сокращенный синтаксис процедуры MsgBox:
MsgBox сообщение [, атрибуты] [, заголовок]
Элементы синтаксиса:
сообщение –
Обязательный. Строковое выражение, отображаемое как сообщение в диалоговом окне. Максимальная длина строки 1024 символа.
атрибуты –
Необязательный. Числовое выражение, с помощью которого можно установить
Ø число и тип отображаемых кнопок;
Ø тип используемого информационного значка;
Ø основную кнопку.
Значение по умолчанию этого параметра равняется 0. Значения констант, определяющих число, тип кнопок и используемых значков, (табл.8. – 9).Для вывода в окне сообщения нескольких кнопок и информационных значков значения констант указываются в виде элементов операции конкатенации. Например:
vbOKCancel + vbExclamation
заголовок -
Необязательный. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, то в строку заголовка помещается имя приложения (рис.1).
Наличие запятых, соответствующих отсутствующим не последним аргументам, является обязательным.
Таблица 8 | |||
Значения параметра Buttons процедуры и функции MsgBox, определяющие отображаемые кнопки в окне сообщения | |||
Константа | Значение | Отображаемые кнопки | |
vbOKOnly | OK | ||
vbOKCancel | OK, Отмена | ||
vbAbortReplyIgnore | Стоп, Повтор, Пропустить | ||
vbYesNoCancel | Да, Нет, Отмена | ||
vbYesNo | Да, Нет | ||
vbReplyCancel | Повтор, Отмена | ||
Таблица 9 | |||
Значения параметра Buttons процедуры и функции MsgBox, определяющие отображаемые информационные значки в окне сообщения | |||
Константа | Значение | Значок сообщения | |
vbCritical | |||
vbQuestion | |||
vbExclamation | |||
vbInformation | |||
Параметры атрибуты и заголовок могут отсутствовать. Однако если в процедуре используется параметр заголовок, то перед ним необходимо указать два разделительных символа “,” (запятая).
Пример 2.1. Вывод простого информационного сообщения.
Процедура Pr_1:
Sub Pr2_1()
' Простое информационное сообщение
MsgBox "Привет!!!"
End Sub
Результатом работы данной процедуры является информационное сообщение, выведенное в виде диалогового окна (рис.2.1.). Поскольку в процедуре MsgBox отсутствуют параметры атрибуты и заголовок, то в диалоговом окне выведена только одна обязательная кнопка OK, которая используется для закрытия окна, и в заголовке окна выведено имя приложения – Microsoft Excel.
Для ввода в строке заголовка окна сообщения личного заголовка (например, такого, как на рисунке 2), необходимо изменить процедуру MsgBox:
MsgBox “Привет!!!”, , “Пример”
Усложним выводимое информационное сообщение. На рис.2.2 б) показан результат вывода строковой константы “Привет!!!” и значения строковой переменной Name. Для их вывода в качестве единого информационного сообщения использована операция конкатенации (сцепления). Данный вывод реализован с помощью следующей процедуры.
Sub Pr2_1_б()
' Простое информационное сообщение
' с выводом заголовка
Dim Name As String
Name = "Анна"
MsgBox "Привет!!!" & Name , , "Пример"
End Sub
Для вывода сообщения в нескольких строчках используется стандартная функция Сhr(). Онапозволяет получать символы, генерируемые при нажатии различных клавиш. Например, Chr(9)– соответствует нажатию клавиши Tab, Chr(13)– клавиши Enter.
Поскольку символы, используемые для начала новой строки являются очень важными при форматировании сообщений и других строковых данных, которыми манипулирует VBA-процедуры, VBA имеет несколько предопределенных констант для этих символов, чтобы не было необходимости использовать функцию Chr():
Ø vbCr – символ возврата каретки, эквивалент выражения Chr(13);
Ø vbTab – символ табуляции, эквивалент выражению Сhr(9). Символы табуляции включают в строки для выравнивания данных в столбцах.
На рис.2.2 в) приведены результаты работы процедуры Pr2_1_в().
Sub Pr2_1_в()
' Простое информационное сообщение с выводом заголовка
Dim Name As String
Name = "Анна"
MsgBox "Привет!!! " & Chr(13) & Name, , "Пример"
End Sub
Пример 2.2. Вывод информационного сообщения совместно с информационным значком в окне сообщения.
Процедура Pr2_2 осуществляет вывод диалогового окна, представленного на рис.2.3.
Sub Pr2_2()
' Вывод сообщения в сочетании с
' предупреждающим информационным значком
MsgBox "Процент выполнения плана выпуска продукции -" & _
vbCr & "незначительный", vbExclamation, _
"Пример"
End Sub
Для вывода информационного значка (Предупреждение) используется в качестве параметра атрибуты встроенная константа vbExclamation (см. табл.9).
Пример 2.3. Вывод диалогового окна с кнопками ОК (основная), Отмена и со значком (Предупреждающий запрос).
Данное окно (рис.2.4) можно вывести с помощью следующей процедуры
Sub Pr2_3()
' Вывод сообщения с двумя кнопками ОК и Отмена
'в сочетании с предупреждающим информационным значком.
' Кнопка ОК является основной
MsgBox "Процент выполнения плана выпуска продукции -" & _
Chr(13) & " незначительный", vbOKCancel + _
vbQuestion + vbDefaultButton1, "Пример"
End Sub
2.2. ОКНО ВВОДА. Стандартная функция InputBox()
Ввод – это процесс переноса информации с внешнего носителя (клавиатура, файл) в оперативную память компьютера.
Программная поддержка окна ввода обеспечивается функцией InputBox(), которая
Ø Выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки: ОК и Cancel (см. рис.2.5);
Ø Устанавливает режим ожидания ввода текста пользователем и нажатия кнопки;
Ø Возвращает значение типа String по нажатию кнопки ОК, содержащее текст, введенный в поле ввода;
Ø Возвращает пустую строку (значение Empty) при нажатии кнопки Cancel.
Сокращенный синтаксис:
InputBox (сообщение [, заголовок] [, умолчание])
Элементы синтаксиса:
сообщение –
Обязательный. Строковое выражение, отображаемое как сообщение в диалоговом окне. Может содержать несколько строк. Максимальная длина строки 1024 символа.
заголовок -
Необязательный. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, то в строку заголовка помещается имя приложения.
умолчание –
Необязательный. Строковое выражение, отображаемое в поле ввода. Используется по умолчанию, если пользователь не введет другую строку. Если параметр опущен, то поле ввода изображается пустым.
Наличие запятых, соответствующих отсутствующим не последним аргументам, является обязательным.
Например, с помощью инструкции
x = InputBox("Введите значение х", "Пример 3.5","5")
с помощью окна ввода (рис.2.5) осуществляется ввод некоторого значения с клавиатуры. Затем введенное значение преобразуется в соответствии с типом переменной x.
При вводе вещественных чисел используется знак десятичная запятая (“,”). Например, как на рис.2.6.
2.3. Ввод/вывод данных с/на рабочий лист Excel
Для организации ввода/вывода данных непосредственно с/на рабочий лист приложения MS Excelиспользуется объект Range (Диапазон ячеек) или свойство Cells (Ячейка) объекта Worksheet (Рабочий лист). С их помощью можно работать с любой ячейкой рабочего листа Excel.
Используя объект Cells, можно содержимое ячейки рабочего листа присваивать в качестве значения переменной и наоборот, значение выражения выводить в любой ячейке.
Например,
Ø x=Cells(5,3).Value
или
x = Range("C5").Value
Переменной x присваивается значение свойства Value ячейки С5.
Ø x=Cells(1+i, 1+j).Value
Переменной x присваивается значение ячейки, номер строки и столбца которой определяется значениями выражения 1+i и 1+j соответственно.
Ø Cells(8,4).Value =x+2*y
В ячейке D8 выводится значение выражения x+2y.
Ø p = InputBox("Введи номер строки")
q = InputBox("Введи номер столбца")
Cells(p,q).Value = a + Range("A1").Value
В ячейку рабочего листа, расположенную в p строке и q столбце выводится значение выражения a + Range("A1").Value. Номера строки и столбца вводятся с клавиатуры.
Пример 2.4. Вычислить значение функции . Ввод/вывод данных осуществить с/на рабочий лист.
Фрагмент рабочего листа с исходными данными представлен на рис.2.7 а). Расчеты получены с помощью процедуры Pr2_4() и выведены на тот же рабочий лист (рис.2.7 б)).
Sub Pr2_4 ()
Dim a As Byte, b As Byte, x As Integer, y As Single
a = Cells (2, 3)
b = Cells (3, 3)
x = Cells (4, 3)
y = (x + 3) ^ 2 + (2 * a - 3 * b) / (x ^ 2 - 2.8)
Cells(6, 1) = "Значение функции:"
Cells (7, 3) = y
End Sub
Дата добавления: 2015-08-26; просмотров: 567;