Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка СППО.DOC
Скачиваний:
5
Добавлен:
15.07.2019
Размер:
12.41 Mб
Скачать

Ввод данных. Логика условных операторов. Циклические вычисления

Цель работы: изучение способов управления потоками вы-полнения программ; приобретение навыков работы с операторами If, Select Case, For, Do.

1 Теоретические сведения

1.1 Создание процедур

Создание процедуры требует выполнения двух последовательных шагов: сначала надо вставить модуль в рабочую книгу, а затем в модуле написать процедуру:

1) открыть новую рабочую книгу;

2) выполнить команду Сервис → Макрос → Редактор VB;

3) в левой части окна редактора VB вы видите окно проектов. Откройте проект VBAProject (Книга 1) – Эта книга . В контекстном меню выберите команду InsertModule (Вставка → Модуль). В приложение будет добавлен модуль;

4) InsertProcedure (Вставка → Процедура). В диалоговом окне Add Procedure (Добавить процедуру) введите имя процедуры. В секции Type (Тип) установите переключатель Sub (Подпрограмма) ;

5) в пустой строке находится текстовый курсор, предлагая начать ввод кода процедуры.

После создания процедуры вы можете ее сразу выполнить:

- Run Sub / UserForm или

- нажать <F5>.

Чтобы сохранить новую процедуру, надо сохранить рабочую книгу, где находится эта процедура.

1.2 Управляющие конструкции

Ветвление

Для организации ветвления в VBA используются:

  • различные формы оператора ветвления If;

  • оператор выбора Select Case.

Краткое ветвление:

If <условие> Then

<оператор 1>

<оператор 2>

...

End If

Полная форма оператора If:

If <условие> Then

<блок Операторов 1>

Else

< блок Операторов 2>

End If

Иногда приходится делать выбор одного из целой группы альтернативных действий на основе проверки нескольких различных условий. Для этого можно использовать цепочку операторов ветвления If ... Then ... ElseIf. Такие цепочки операторов обладают большой гибкостью и позволяют решить все проблемы. Однако, если выбор одной из нескольких возможностей все время основан на различных значениях одного и того же выражения, гораздо удобнее использовать специально предназначенный для этого оператор выбора Select Case:

Select Case <проверяемое выражение>

Case <список Значений 1>

<блок Операторов 1>

Case <список Значений 2>

<блок Операторов 2>

...

Case Else

<блок Операторов_Else>

End Select

Проверяемое выражение вычисляется в начале работы оператора Select Case. Это выражение может возвращать значение любого типа (логическое, числовое или строковое).

1.3 Циклы

Существуют две основные группы:

  • циклы с условием Do ... Loop;

  • циклы с перечислением For ... Next.

Циклы типа Do ... Loop используются в тех случаях, когда заранее не известно, сколько раз должно быть повторено выполнение

блока операторов, составляющих тело цикла. Такой цикл продолжает свою работу до тех пор, пока не будет выполнено определенное условие. Существует четыре вида циклов Do ... Loop (таблица 1.1).

Таблица 1.1 – Синтаксис операторов цикла Do

Конструкция

Описание

Do While <условие>

<блок Операторов>

Loop

Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие выполняется (т.е. имеет значение True), иными словами, в этой конструкции указывается условие продолжения работы цикла

Do

<блок Операторов>

Loop While условие>

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

Do Until <условие>

<блок Операторов>

Loop

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

Do

<блок Операторов>

Loop Until <условие>

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

Имеются также две разновидности оператора цикла с перечислением For ... Next:

1) при обработке массивов и в тех случаях, когда требуется повторить выполнение некоторой группы операторов заданное число раз, используется цикл For ... Next со счетчиком. В отличие от циклов Do ... Loop, данный тип цикла использует специальную переменную, называемую счетчиком, значение которой увеличивается или уменьшается при каждом выполнении тела цикла на заданную величину. Когда значение этой переменной достигает заданного значения, выполнение цикла заканчивается.

Синтаксис цикла:

For <счетчик> = <начальное Значение> To <конечное Значение>

[Step <приращение>]

<блок Операторов>

Next [<счетчик>]

2) еще одна разновидность цикла For ... Next используется в VBA при обработке объектов, составляющих массив или семейство однородных объектов. В разновидности цикла For Each ... Next счетчик отсутствует, а тело цикла выполняется для каждого элемента массива или семейства объектов.

Синтаксис цикла:

For Each <элемент> In <совокупность>

<блок Операторов>

Next [<элемент>]

<элемент> – это переменная, используемая для ссылки на элементы семейства объектов; <совокупность> – это имя массива или семейства.

1.4 Выход из циклов

Досрочный выход из управляющей конструкции можно осуществить с помощью оператора Exit. Для досрочного выхода из цикла Do ... Loop используется оператор Exit Do, а для выхода из циклов For – оператор Exit For.

1.5 Функция MsgBox

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

Полный перечень и описание всех встроенных процедур и функций можно найти в разделе Справочник по языку Visual Basic, Function.

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

Синтаксис функции MsgBox:

MsgBox (приглашение [, кнопки] [, заголовок] [, файл_справки, содержание])

Приглашение (prompt) – единственный обязательный аргумент этой функции. Значением этого аргумента служит строка текста, которая появляется как сообщение в диалоговом окне. Эта строка текста заключена в двойные кавычки.

Пример (рисунок 1.1):

Dim iResponse As Integer

iResponse = MsgBox (“Сохранить изменения в ’ ” & _

ThisWorkbook.Name &” ’?”, vbYesNoCancel + vbExclamation)

Рисунок 1.1

Использование круглых скобок в синтаксисе MsgBox указывает на то, что MsgBox является функцией, возвращающей какое-либо значение. Если скобки опущены – данное выражение значение не возвращает.

Если не указан аргумент кнопка, то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент кнопка – очень “богатый” по своим возможностям аргумент, который позволяет управлять следующими параметрами окна сообщения:

- количество кнопок в окне;

- типы кнопок и их размещение в окне;

- пиктограмма, отображаемая в окне;

- какая кнопка назначается кнопкой по умолчанию;

- режим (модальность) окна сообщения.

В таблице 1.2 показаны возможные установки для этого аргумента. Значения аргумента разбиты на группы: первая группа значений устанавливает число и тип кнопок; вторая – позволяет выбирать стиль пиктограммы, отображаемой в диалоговом окне сообщения; третья – назначает кнопку по умолчанию; четвертая группа устанавливает режим окна сообщения. Для создания конечного значения аргумента кнопка можно использовать только одно значение из каждой группы, объединив их знаком “+”.

Таблица 1.2 – Установки для аргумента кнопки функции MsgBox

Группа

Константа

Зна-

чение

Описание

1

2

3

4

Группа 1

vbOKOnly

0

Отображает только кнопку ОК (установка по умолчанию)

vbOKCancel

1

Отображает кнопки ОК и Отмена

vbAbortRetryIgnor

2

Отображает кнопки Стоп, Повтор и Пропустить

vbYesNoCancel

3

Отображает кнопки Да, Нет и Отмена

vbYesNo

4

Отображает кнопки Да и Нет

vbRetryCancel

5

Отображает кнопки Повтор и Отмена

Группа 2

vbCritical

16

Отображает запрещающую пиктограмму (белый знак «х» в красном круге)

vbQuestion

32

Отображает предупреждающую пиктограмму (знак вопроса на белом фоне)

1

2

3

4

vbExclamation

48

Отображает предупреждающую пиктограмму (знак вопроса в красном треугольнике)

vbInformation

64

Отображает информационную пиктограмму (знак “i” на белом фоне)

Группа 3

vbDefaultButton1

0

Первая кнопка – кнопка по умолчанию

vbDefaultButton2

256

Вторая кнопка – кнопка по умолчанию

vbDefaultButton3

512

Третья кнопка – кнопка по умолчанию

vbDefaultButton4

768

Четвертая кнопка – кнопка по умолчанию

Группа 4

vbApplicationModal

0

Режим приложения: пользователь должен закрыть окно сообщения перед продолжением работы в текущем приложении

vbSystemModal

4096

Системный режим: все приложения недоступны, пока пользователь не закроет окно сообщения

Дополнительная группа

VbMsgBoxHelpButton

16384

Отображает кнопку Справка

vbMsgBoxSetForeground

65536

Делает окно сообщения окном переднего плана

vbMsgBoxRight

524288

Отображает окно сообщения, выровненным по правому краю окна приложения

vbMsgBoxRtlReading

10488576

Для иврита и арабского языка указывает, что текст должен выводиться справа налево

Аргумент заголовок позволяет задать текст, помещаемый в строке заголовка диалогового окна сообщения. Если этот аргумент опущен, то в строке заголовка отображается Microsoft Excel.

Аргумент файл_справки и содержание используется тогда, когда вы создаете для своего приложения собственную справочную систему.

Мы рассматриваем функцию MsgBox, поэтому она должна возвращать значение. Возвращаемое значение зависит от того, на какой кнопке щелкнул пользователь в окне сообщения. Наилучший тип переменной, принимающей значение функции MsgBox – Integer (таб-лица 1.3).

Таблица 1.3 – Значения, возвращаемые функцией

Константа

Значение

Нажатая кнопка

vbOK

1

ОК

vbCancel

2

Отмена

vbAbort

3

Стоп

vbRetry

4

Повтор

vbIgnore

5

Пропустить

vbYes

6

Да

vbNo

7

Нет

1.6 Функция InputBox

Функция MsgBox хороша, когда от пользователя надо получить простые ответы. Если необходимо ввести число или текст, то применяется функция InputBox. Эта функция отображает диалоговое окно ввода, содержащее поле ввода, и поясняющий тест. Функция InputBox имеет следующий синтаксис:

InputBox (приглашение [, заголовок] [, по_умолчанию] [, хпоз] [, упоз] [, файл_справки, содержание])

Эта функция требует обязательного задания только аргумента приглашение. Значением аргумента приглашение служит текстовая строка, которая отображается в диалоговом окне ввода в качестве сообщения.

Аргумент заголовок используется для задания текста, который помещается в строке заголовка окна ввода. Если он не задан, то в строке заголовка отображается Microsoft Excel.

Аргумент по_умолчанию задает значение, которое отображается по умолчанию в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то поле ввода отображается пустым.

Необязательные аргументы хпоз, упоз задают положение окна ввода на экране.

Аргументы файл_справки, содержание используются в том случае, если вы создаете для своего приложения собственную систему справки.

Возвращаемым значением функции InputBox является значение, введенное пользователем в поле ввода.