Этап. Разработка пользовательского интерфейса 3 страница

Операнд1 [операция Операнд2 [операция Выражение]]

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

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

Каждая операция имеет свой приоритет (ранг), как показано в таблице 7. Операции ранга 1 имеют наивысший приоритет и в программном операторе выполняется первым. Операции одного ранга в выражениях выполняются в соответствии с правилами ассоциативности (слева направо или наоборот).

 

Таблица 7 - Приоритеты операций

Приоритет Операция
Выражение, заключенное в скобки ()
Вызов функции
Степень (^)
- (смена знака)
(*) и (/)
(\) деление нацело
Mod (остаток от деления нацело)
(+) и (-)
>, <, >=, <=, <>, =
Not
And
Or

 

Операнды связаны между собой знаками операций

В программах на VBA можно использовать стандартный набор операций над данными. Различают следующие типы операций:

- операция присваивания;

- математические, выполняются над числами и их результатом являются числа;

- отношения, применяются не только к числам, и их результатом являются логические значения;

- логические операции;

- строковые операции.

2.6.1 Операция присваивания

 

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

Назначает результат вычисления выражения переменной, константе или свойству объекта. Операция присваивания всегда включает знак равенства =.

Синтаксис:

Имя_Переменной = Выражение

где

Имя_Переменной – имя переменной (идентификатор);

Символ «=» – знак операции присваивания;

выражение – значение (число), комбинация переменных, констант,

функций, связанных знаками операций.

Работа операции присваивания.

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

Пример 1.

x = 2

x = x + 2

(переменной х будет присвоено 4)

Для присваивания переменной ссылки на объект применяется инструкция Set.

В общем случае инструкция Set имеет следующий синтаксис:

Set objectvar = [New] objectexpression [Nothing]

где

New – ключевое слово, которое используется при создании нового экземпляра объекта;

Nothing – позволяет освободить все системные ресурсы и ресурсы памяти, выделенные для объекта, на который имелась ссылка (т.е. она удаляет объект из памяти).

Пример 2.

Dim A as Object

Set A = cmdOK

MsgBox А.Caption

Инструкция Set присваивает переменной А элемент управления Кнопка с именем cmdOK и далее выводит в окне надпись отображаемую на поверхности кнопки.

 

2.6.2 Математические операции

 

Математические операции применяются для записи формул.

Формула представляет собой программный оператор, содержащий числа, переменные, операторы и ключевые слова или же комбинацию этих элементов и вычисляющий новое значение. Список математических операций VBA и их рангов приведен в таблице 8.

Операции сложения, вычитания, умножения и деления называют основными математическими операциями и пояснений не требуют.

Остальные математические операции называются дополнительными. Они применяются в специальных математических формулах и при обработке текстовой информации.

 

Таблица 8 - Математические операции

Операция Математическое действие
[Операнд1] + [Операнд 2] Сложение
[Операнд 1] – [Операнд 2] Вычитание
-[ Операнд 1] Изменение знака числа
[Операнд 1] * [Операнд 2] Умножение
[Операнд 1] / [Операнд 2] Деление
[Операнд 1] \ [Операнд 2] Целочисленное деление
[Операнд 1] mod [Операнд 2] Остаток от деления по модулю
[Операнд 1] ^ [Операнд 2] Возведение в степень

 

Rezult = 10\3 – результат 3 (целая часть от деления);

Rezult = 10 mod 3 – результат 1 (остаток от деления);

Rezult = 9 ^ 0.5 – результат 34

Rezult = 2 ^ -2 – результат 0.25

Общие правила применения математических операций:

Синтаксис:

Rezult = Операнд1 Операция Операнд2 … Операция ОперандN

где

Rezult – переменная, содержащая результат выполнения оператора;

Операнд1, Операнд2, …, ОперандN – переменные, константы, числовые значения, функции.

 

2.6.3 Операции отношения

 

В отличие от математических операций, результатом выполнения которых может быть любое значение, операция отношения может иметь только два результирующих значения – True (Истина) и False (Ложь), которые могут быть присвоены переменным типа Boolean или определенному свойству объекта. Перечень операций отношения в VBA приведен в таблице 9.

 

 

Таблица 9 - Операции отношений в VBA

Операция Описание
выражение1 > выражение2 Больше. Результат - True, если первый операнд больше второго
выражение1 >= выражение2 Больше или равно. Результат - True, если первый операнд больше или равен второму
выражение1 < выражение2 Меньше. Результат - True, если первый операнд меньше второго
выражение1 <= выражение2 Меньше или равно. Результат - True, если первый операнд меньше или равен второму
выражение1 <> выражение2 Не равно. Результат - True, если первый операнд не равен второму
выражение1 = выражение2 Равно. Результат - True, если первый операнд равен второму

 

Операции отношения применяются для записи выражений условия, результатом выполнения которых являются значения True (Истина) или False (Ложь). Примеры использования операций отношения приведены в таблице 10.

 

Таблица 10 - Операции отношения

Выражение условия Результат
25 <> 30 True (25 не равно 30)
25 < 30 True (25 меньше 30)
25 > 30 False (25 не больше 30)
TextBox1.Text = «Петров» True, если слово Петров является содержимым первого текстового поля, а в противном случае - False
Number >= 100 True, если переменная Number содержит значение не меньше 100, в противном случае False

 

2.6.4 Логические операции

 

Логические операции применяются в логических выражениях. Если существует несколько условий выбора в операциях отношения, то эти операции связываются между собой логическими операциями. Логические операции VBA приведены в таблице 11.

 

Таблица 11 - Логические операции VBA

Операция Описание
(Операнд1) AND (Операнд 2) Логическое умножение. Возвращает True тогда, когда только оба операнда возвращают True
(Операнд 1) OR (Операнд 2) Логическое сложение. Возвращает True тогда, когда хотя бы один операнд возвращает True

Продолжение таблицы 11

Not [Операнд] Если условие имеет значение True, то результирующим значением будет False. Если условие имеет значение False, то результирующее значение будет True
[Операнд1] Xor [Операнд2] Если только одно из связываемых условий имеет значение True, то результирующее значение также будет True. Если оба условия имеют одинаковые значения, то результирующее значение будет False

 

2.6.5 Строковые операции

 

В VBA есть только одна операция для работы со строками – это операция конкатенации. Конкатенация позволяет объединить значения двух или нескольких строковых переменных или строковых констант. Знаком операции конкатенации является символ амперсанд (&). При конкатенации строк значение второй строки добавляется в конец первой. Результатом операции является более длинная строка, составленная из исходных строк.

Синтаксис:

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