Пользовательский интерфейс VBA 3 страница
Синтаксис:
strВыражение_1 & strВыражение_2 [… & strВыражение_N]
где
strВыражение – строковые выражения, которые могут быть любыми допустимыми строками (строковыми переменными, строковыми константами или функциями обработки строк).
“&” - знак между строковыми выражениями указывает, что производится конкатенация этих выражений. Он отделяется от выражения пробельными символами. В одном операторе может объединить любое количество строковых выражений.
Пример 1.
strMy = “Visual” & “Basic for Applications”
Примечание. Здесь объединяются две неименованные строковые константы. Результатом операции конкатенации будет значение Visual Basic for Applications).
2.7 Отладка программ и обработка ошибочных ситуаций
При разработке приложений VBA, как это бывает в программировании, возможны ошибки. Их можно разделить на три вида: синтаксические, ошибки при выполнении программы и логические ошибки.
Первый вид ошибок связан с допущенными опечатками или с недостаточным знанием языка программирования. Система указывает на некоторые типы синтаксических ошибок при вводе текста программы, на другие типы синтаксических ошибок – при попытке выполнения программы. Как правило, количество синтаксических ошибок в программах резко сокращается по мере изучения языка программирования и приобретения опыта разработки программ.
Ошибки при выполнении программы случаются, если внешнее событие или необнаруженная синтаксическая ошибка вызывает останов программы в процессе ее работы. Например, в аргументе функции использовано неправильное имя файла, не закрыт замок дисковода гибких дисков, произошло обращение к выключенному принтеру и т.д.
Логическая ошибка является следствием плохо разработанного алгоритма, неучёта возможных значений входных данных и т.д. В этих случаях при выполнении программы получаются неверные результаты. Большая часть времени отладки программ является следствием допущенных логических ошибок.
В среде VBA имеются различные средства, которые можно использовать для отслеживания и исправления ошибок в программах.
Прежде всего, нужно отметить возможность простого обнаружения необъявленных переменных, что позволяет устранить большинство синтаксических ошибок. Способы идентификации логических ошибок состоят в установке точек останова (контрольных точек), пошаговом режиме выполнения отлаживаемой программы, наблюдении за значениями переменных и др. Имеется возможность создания обработчиков ошибок. Основные средства отладки доступны через меню Debug (Отладить).
Проще и быстрее выполнять отладочные операции с помощью панели инструментов Debug. Чтобы отобразить эту панель, нужно войти в меню View (Вид) выбрать команду Toolbars (Панели инструментов) и щелкнуть мышью по строке Debug.
Инструменты панели Debug слева направо имеют следующее назначение:
Run Sub/UserForm – Запуск программы/Формы
Break – Приостановка программы
Reset – Останов программы
Toggle Breakpoint – Включить/Выключить контрольную точку
Step Into – Пошаговая обработка с заходом в процедуры
Step Over – Пошаговая обработка без захода в процедуры
Step Out – Выход из процедуры
Locals Window – Включить/Выключить локальное окно
Immediate Window – Окно непосредственного выполнения
Watch Window – Включить/Выключить окно наблюдаемых переменных
Quick Watch – Быстрый просмотр значения переменной
Call Stack – Просмотр списка вызова процедур.
Как видно из рисунков 12 и 13, некоторые инструменты панели Debug дублируют или взаимосвязаны с меню Debug.
Рисунок 12 – Меню Debug
Рисунок 13 – Панель инструментов Debug
2.7.1 Отладка
При выполнении программы, если компилятор встречается с проблемами и не может их разрешить, он выводит на экран сообщение об ошибке, изображенном на рисунке 14, дающее пользователю возможность либо отладить программу, либо завершить ее работу. Если выбрать команду Run Sub/UserForm, на экран будет выведено кодовое окно, в котором строка, являющаяся причиной проблемы, будет выделена, как на рисунке 15.
Рисунок 14 – Сообщение об ошибке на экране
Рисунок 15 – Выбор команды Run Sub/UserForm
При этом программа не останавливается; она только временно прекращает свою работу. Следовательно, если ошибка не слишком серьезная, можно внести исправления и продолжить работу программы.
В такой ситуации доступны несколько опций.
1 Можно изменить строку, являющуюся причиной проблемы, выбрав в меню Run команду continue и продолжить работу программы. При этом программа запускается со строки, следующей за строкой, которая является причиной проблемы.
2 Можно запустить программу с другого места, щелкнув по другой строке, выбрав в меню Debug команду Set Next Statement и нажав клавишу F5. Однако эта опция обычно не приводит к успеху, поскольку она может нарушить логику программы.
3 Можно завершить программу, выбрав в меню Run команду Reset.
2.7.2 Точки останова (контрольные точки)
При отладке можно остановить выполнение программы в любой точке ее кода с помощью точек останова. Точка останова – это строка в программном коде, где прерывается выполнение программы. Создать точку останова можно одним из следующих способов.
1 Щелкнуть мышью в той строке кода, в которой требуется остановить выполнение программы, и нажать клавишу F9.
2 Вставить точку останова из меню Debug, выбрав в нем пункт Toggle Breakpoint (Установить точку останова).
Строка, на которой будет установлена точка останова, выделится красным цветом. Запущенная программа прервется на этой строке, после чего строка будет выделена желтым цветом и обозначена стрелкой, как показано на рисунке 16. Имея прерываемую таким способом программу, легко проверять значения переменных, перемещаться строка за строкой по коду, делать небольшие изменения в коде или продолжать работу программы, нажимая клавишу F5.
Точка останова может быть отменена щелчком мыши по строке, содержащей точку останова, или повторным нажатием клавиши F5. Для отмены всех точек останова нужно войти в меню Debug и выбрать команду Clear All Breakpoints (Убрать все точки останова).
При отладке программы точки останова используются для сужения той области программного кода, в которой предполагается наличие ошибки. Далее исследовать состояние программы более детально можно с помощью просматриваемых значений (watches).
Рисунок 16 – Строка, на которой установлена точка останова
2.7.3 Наблюдение за данными с помощью просматриваемых значений
Для установки наблюдения за значением требуемой переменной нужно выполнить следующие действия.
1 Установить контрольную точку на той строке программы, которая содержит проверяемую переменную (клавиша F9).
2 Запустить программу, нажав клавишу F5 или выбрав команду Run Sub/UserForm.
3 Задержать на пару секунд указатель мыши над переменной, значение которой требуется просмотреть. Появится небольшое окно с текущим значением переменной, изображенным на рисунке 17.
Рисунок 17 – Окно с текущим значением переменной
Иногда необходимо отслеживать значения нескольких переменных. Для этого используется окно “Watches” (Наблюдаемые переменные). Последовательность действий может быть следующей.
1 Установить точки останова в тех строках кода, где находятся проверяемые переменные, как показано на рисунке 18. Нажать клавишу F5 для запуска программы.
2 В точке останова подсветить переменную, которую необходимо добавить к списку просматриваемых значений.
Рисунок 18 – Окно «Watches»
3 Щелкнуть правой кнопкой мыши и в появившемся контекстном меню на рисунке 19 выбрать команду Add Watch (Добавить наблюдаемую переменную).
4 В появившемся диалоговом окне “Add Watch” выбрать нужные установки: имя переменной (Expression), область видимости переменной (Context), тип наблюдения (Watch Type). Аналогично добавить другие наблюдаемые переменные и щелкнуть по кнопке <OK>, как показано на рисунке 20.
Рисунок 19 – Контекстное меню
Рисунок 20 – Окно для добавления наблюдаемых переменных
5 Для того чтобы отобразить окно “Watches”, показанному на рисунке 21, войти в меню View и выбрать команду Watch Window (Окно наблюдения).
Рисунок 21 – Окно «Watches»
2.7.4 Пошаговое выполнение программы
Пошаговое выполнение применяется для проверки каждой строки кода программы в порядке ее выполнения. Есть два режима такого выполнения: Step Into (пошаговая обработка с заходом в процедуры) и Step Over (Пошаговая обработка без захода в процедуры). В первом случае выполняются все строки программы, в том числе строки вызываемых процедур. Во втором случае вызываемые процедуры выполняются как один оператор, а затем выполняется следующая строка программного кода.
Последовательность действий по использованию панели Debug для отладки программы.
1 Открыть отлаживаемый проект.
2 В меню View выбрать команду ToolBars (Панели инструментов) и щелкнуть на строке.
3 Отобразить окно “Code”, в котором находится текст программы.
4 Щелкнуть на кнопке <Step Into> (Войти в инструкцию) на панели Debug для выполнения первого оператора в процедуре. Он будет выделен желтым цветом. Это выделение позволит далее проследить логику работы программы.
5 Будет выполнен оператор Sub, а следующий оператор будет выделен. Если в этом операторе есть проверяемая переменная, определяющая дальнейший ход программы, ее нужно поместить в окно “Watches” (Наблюдения). Это позволит видеть, как изменяется ее значение в ходе выполнения программы.
6 Выделить проверяемую переменную мышью, а затем щелкнуть по кнопке <Quick Watch> (Быстрый просмотр переменных) на панели Debug. На экране появится диалоговое окно, в котором будут содержаться имя переменной, ее значение, тип и назначение.
7 Выбрать в диалоговом окне команду Add. В нижней части экрана появится окно “Watches”, в котором будет отображена выбранная переменная. Аналогично в это окно можно поместить другие переменные, определяющие логику программы.
8 Щелкнуть по кнопке <Step Into> для выполнения следующего оператора и т.д.
Таким образом, в пошаговом режиме выполнения программы, наблюдая значения переменных в окне “Watches”, можно определить реальную логику программы и выявить ее отклонения от нужного алгоритма, т.е. обнаружить ошибку.
2.7.5 Обработка ошибок
Каждая ошибка в VBA имеет свой код. В таблице 12 приведены коды наиболее часто встречаемых ошибок.
Таблица 12 - Основные коды ошибок в VBA
Код ошибки | Сообщение |
Приложение не запущено | |
Переполнение | |
Не хватает памяти | |
Индекс выходит за пределы допустимого диапазона | |
Деление на нуль | |
Несоответствие типа | |
Произошло прерывание, вызванное пользователем | |
Неправильное имя файла или идентификатор | |
Файл не найден | |
Неверный режим работы с файлом | |
Файл уже открыт | |
Ошибка ввода/вывода | |
Переполнение диска | |
Устройство недоступно | |
Диск не готов | |
Повреждена поверхность диска |
Продолжение таблицы 12
Невозможен доступ к системным ресурсам | |
Истек срок действия данного файла. Программе требуется файл более новой версии | |
Ошибка принтера |
Лабораторная работа № 1
Программирование алгоритмов линейной структуры
Цель: приобретение навыков программирования алгоритмов линейной структуры с помощью подпрограммы-функции, вычисляющей значение арифметических выражений. Индивидуальные варианты лабораторной работы № 1 представлены в таблицах 13, 14 (2 часа).
Таблица 13
№ В | Варианты индивидуальных заданий |
Разработать функцию пользователя, вычисляющую значение арифметического выражения в заданных точках | |
; а=0.83, х=1.2 | |
; а=0.12, х=0.36 | |
; a=0.394, b=0.124, x=0.842 | |
; a=0.124, b=1.14, x=2.125 | |
; a=0.343, x=0.834 | |
; a=0.334, x=1.256 |
Продолжение таблицы 13
; x=0.104, a=4.213 | |
; x=0.117, a=2.346 | |
; b=0.2, x=0.114 | |
; x=2.512, a=0.135 | |
; x=2.126, b=2.438, a=0.324 | |
; x=0.834, b=0.242, a=0.125 | |
; a=0.344, x=0.125 | |
; a=2.124, b=0.835, a=0.54 | |
; a=0.344, b=1.124, x=0.455 |
Продолжение таблицы 13
; x=0.345, a=1.242 | |
; x=0.117, a=0.832 | |
; a=0.124, b=0.338, x=0.817 | |
; a=0.274, b=0.392, x=0.736 | |
; b=0.614, a=0.125, x=1.23 |
Таблица № 14
№ В | Варианты индивидуальных заданий |
Разработать экономическую функцию пользователя | |
Рассчитать темп инфляции, если известен индекс цен прошлого года и текущего года т=((ид.т.г-ид.п.г)/ид.т.г)*100 | |
Вычислить доход на акцию по формуле: Y=(D/P)*100 где Y - доход на акцию; D - дивиденд; P - цена приобретения. |
Продолжение таблицы 14
Рассчитать индекс совокупной факторной производительности (SFP), если известны: SFP=UZP/(SP+A+M). SP - фонд зарплаты рабочих и служащих; А - сумма амортизационных отчислений т.г. в неизменных ценах того года, когда было приобретено оборудование; UZP - объем условно-чистой продукции; M - стоимость. | |
Вычислить сумму оборотных средств S=VP/360*(D1-D2) где VP - валовый национальный продукт; D1- прогнозированная длительность оборота; D2- фактическая длительность в днях. | |
Рассчитать прибыль от вложенного в производство капитала за периоды от 1 до 5 лет по формулам: Vp=Vt/(1+r)t; r=d/k*100% где Vp - будущая стоимость сегодняшней суммы денег; Vt - сегодняшняя стоимость будущей суммы денег; r - ставка процента; t - количество лет; k - капитал; d - доход на капитал. | |
Налогооблагаемый оборот фирмы составил: по производству непродовольственных товаров (ставка налога na=20%)-a=1340000 р; выпуску продовольственных товаров (ставка налога nb=10%)-b=460000 р; транспортным услугам (ставка налога nc=16.67%) c=200000 р; общественному питанию (ставка налога nd=9.09%)-d=100000 р. Рассчитать среднюю ставку налога ch=(na*a+nb*b+nc*c+nd*d)/(a+b+c+d)*100 | |
Начислить зарплату рабочему предприятия, используя следующие данные: месячный оклад, количество рабочих дней в феврале месяце и количество отработанных рабочим дней. З=О/Д*Рд где З - зарплата за месяц; О - месячный оклад; Д - рабочие дни в феврале; Рд - количество отработанных дней. |
Продолжение таблицы 14
Коммерческий банк выдал краткосрочный кредит юридическому лицу на сумму 200 млн.р. под 10% годовых. Составить программу, вычисляющую годовую процентную ставку за кредит, если известно, что общее число платежей за год (m) равно 12, общая сумма процента (ch) - 20000000 р., а реальное число сделанных вкладов равно 10. Формула вычисления годовой процентной ставки: apr=2*mch/(p*(n+1)). | |
Рассчитать прибыль фирмы на единицу продукции (p) по формуле: P = c-(a+z1+z2)/b где c - цена единицы продукции; a - амортизационные отчисления; z1 - постоянные затраты; z2 - переменные затраты; b - выпуск продукции; при постоянных затратах 100000. | |
Составить программу для вычисления коэффициента экономической эффективности, используя следующую формулу: K=(S1-S2)/(K1-K2) где S1 и S2 - себестоимость до и после внедрения; K1 и K2 - капитальные вложения до и после внедрения. | |
Рассчитать себестоимость продукции растениеводства, которая вычисляется по формуле: с=t+z+u+s где с - себестоимость продукции; т - транспортные издержки; s - стоимость посадочного материала; z - зарплата рабочим. | |
Вычислить рыночную стоимость облигации по формуле PV = P/EXP(N*LN(1+R)) где Р - государственная стоимость; R - биржевая стоимость. | |
Рассчитать годовую производственную мощность выработки муки мелькомбинатом по формуле: M=MS*B*P/100(тонн/год) где М - годовая мощность; B - выход муки,%; P - годовой рабочий период в днях; MS - суточная мощность: MS=R*H/1000, где R-размер рабочих органов машины; H-техническая норма нагрузки на единицу рабочего органа машины, кг. |
Продолжение таблицы 14
Вычислить уровень инфляции, которая вычисляется по формуле: R=цены текущего периода-цены прошлого периода/цены прошлого периода*100%, если известны: a - цены текущего периода; b - цены прошлого периода; где R-уровень инфляции. | |
Подсчитать скорость обращения денег (v) в кругообороте доходов, которая вычисляется по формуле: V=P*S/M где M=38526000 - предложение денег; P=12865.7 - средняя цена товаров; S=2976 - общий объём товаров. | |
Подсчитать средние общие издержки фирмы, используя формулы: A=F+V, F=T/Q, V=N/Q где А - средние общие издержки фирмы; F - средние постоянные; V - средние переменные; T - сумма постоянных издержек; N - сумма переменных издержек; Q - количество произведенной продукции. | |
Вычислить темп инфляции этого года по формуле: T=(IN-IP)*100/IP где IN - индекс цен этого года=113.6; IP - индекс цен прошедшего года=118.3; Ответ должен быть в процентах. | |
Вычислить показатель ценовой эластичности спроса Ep, используя следующую формулу: Ep=(Q1-Q2)/(P1-P2), где Q1,Q2 - величина спроca (%); P1, P2 - прирост цены (%). |
Продолжение таблицы 14
Рассчитать валовые издержки по формуле: TC=FC+VC где TC - валовые издержки; FC – постоянные издержки; VC - переменные издержки. Рассчитать прибыль фирмы по формуле: P=C-((A+Z1+Z2)/B) где A – амортизация; B – продукция; C – цена; P – прибыль; Z1 - постоянные издержки; Z2 - переменные издержки. | |
Какой доход получит владелец акции, если ее номинальная стоимость составляет 250 р., цена приобретения - 1000 р., а дивиденд - 100 р. Y=(D*100)/P где Y-доход на акцию; D-дивиденд; P-цена приобретения. |
2.8 Условный оператор
Условный оператор VBA позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор – это средство ветвления вычислительного процесса.
В VBA существует 2 типа условного оператора: линейный и блочный.
1 Линейный условный оператор используется для того, чтобы выполнить какой-либо один оператор, если некоторое условие будет истинным.
Синтаксическая конструкция линейного оператора имеет две формы: безальтернативную, альтернативную.
Структура безальтернативного условного оператора (сокращенный вариант):
If <условие> Then <оператор 1>
Структура альтернативного условного оператора (полный вариант):
If <условие> Then <оператор 1> Else <оператор 2>
где
If, Then, Else - зарезервированные слова (если, то, иначе);
<условие> - произвольное выражение логического типа;
<оператор 1>, <оператор 2> - любые операторы языка VBA.
Работа. Вначале вычисляется условное выражение <условие>. Если результат есть True (истина), то выполняется <оператор 1>, а <оператор 2> пропускается. Если результат есть False (ложь), наоборот, <оператор 1> пропускается, а выполняется <оператор 2>.
2 Блочный условный оператор используется в случае истинности условия необходимо выполнить несколько программных операторов (блок операторов). Блочный оператор имеет две формы: безальтернативный, альтернативный.
Структура безальтернативного блочного оператора (сокращенный вариант)
If <условие> Then
<оператор1>
<оператор2>
…………….
<оператор n>
End If
где
End If - указывает на окончание блока оператора If.
Структура альтернативного блочного оператора:
If <условие> Then
<оператор1>
<оператор2>
…………….
<оператор n>
Else
<оператор1>
<оператор2>
…………….
<оператор n>
End If
Пример 1.
Постановка задачи. Создать в стандартном модуле пользовательскую процедуру вычисления уравнения вида ax2 + bx + c = 0.
Технология выполнения задания:
1 Исходные данные:
a, b, c Î R
Результат: х1, х2 Î R.
2 Набрать в стандартном модуле проекта следующую пользовательскую процедуру:
Private Sub yravnenie ()
a = InputBox("a=", a)
b = InputBox("b=", b)
c = InputBox("c=", c)
d = b ^ 2 - 4 * a * c
If d >= 0 Then
x1 = (-b + Sqr(d)) / (2 * a)
x2 = (-b - Sqr(d)) / (2 * a)
MsgBox (x1)
MsgBox (x2)
Else
MsgBox ("Решений нет")
End If
End Sub
3 Вычислить корни квадратного уравнения при произвольных исходных данных.
Альтернативный блочный оператор If применяется в тех случаях, когда при выполнении условия необходимо осуществить один набор программных операторов, а при невыполнении – другой.
Операторы IF могут быть вложенными друг в друга. Такое вложение операторов применяется, если нужно проверить какое-либо условие при другом условии, которое является истинным.
Формат вложенного оператора If:
If <условие1> Then
If <условие2> Then
<оператор1>
<оператор2>
…………….
<оператор n>
Else
<оператор1>
<оператор2>
…………….
<оператор n>
End If
End If
Пример 2.
Постановка задачи. Создать в стандартном модуле пользовательскую функцию нахождения максимального среди трех заданных чисел y1 = a+2*b; y2 = a*b+c; y3 = c2 + 1.
Технология выполнения задания:
1 Исходные данные:
a, b, c Î R
Результат: Max Î R.
2 Набрать в стандартном модуле проекта следующую пользовательскую функцию:
Function Max(a,b,c)
y1 = a+2*b
y2 = a*b+c
y3 = c^2+1
If y1 > y2 Then
If y1 > y3 Then y = y1 Else y = y3
Else
If y2 > y3 Then y = y2 Else y = y3
End If
End Function
3 Вычислить корни квадратного уравнения при произвольных исходных данных.
При использовании вложенных операторов If важно не перепутать варианты сочетания условий. Нужно помнить правило: альтернатива Else считается принадлежащей ближайшему оператору If, не имеющему ветви Else.
В VBA предусмотрена конструкция для работы с несколькими операторами If. Эти операторы применяются в случаях, когда необходимо рассмотреть еще несколько условий в дополнение к исходному. Для этого служит конструкция: If…Then…ElseIf. В отличие от вложенных операторов конструкция с несколькими операторами If позволяет проверить дополнительное условие, если исходное условие принимает значение False.
Формат записи:
If <условие1> Then
<оператор1>
ElseIf <условие2> Then
<оператор2>
Else
<.оператор3>
EndIf
Пример 3.
Постановка задачи. Менеджеру по продажам необходимо разработать функцию, позволяющую рассчитывать комиссионные. Процент комиссионных зависит от объема проданного товара и начисляется по следующему правилу, представленному в таблице 15.
Таблица 15 - Правила расчета комиссионных
Объем продаж за неделю, р. | Комиссионные, % |
От 0 до 9999 | |
От 10000 до 19999 | |
От 20000 до 39999 | |
Более 40000 |
Технология выполнения задания:
1 Исходные данные:
Продажи Î Z.
Результат: Комиссионные Î R.
2 Построить для расчета комиссионных в стандартном модуле пользовательскую функцию:
Function Комиссионные (Продажи)
If Продажи <= 9999 Then
Комиссионные = Продажи * 0.08
ElseIf Продажи <= 19999 Then
Комиссионные = Продажи * 0.1
ElseIf Продажи <= 39999 Then
Комиссионные = Продажи * 0.12
Else
Комиссионные = Продажи * 0.14
End If
End Function
3 Вычислить.
Лабораторная работа № 2
Программирование алгоритмов разветвляющейся структуры
Цель: приобретение навыков программирования алгоритмов разветвляющейся структуры с помощью пользовательской подпрограммы-процедуры, где на определенном этапе производится выбор очередного выполняемого оператора в результате анализа некоторых условий. Индивидуальные варианты лабораторной работы № 2 представлены в таблицах 16, 17 (2 часа)
Дата добавления: 2016-03-22; просмотров: 1312;