Скачать презентацию I N F O R M A T Скачать презентацию I N F O R M A T

L4_VBA_IFCaseForLoopGoTo.pptx

  • Количество слайдов: 75

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Page: 1 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Тема 5 Основы офисного программирования Page: 2 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Основы офисного программирования 1. Основные конструкции алгоритмов и их отображение при помощи графических схем. 2. Программирование разветвляющихся процессов в VBA. 3. Программирование циклических процессов в VBA. 4. Ввод-вывод данных в процедуру с использованием диалоговых окон. Литература: 1. Інформатика: Комп’ютерна техніка. Комп’ютерні технології. Підручник / За ред. О. І. Пушкаря. – К. : Видавничий центр "Академія ", 2003, с. 208 – 235. Page: 3 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Основы алгоритмизации Для написания даже самых простых процедур, необходимо знать общие правила их построения, т. е. основы алгоритмизации Определение: Алгоритм – это конечная последовательность четко определенных действий, которые должен выполнить исполнитель для достижения цели. Таким образом, алгоритм состоит из конечного числа отдельных шагов, а каждый шаг представляет собой завершенное действие. Page: 4 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Свойства алгоритма Из определения алгоритма следуют его свойства: § Дискретность (прерывность, раздельность) – разбиение алгоритма на шаги; § Детерминированность (однозначность толкования) – каждый шаг алгоритма должен быть абсолютно понятен исполнителю и следовать в определенном порядке; § Результативность - получение результата за конечное число шагов; § Массовость – использование алгоритма для решения множества однотипных задач. Page: 5 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Способы представления алгоритмов Для успешной реализации алгоритма необходимо чтобы исполнитель (компьютер) получил понятные и однозначные инструкции – программу, написанную на языке программирования. 1. Программа (или процедура ) – это и есть представление алгоритма, «понятное» для исполнения компьютером, а каждая строка программы (процедуры) – это отдельная инструкция (шаг алгоритма); Однако, для человека более удобным и наглядным может быть: 2. Словесное описание алгоритма; 3. Графическое представление; 4. Математическая модель задачи, т. е. последовательная запись математических выражений (формул), используемых для решения задачи. Page: 6 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Способы представления алгоритмов Схема алгоритма – графическое изображение его структуры, в котором каждый этап процесса преобразования данных представлен в виде определённой геометрической фигуры (символа). Эти фигуры объединены между собой линиями потока, указывающими для каждого этапа возможные последствия действий. В середине фигуры приводится описание этапа. Символам присваивают порядковые номера, которые проставляют слева вверху в разрыве линии контура. Линии потока строят параллельно линиям внешней рамки схемы. Направление линий потока сверху вниз и слева направо принято за основное и, если они не имеют изломов, то стрелками их можно не обозначать. В других случаях их направление обязательно обозначается стрелкой. Линию потока, ка правило, подводят к середине символа. Page: 7 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Основные типы блоков, используемые в схемах алгоритмов Графическое представление (или блок-схема) алгоритма дает наиболее наглядное представление о последовательности выполняемых действий. Каждый блок (элемент) схемы соответствует определенному действию и отдельному шагу алгоритма. Наименование символа Графическое изображение Назначение элемента Ввод – вывод Преобразование данных в форму, пригодную для обработки (ввод) или отображение результатов обработки (вывод) Процесс Выполнение операции или группы операций, в результате которых изменяется значение, форма представления или расположение данных Page: 8 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Основные типы блоков, используемые в схемах алгоритмов Наименование символа Графическое изображение Решение Назначение элемента Выбор направления выполнения алгоритма или программы в зависимости от некоторых переменных условий Границы цикла ` Пуск/останов Отображение начала и конца цикла Начало, конец, прерывание процесса обработки данных или выполнения программы Page: 9 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Основные типы блоков, используемые в схемах алгоритмов Наименование символа Графическое изображение Соединители Назначение элемента Внутри страничный Межстраничный Линии потока Указание последовательности связей между элементами Размер а выбирается из ряда 10, 15, 20 мм. Допускается увеличение размера а на число, кратное 5. Размер b = 1, 5 а. Page: 10 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Основные типы блоков, используемые в схемах алгоритмов Общими правилами проектировании графических (визуальных) алгоритмов являются следующие: § В начале алгоритма должны быть блоки ввода значений входных данных. § После ввода значений входных данных могут следовать блоки обработки и блоки условия. § В конце алгоритма должны располагаться блоки вывода значений выходных данных. § В алгоритме должен быть только один блок начала и один блок окончания. § Связи между блоками указываются направленными или ненаправленными линиями. Page: 11 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Виды управляющих структур Любой алгоритм можно реализовать при помощи трех управляющих конструкций: линейной, разветвляющейся и циклической. Линейная Разветвляющаяся Циклическая Page: 12 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Основные типы блоков, используемые в схемах алгоритмов Каждый вид управляющей структуры реализуется при помощи соответствующих операторов, предназначенных для управления последовательностью выполнения строк кода программы. В линейный процессах (структурах) все инструкции кода выполняются строго последовательно друг за другом. Разветвляющийся процесс (ветвление по условию) – такой, в котором исполняется лишь часть операторов в зависимости от истинности проверяемого условия. Циклический процесс – такой, в котором некоторые операторы выполняются многократно. Page: 13 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Пример реализации линейного алгоритма Page: 14 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Разветвляющийся алгоритм решения задачи Каждая управляющая структура ветвления имеет один вход и один выход. Ветвления содержат блок условия, в котором записывают логические условия. Нет Да Условие Группа операторов 1 Группа операторов 2 Page: 15 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование разветвляющихся процессов в VBA Операторы, выполняющие роль ветвления программы на основании какого-либо условия, называются операторами условного перехода. Операторы условного перехода одни из самых важных и часто используемых элементов в языках программирования. Общий принцип их работы прост: проверяется соответствие каким-то условиям (истинность или ложность каких-либо выражений) и в зависимости от этого выполнение программы направляется по одной или другой ветви. В VBA для реализации разветвляющего процесса используются два вида оператора условного перехода: If… Then. . . Else и Select Case. Page: 16 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование разветвляющихся процессов в VBA Каждый вид управляющей структуры реализуется при помощи соответствующих операторов, предназначенных для управления последовательностью выполнения строк кода программы. Если в результате выполнения программы, процесс вычисления может пройти только по одному из нескольких (в общем случае многих) альтернативных путей, то такой вычислительный процесс называется разветвляющимся. Разветвляющийся процесс (ветвление по условию) – процесс, в котором исполняется лишь часть операторов в зависимости от истинности (ложности) проверяемого условия. Page: 17 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование разветвляющихся процессов в VBA Конструкция If… Then чаще остальных используется для группирования инструкций VBA. Эта популярная конструкция наделяет приложения способностью принимать решения. Такая способность является ключевой при создании эффективных программ. Удачное приложение Excel, по сути, сводится к принятию правильного решения и выполнению соответствующих действий. Существует 3 способа записи (синтаксиса) оператора If Page: 18 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF 1. Простая однострочная форма If условие Then оператор(ы)_1 [Else оператор(ы)_2] Блок-схема алгоритма строчного оператора If Слову «Да» в схеме соответствует ключевое слово Then в операторе, а слову «Нет» - Else. Page: 19 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Логические операторы и операторы сравнения Знак = <> < > <= >= Значение Знак Значение Равно Not Логическое отрицание Не равно And Логическое И Меньше Or Логическое ИЛИ Больше Xor Логическое исключение Меньше или равно Eqv Логическая равнозначность Больше или равно Imp Импликация Is Является Like Подобно Page: 20 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Конструкция If … Then используется для выполнения одного или более операторов при справедливости заданного условия. Оператор Else необязателен. Он позволяет выполнять одну или более инструкций в случае несправедливости условия. Page: 21 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF txt. Price txt Quantity cmd 1 txt. Cost Page: 22 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Option Explicit Dim Price As Currency Dim Quantity As Integer Dim Cost As Currency Private Sub cmd 1_Click() Price = CCur(txt. Price) Quantity = CInt(txt. Quantity) Cost= Price * Quantity txt. Cost = Format(Cost, "0. 00 грн. ") End Sub Page: 23 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Если в поля не введены данные, то при нажатии кнопки возникает ошибка в выполнении программы! Необходимо организовать проверку ввода данных Page: 24 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF If txt. Price. Value = Empty Then Exit Sub If txt. Quantity. Value = Empty Then Exit Sub If txt. Price. Value = Empty Or txt. Quantity. Value = Empty Then Exit Sub Page: 25 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Option Explicit Dim Price As Currency Dim Quantity As Integer Dim Cost As Currency Private Sub cmd 1_Click() If txt. Price. Value = Empty Or txt. Quantity. Value = Empty Then Exit Sub Price = CCur(txt. Price) Quantity = CInt(txt. Quantity) Cost = Price * Quantity txt. Cost = Format(Cost, "0. 00 грн. ") End Sub Page: 26 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF 2. Если на каждой ветви разветвляющегося вычислительного процесса необходимо выполнить несколько действий, то используют блочную форму If <лог_выражение> Then <оператор1> <оператор2> … <оператор. N> Else <оператор. N+1> <оператор. N+2> … <оператор. NN> End If Page: 27 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Алгоритм, реализующий блочную запись оператора IF Начало Нет Да Условие Группа операторов 2 Группа операторов 1 Конец Page: 28 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Private Sub cmd 1_Click() If txt. Price. Value = Empty Or txt. Quantity. Value = Empty Then Exit Sub Price = CCur(txt. Price) Quantity = CInt(txt. Quantity) If Quantity>=10 Then Cost = Price * Quantity * 0. 95 Else Cost = Price * Quantity End If txt. Cost = Format(Cost, "0. 00 грн. ") End Sub Page: 29 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF 3. Вложенный разветвляющийся процесс If <условие 1> Then <блок операторов 1> Elseif <условие 2> Then <блок операторов 2> . . . Else <блок операторов N> End If Page: 30 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Private Sub cmd 1_Click() If txt. Price. Value = Empty Or txt. Quantity. Value = Empty Then Exit Sub Price = CCur(txt. Price) Quantity = CInt(txt. Quantity) If Quantity>=20 Then Cost = Price * Quantity * 0. 9 Elseif Quantity>=10 Then Cost = Price * Quantity * 0. 95 Else Cost = Price * Quantity End If txt. Cost = Format(Cost, "0. 00 грн. ") End Sub Page: 31 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Пример использование вложенные конструкции If … Then … Else (без Elself). Данная процедура также эффективна, и ее легко понять. Обратите внимание, что для каждого оператора If существует свой оператор End If. Sub Greet. Me 6() If Time < 0. 5 Then Msg. Box "Доброе утро" Else If Time >= 0. 5 And Time < 0. 75 Then Msg. Box "Добрый день" Else If Time >= 0. 75 Then Msg. Box "Добрый вечер" End If End Sub Page: 32 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Структура оператора IF Процедура запрашивает у пользователя значение переменной Quantity и отображает скидку на основе полученного значения. Если в окне Input. Box пользователь щелкнет на кнопке Отмена, то переменная Quantity приравняется к пустой строке, в результате чего процедура будет завершена. Следует отметить, что эта процедура не выполняет других проверок (например, мы не проверяем в данном случае введенное числовое значение на отрицательность). Sub Discount 1() Dim Quantity As Variant Dim Discount As Double Quantity = Input. Box ( "Введите значение: ") If Quantity = " " Then Exit Sub If Quantity >= 0 Then Discount = 0. 1 If Quantity >= 25 Then Discount = 0. 15 If Quantity >= 50 Then Discount = 0. 2 If Quantity >= 75 Then Discount = 0. 25 Msg. Box "Скидка: " & Discount End Sub Page: 33 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Оператор множественного выбора Case Оператор выбора Select Case сопоставляет значение заданного выражения с заранее предусмотренными вариантами Select Case <анализируемое выражение> Case <значение 1> <группа операторов> Case <значение 2> <группа операторов>. . . Case <значение N> <группа операторов> Case Else <группа операторов> End Select Page: 34 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Оператор множественного выбора Case Работает инструкция Select Case следующим образом: 1. В начале вычисляется значение <Выражения>, и затем результат этого вычисления сопоставляется с каждым из выражений, хранящихся в каждом <Значении>. 2. Если значения <Выражения> удовлетворяет <Значению> для одного из разделов Case, <Инструкции> (группа операторов) этого раздела выполняются. 3. Если <Выражение> соответствует более, чем одному разделу Case, выполняются инструкции только первого из них. 4. После выполнения <Инструкций> выбранного раздела Case выполняется следующая за ключевыми словами End Select <Инструкция>. 5. Если значения <Выражения> не удовлетворяет <Значению> ни для одного из разделов Case, выполняются инструкции <Инструкции> Else. Page: 35 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Оператор множественного выбора Case Элемент <значение> можно задать 3 способами: 1. В виде конкретного значения для проверки на совпадение 2. Как интервал значений Например, Case 1 To 5 представляет интервал значений для проверки попадания в диапазон (в примере от 1 дo 5) 3. С использованием конструкции Is <логический оператор> <значение> Например, Is > 32 Структуры Select Case можно вкладывать друг в друга. Page: 36 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Оператор множественного выбора Case Private Sub cmd 1_Click() Price = CCur(txt. Price) Quantity = CInt(txt. Quantity) Select Case Quantity Case 1 To 9 Cost = Price * Quantity Case 10 To 19 Cost = Price * Quantity * 0. 95 Case Is >= 20 Cost = Price * Quantity * 0. 9 End Select txt. Cost = Format(Cost, "0. 00 грн. ") End Sub Page: 37 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Для многоразового использования одного или нескольких операторов предназначены циклы. Цикл – часть программы, которая будет исполнена несколько раз подряд. Различают три вида циклов ü цикл с предусловием ü цикл с постусловием ü цикл с параметром Первые два вида циклов используются тогда, когда заранее неизвестно сколько будет повторений. Page: 38 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Циклический алгоритм решения задачи Цикл с предусловием Цикл с постусловием Page: 39 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Циклический алгоритм решения задачи Цикл с параметрами строится на основе циклов первого или второго типов. Чаще всего это циклы с предусловием. Цикл с параметром Page: 40 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Циклический алгоритм решения задачи Цикл называется детерминированным, если число повторений тела цикла заранее известно или определено. В VBA цикл For. . . Next дает возможность устанавливать количество проходов цикла Цикл называется итерационным, если число повторений тела цикла заранее неизвестно, а зависит от значений параметров (некоторых переменных), участвующих в вычислениях. В VBA цикл Do. . . Loop завершается при выполнении заданного условия Page: 41 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Циклический алгоритм решения задачи При организации циклических вычислительных процессов часто возникает необходимость перебирать значения не одной, а нескольких переменных (параметров циклов). В этом случае выделяются внутренние и внешние циклы. Для каждого изменения параметра во внешнем цикле происходит многоразовое исполнение действия во внутреннем цикле, который называется вложенным. Количество вложенных циклов не ограничивается. Page: 42 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Циклический алгоритм решения задачи Внутренние и внешние циклы Page: 43 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Оператор цикла For. . . Next Этот цикл используют в том случае, когда заранее известно стартовое и конечное значение счётчика. Синтаксис выглядит следующим образом: For счётчик_цикла = нач_значение To кон_значение [Step шаг] [операторы тела цикла] [Exit For] [операторы тела цикла] Next [счётчик_цикла] Page: 44 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA По умолчанию VBA каждый раз после завершения инструкций из цикла увеличивает значение переменной счётчик_цикла на 1. Другое значение увеличения можно задать с помощью необязательного ключевого слова Step. После него необходимо указать величину (шаг, на которую надо увеличить значение счётчик_цикла). Операторы тела цикла представляет одну или несколько инструкций VBA (или вообще ни одной из них). Они составляют тело цикла, и каждая из них выполняется всякий раз, когда выполняется сам цикл. Page: 45 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Ключевое слово Next сигнализируют VBA, что достигнут конец тела цикла. Затем значение переменной счётчик_цикла увеличивается на величину переменной шага, если есть ключевое слово Step. Если этого слова нет, то значение шага увеличивается на 1. Происходит переход на начало цикла, а затем текущее значение счётчик_цикла сравнивается со значением, представленным кон_значение. Если значение счётчик_цикла будет меньше или равен кон_значение, то цикл выполнится снова. Если значение счётчик_цикла больше, чем кон_значение, то выполнение продолжается с первой инструкции, которая находится после ключевого слова Next. Page: 46 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Роль счётчика цикла может играть только ранее объявленная переменная целого типа. При первом выполнения цикла значение счетчика устанавливается равным начальному значению. При каждом проходе переменная счетчика увеличивается на 1 или на величину шага. Если она равна или больше (меньше, при отрицательном шаге) конечного значения, то цикл завершается и выполняются следующие операторы. Разница между начальным и конечным значениями, разделенная на величину шага определяет количество проходов. Exit For – данный оператор обеспечивает немедленный выход с цикла, до его окончания. Page: 47 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Пример цикла For-Next, в котором не используется значение шага переменной Step и необязательный оператор Exit For. Эта процедура выполняет оператор Sum = Sum + Sqr (Count) 100 раз и отображает результат— сумму квадратных корней первых 100 целых чисел. Sub Sum. Square. Roots() Dim Sum As Double Dim Count As Integer Sum = 0 For Count = 1 To 100 Sum = Sum + Sqr(Count) Next Count Msg. Box Sum End Sub В данном примере Count (переменная-счетчик цикла) имеет начальное значение 1 и увеличивается на 1 при каждом повторении цикла. Переменная Sum суммирует квадратные корни каждого значения Count. Page: 48 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Можно также указать значение шаг для переменной Step, чтобы пропустить отдельные итерации цикла. Ниже рассмотрена исходная процедура, переписанная так, что суммируются квадратные корни всех нечетных чисел в диапазоне от 1 до 100. Sub Sum. Odd. Square. Roots() Dim Sum As Double Dim Count As Integer Sum = 0 For Count = 1 To 100 Step 2 Sum = Sum + Sqr(Count) Next Count Msg. Box Sum End Sub В этой процедуре исходное значение Count равно 1, затем счетчик принимает значения 3, 5, 7 и т. д. Последнее значение Count, используемое в цикле, равно 99. Когда цикл заканчивается, значение Count равно 101. Page: 49 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Значение переменной Step в цикле For… Next может быть также отрицательным. Приведенная ниже процедура удаляет строки 2, 4, 6, 8 и 10 в активном листе. Sub Delete. Rows() Dim Row. Num As Long For Row. Num = 10 To 2 Step -2 Rows(Row. Num). Delete Next Row. Num End Sub На первый взгляд, вызывает удивление использование отрицательного значения переменной Step в процедуре Delete. Rows. Если же использовать положительные значения переменной Step, то будут удалены не те строки. Это связано с тем, что строки, находящиеся под удаленными строками, получают новые номера. Например, если удалена 2 -я строка, 3 -я строка получает номер 2. Эту проблему можно устранить путем использования отрицательных значений переменной Step. Page: 50 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Можно помещать в цикл любое количество операторов и даже вкладывать циклы For-Next в другие циклы For-Next. Ниже приведен пример, в котором применены вложенные циклы For-Next для инициализации массива 10 x 10 значением -1. По завершении выполнения процедуры все 1000 элементов массива Му. Аггау будут содержать значение -1. Sub Nested. Loops() Dim Му. Аггау(1 to 10, 1 to 10) Dim i As Integer , j As Integer , k As Integer For i = 1 To 10 For j = 1 To 10 For k = 1 To 10 My. Array(i, j , k) = -1 Next k Next j Next i End Sub Page: 51 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Цикл While(Until) предназначен для ситуаций, когда количество проходов цикла заранее не известно, но зато известно условие выхода из цикла. В условном цикле при каждом повторении проверяется выполнение условия, и решение про дальнейшие действия принимается в зависимости от результатов проверки. Проверка условия может осуществляться как до действий, определенных в теле цикла, так и после их. В Visual Basic есть две модификации условного цикла цикл с верхним окончанием (с предусловием); цикл с нижним окончанием (с постусловием). Page: 52 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA В цикле используется одно из ключевых слов: или While (Пока), или Until (До). While – повторение в цикле продолжаются до того, пока условие удовлетворяется, после чего происходит выход с цикла. Until – повторение в цикле продолжаются до выполнения условия, после чего происходит выход с цикла. Exit Do – данный оператор обеспечивает немедленный выход с цикла, до его окончания. Page: 53 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Цикл с предусловием – условие проверяется до выполнения операторов тела цикла. Синтаксис цикла: Do [{While | Until} условие] [операторы тела цикла] [Exit Do] [операторы тела цикла] Loop Цикл с постусловием – условие проверяется после выполнения операторов тела цикла. Синтаксис цикла: Do [операторы тела цикла] [Exit Do] [операторы тела цикла] Loop [{While | Until} условие] Page: 54 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Цикл Do While может иметь один из двух синтаксисов. Do [While условие] [инструкции] [Exit Do] [инструкции] Loop или Do [инструкции] [Exit Do] [инструкции] Loop [While условие] VBA позволяет проверять условие While в начале или в конце цикла. Разница между этими двумя синтаксисами связана с моментом, когда оценивается условие. В первом синтаксисе содержимое цикла может вообще не выполняться. Во втором содержимое цикла всегда выполняется (как минимум один раз). Page: 55 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA В примере демонстрируется цикл Do While, в котором реализована проверка условия вначале цикла: процедура Enter. Dates 1 вводит даты текущего месяца в столбец рабочего листа, начиная с активной ячейки. Sub Enter. Dates 1() ' цикл Do While , условие проверяется в начале Dim The. Date As Date The. Date = Date Serial(Year (Date) , Month(Date), 1) Do While Month(The. Date) = Month(Date) Active Cell = The. Date + 1 Active. Cell. Offset(1, 0). Activate Loop End Sub Page: 56 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA В этой процедуре используется переменная The. Date, которая хранит даты, записанные в рабочем листе. Для инициализации переменной используется первый день текущего месяца. В процессе выполнения цикла значение переменной The. Date было введено в активную ячейку, затем это значение было увеличено на единицу, после чего активизируется следующая ячейка. Цикл выполняется до тех пор, пока значение месяца, присвоенное переменной The. Date, совпадет со значением месяца текущей даты. Циклы Do While также могут включать один или более операторов Exit Do. По достижении оператора Exit Do цикл завершается, а управление передается оператору, следующему за оператором Loop. Page: 57 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Результат выполнения следующей процедуры будет таким же, что и результат выполнения процедуры Enter. Dates 1, но в данном случае используется вторая форма синтаксиса цикла Do While, предусматривающая проверку условия в конце цикла. Sub Enter. Dates 2() ' цикл Do While , условие проверяется в конце Dim The. Date As Date The. Date = Date. Serial(Year (Date) , Month(Date ), 1) Do Active. Cell = The. Date + 1 Active. Cell. Offset(1, 0). Activate Loop While Month(The. Date) = Month(Date) End Sub Page: 58 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA В цикле Do Until цикл выполняется, пока условие не станет выполняться. Структура Do Until может быть представлена двумя вариантами синтаксиса. Do [Until условие] [инструкции] [Exit Do] [инструкции] Loop или Do [инструкции] [Exit Do] [инструкции] Loop [Until условие] Page: 59 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Sub Enter. Dates 3() ‘ Цикл Do Until, проверка условия в начале Dim The. Date As Date The. Date = Date. Serial(Year (Date) , Month (Date), 1) Do Until Month(The. Date) <> Month(Date) Active. Cell = The. Date + 1 Active. Cell. Offset(1, 0 ). Activate Loop End Sub Enter. Dates 4() ‘ Цикл Do Until, проверка условия в конце Dim The. Date As Date The. Date = Date. Serial(Year (Date) , Month (Date), 1) Do Active. Cell = The. Date + 1 Active. Cell. Offset (1, 0 ). Activate Loop Until Month(The. Date) <> Month(Date) End Sub Page: 60 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Оператор безусловного перехода Go. To Оператор безусловного перехода всегда изменяет порядок выполнения операторов в процедуре или функции. При этом не проверяется никаких условий. Он перенаправляет ход выполнения программы на новую инструкцию, которая помечена специальным образом (текстовая строка, заканчивающаяся двоеточием, или число, заканчивающееся пробелом, указанные перед инструкцией). Процедуры VBA могут содержать любое количество меток, а оператор Go. To не определяет переход за пределы процедуры. Page: 61 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA Синтаксис: Go. To line – любая допустимая метка или номер строки в той же процедуре или функции, которая содержит оператор Go. To. line … Go. To line … ' это метка на которую нужно перейти ' переход на метку line При выполнении оператора Go. To управление выполнения программы немедленно передается оператору в строке, определенной с помощью метки line. Page: 62 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Программирование циклических процессов в VBA В приведенной ниже процедуре применена функция VBA Input. Box для получения имени пользователя. Если имя пользователя отличается от Саша, то процедура переходит к метке Wrong. Name, на чем заканчивает свою работу. В противном случае процедура выполняет дополнительные операции. Оператор Exit. Sub заканчивает выполнение процедуры. Sub Go. To. Demo() User. Name = Input. Box( "Введите свое имя: ") If User. Name <> «Саша" Then Go. To Wrong. Name Msg. Box ("Привет, Саша. . . " ) ‘ [Здесь вводится дополнительный код] Exit Sub Wrong. Name: Msg. Box "Извините, эту процедуру может запускать только Саша. " End Sub Page: 63 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Ввод-вывод данных в процедуру с использованием диалоговых окон В проектах VBA диалог с пользователем можно организовать не только с помощью текстовых полей на форме (Text. Box), но и с помощью стандартных диалоговых окон Input. Box и Msg. Box. Функция Input. Box используется для ввода небольших фрагментов текста. Page: 64 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Ввод исходных данных Окно Input. Box состоит из четырех элементов: • строка заголовка; • приглашение к вводу (Prompt); • поле ввода со значением, предлагаемым по умолчанию; • две кнопки (ОК и Cancel). Заголовок (title) Пояснительная надпись (prompt) Управляющие кнопки поле для ввода данных (default – значение по умолчанию) Page: 65 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Ввод исходных данных В коде программы окно Input. Box описывается как метод объекта Application, с аргументами: Input. Box("сообщение"[, "заголовок"] [, "данные по умолчанию"] [, x_позиция] [, y_позиция]) сообщение – определяет текст, отображающийся в диалоговом окне как приглашение, заголовок – отвечает за надпись заголовка; если этот параметр не указан, то отображаться название приложения, данные по умолчанию – определяет значение по умолчанию, отображаемое в строке ввода, параметры x_позиция и y_позиция указывают координаты верхнего левого угол окна. По умолчанию окно отображается посредине экрана. Функция Input. Box возвращает строку, введенную пользователем. При нажатии кнопки Cancel возвращается пустая строка. Page: 66 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Ввод исходных данных Input. Box("Введите величину скидки", ”Скидка", 0. 2, type: =1) Аргумент type определяет, в какой тип будут преобразованы вводимые данные. Например: 1 разрешает ввод чисел, 2 – текста, 4 – логических значений. Page: 67 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Ввод исходных данных Option Explicit Dim Price As Currency Dim Quantity As Integer Dim Cost As Currency Dim Discount As Single Private Sub cmd 1_Click() Price = CCur(txt. Price) Quantity = CInt(txt. Quantity) If Quantity >= 10 Then Discount = CSng(Input. Box("Введите величину скидки", "Скидка")) Cost = Price * (1 - Discount) * Quantity Else Cost = Price * Quantity End If txt. Cost = Format(Cost, "0. 00 грн. ") End Sub Page: 68 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Ввод исходных данных При выполнении команды Run на активном листе рабочей книги появляется окно Inputbox Page: 69 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Предупреждение ошибок Если в окне Inputbox нажата кнопка Cancel, то в процедуру передается логическое значение False. Чтобы при этом не возникало ошибки необходимо обеспечить выход из процедуры: If Discount = False Then Exit Sub Page: 70 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Вывод результатов Вывод результата можно осуществить в окно Msg. Box title prompt Msg. Box(promt [, buttons] [, title]) Msg. Box("Стоимость покупки" & CStr(Cost) & " грн", , "Стоимость") Page: 71 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Вывод результатов Наиболее часто используемые константы аргумента buttons: Константа Значение Описание vb. OKOnly 0 Только кнопка OK vb. OKCancel 1 Кнопки OK и Отмена vb. Abort. Retry. Ignore 2 Кнопки Стоп, Повторить и Пропустить vb. Yes. No. Cancel 3 Кнопки Да, Нет и Отменить vb. Yes. No 4 Кнопки Да и Нет vb. Retry. Cancel 5 Кнопки Повторить и Отменить vb. Critical 16 Иконка критического сообщения vb. Question 32 Иконка предостерегающего вопроса vb. Exclamation 48 Иконка предостерегающего сообщения vb. Information 64 Иконка информационного сообщения Page: 72 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Вывод результатов Option Explicit Dim Price As Currency Dim Quantity As Integer Dim Cost As Currency Private Sub cmd 1_Click() Price = CCur(txt. Price) Quantity = CInt(txt. Quantity) Cost = Price * Quantity Msg. Box(“Стоимость покупки : ” & CStr(Cost) & “ грн. ”, , “Стоимость“) End Sub Page: 73 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T Вывод результатов В окне Msg. Box при нажатии кнопки OK в процедуру передается константа vb. OK (которая имеет значение 1). Чтобы при этом не возникало ошибки необходимо обеспечить выход из процедуры: If Результат = vb. OK Then Exit Sub Page: 74 Page:

I N F O R M A T I O N S Y S I N F O R M A T I O N S Y S T E M D E V E L O P M E N T ВОПРОСЫ ? Задание на самостоятельную подготовку: § 1. Інформатика: Комп’ютерна техніка. Комп’ютерні технології. Підручник / За ред. О. І. Пушкаря. – К. : Видавничий центр "Академія ", 2003, с. 208 – 235. § 2. Материалы лекции № 3, 4. § 3. Подготовка к контрольной. Page: 75 Page: