
- •1 Аппаратное устройство компьютера
- •10.8.3 Программные модули
- •1 Аппаратное устройство компьютера
- •Основные узлы системного блока:
- •Основной электрической платой пк является материнская плата (MotherBoard). На ней расположенны:
- •1.1.2. Внутренняя память Под внутренней памятью понимают все виды запоминающих устройств, расположенные на материнской плате. К ним относятся оперативная память, постоянная память
- •Оперативная память ram (Random Access Memory память с произвольным доступом )
- •1.2 Мониторы
- •1.5 Периферийные устройства
- •2. Представление информации в эвм.
- •2 Бита- 4 варианта,
- •3 Бита- 8 вариантов;
- •4 Бита- 16 вариантов,
- •3. Программное обеспечение.
- •3. Программное обеспечение.
- •3.1 Системное программное обеспечение (по)
- •4. Файловая система
- •4.1 Основные понятия.
- •4.2 Название дисков, папок, файлов.
- •5. Операционная система Windows
- •5.1 Основные достоинства
- •5.2 Интерфейсные элементы управления Windows
- •5.2.1. Окна
- •2) Настройка панели инструментов:
- •2)Переключение между окнами приложений.
- •5.2.2. Меню
- •5.3. Рабочий стол
- •5.4 Настройка Windows
- •5.4.1 Настройка рабочего стола
- •5.4.2 Настройка главного меню.
- •5.4.4. Чтобы установить дополнительный язык и раскладку клавиатуры
- •5.4.5 Работа со справочной системой.
- •5.4.6 Запуск приложения. Для запуска любого приложения (программы) в Windows можно воспользоваться одним из следующих способов:
- •5.5 Работа с папками и файлами в Windows.
- •5.5.1 Запуск Проводника
- •2 Способ:
- •3 Способ:
- •5.5.2 Создание папки.
- •5.6 Копирование и перенос информации между различными документами осуществляется через буфер обмена (Clipboard).
- •5.7 Свойства объектов
- •5.8 Команда Поиск
- •6. Текстовой процессор ms Word
- •6.1 Работа с окнами
- •6.2 Меню
- •6.3 Работа с мышью.
- •6.4 Ввод и редактирование текста.
- •1) Установление параметров страницы
- •2) Нумерация страниц.
- •6.5 Печать документов
- •6.6 Вставка графических объектов
- •6.7 Вставка таблиц
- •6.8 Вставка формул
- •6.9 Операции с документами
- •7 Табличный процессор Microsoft Excel
- •7.1 Структура и управление интерфейсом пользователя
- •7.1.1 Рабочие книги .Xls
- •7.1.2 Окно
- •7.2. Основные приемы работы в Excel
- •7.2.1. Выделение диапазонов (блоков)
- •7.2.2 Операции со столбцами и строками
- •7.2.3. Ввод данных
- •7.2.4 Заполнение ячеек
- •7.3 Ввод формул
- •7.4 Использование библиотеки встроенных функций
- •Исправление ошибки #пусто!
- •Исправление ошибки #####
- •Исправление ошибки #ссылка!
- •Исправление ошибки #дел/0!
- •7.5 Защита ячеек от несанкционированного изменения
- •7.6 Диаграммы
- •7.6.1 Терминология
- •7.6.2 Создание диаграммы
- •7.7 Базы данных
- •7.7.5 Обеспечение поиска и фильтрации.
- •7.8 Макросы
- •1. Создадим макрос для вычисления расходов на оплату квартиры
- •2. Макрос для построения графика
- •7.9.1 Подбор параметра
- •7.9.2 Поиск решения
- •Установить целевую ячейку
- •Загрузить модель
- •Сохранить модель
- •8. Этапы подготовки и решения задач.
- •9 Основные элементы vba
- •9.1 Что такое vba
- •9.2 Структура редактора vba
- •9.3 Запуск интегрированной среды vba
- •9.4 Меню редактора vba
- •10 Основные понятия vba
- •10.1 Объекты и их семейства
- •10.2 Типы данных
- •10.3 Идентификаторы
- •10.4 Переменные
- •10.5 Константы
- •10.6 Массивы
- •10.6.1 Описание массивов
- •10.7 Выражения и операции
- •10.8 Встроенные функции vba
- •10.9 Оформление программного кода
- •11 Операторы vba
- •11.1 Оператор присваивания
- •1. В языке vba выражением является:
- •2. Язык vba поддерживает следующие арифметические операции:
- •3. Язык vba поддерживает следующие строковые операции:
- •4. Метка в операторе безусловного перехода GoTo определяет:
- •6. Если значение а равно 8, то какой из операторов будет выполнен при выполнении оператора:
- •8 Какой тип цикла следует выполнить, чтобы операторы в теле цикла были выполнены хотя бы один раз:
- •19 Экранные формы и их элементы
- •19.1 Экранные формы
- •19.1.1 Добавление формы в проект
- •19.1.3 Отображение экранной формы
- •19.1.4 Закрытие экранной формы.
- •19.1.5 Некоторые свойства объекта UserForm
- •19.1.6 Событие – это то, что может произойти с диалоговым окном (UserForm) или элементом управления
- •19.2 Элементы управления формы
10.9 Оформление программного кода
Комментарии
В программный код можно включит любой произвольный текст, т.е. комментарии. Комментарии, поясняющие текст программы, делают ее более читаемой. Текст, следующий в программе за символом “ ‘ “ вплоть до конца строки, игнорируется компилятором и представляет собой комментарии.
Размещение оператора на нескольких строках
Если оператор имеет большую длину, его можно разместить на несколько строк. Для этого нужно использовать пробел, за которым следует символ подчеркивания.
При этом надо помнить, что:
Нельзя разбивать переносом строковые константы
Допустимо не более семи продолжений одной и той же строки
Сама строка не может состоять более, чем из 1024 символов
Размещение нескольких операторов на одной строке
Если операторы имеют небольшую длину, то их можно разместить на одной строке, разделив их символом двоеточие
X=2 : d=7
11 Операторы vba
Оператор – это языковая конструкция, представляющая описание команды или комплекса команд по обработке и преобразованию данных.
11.1 Оператор присваивания
Оператор присваивания присваивает значение выражения переменной, константе или свойству объекта.
Синтаксис оператора присваивания:
<идентификатор>=<выражение>
Например
X=2
Y=”Привет”
Стоимость=x*kol
TextBox1.Visible=True;
CommandButton1.Caption=”Вычислить”
Работа: вычисляется значение <выражения> присваивается полученное значение <идентификатору>
Пример.
Вычислить значение функции f(x,y)=|x|+sin2(y+5).
Public Sub prog1()
Dim x As Double, y As Double Dim f As Double x=CDbl(InputBox("Введите х")) y=CDbl(InputBox("Введите y"))
f = Abs(x) + Sin(y + 5) ^ 2
MsgBox "Результат = " & f
End Sub |
Заголовок процедуры prog1 (начало программы) Описание переменных: переменные x,y,fвещественного типа (Double) Ввод значений х и у. Функция InputBoxвыводит на экран окно с полем ввода и сообщением «Введите х» и возвращает значение типа строка (String). Для преобразования вводимого значения к вещественному типу –Double- используется функцияCDbl. Вычисление значения переменной f: функцияAbs(аргумент) возвращает модуль аргумента,Sin(аргумент) – синус аргумента, ^ - степень числа. Процедура MsgBoxвыводит на экран окно сообщений с текстом «Результат = 12» (еслиf=12). Конец программы. |
Организация ввода-вывода данных
Ввод и вывод данных в VBA может выполняться несколькими способами: с листа Excel, с помощью диалоговых окон, с помощью пользовательской формы.
Для ввода данных с листа или вывода на лист используется объект Worksheets и его методы Range или Cells.
Метод Range использует в качестве аргументов одну или две ссылки на ячейки, и возвращают объект Range. Ссылки на ячейки должны быть оформлены в стиле А1 (колонка-буква, строка-число). Ссылка на единичную ячейку, использованная в качестве аргумента, возвращает объект Range для единичной ячейки. Две ссылки на единичные ячейки возвращают объект Range для прямоугольной области, заключенной между этими двумя ячейками:
X = Worksheets(“Лист1”).Range(“B1”).Value |
Присваиваем переменной Х значение ячейки B1 листа Лист1. |
Worksheets(“Лист1”).Range(“B1”).Value = Х |
Выводим в ячейку B1 листа Лист1 значение переменной Х |
Worksheets(“Лист1”).Range(“C1,D6”).Value = 2 |
Выводим в ячейки C1 и D6 листа Лист1 число 2 |
Worksheets(“Лист1”).Range(“В7:С9”).Value = 3 |
Выводим в диапазон ячеек “В7:С9” листа Лист1 число 3 |
Public Sub Ввод_Вывод()
x = Worksheets("Лист1").Range("F1").Value
Worksheets(1).Range("F2").Value = x
x = Worksheets("Лист1").Range("g1")
Worksheets(1).Range("g2") = x
Worksheets("Лист1").Range("A1:B2").Value = 1
Worksheets(1).Range("c1, d6") = 5
End Sub
Метод Cells, получая в качестве аргументов два целых числа, возвращают объект, содержащий единичную ячейку. Аргументы определяют номера строки и столбца выбранной ячейки.
A=Worksheets(1).Cells(1,2).Value |
Переменной А присвоено значение из ячейки первой строки и второго столбца первого листа. |
Worksheets(1).Cells(2,2).Value= Х |
В ячейку второй строки и второго столбца заносится значение переменной Х |
Ячейка А2 как объект описывается Range ("A2") или cells (1,2).
В проектах VBA часто встречаются две разновидности диалоговых окон: окна сообщений и окна ввода. Они встроены в VBA, и если их возможностей достаточно, то можно обойтись без проектирования диалоговых окон. Окно сообщений (MsgBox) выводит простейшие сообщения для пользователя, а окно ввода (InpuBox) обеспечивает ввод информации.
Окно ввода
Функция InputBox выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки OK и Cancel.
Устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем:
При нажатии на кнопку OK, возвращает значение типа string, содержащее текст, введенный в поле ввода.
При нажатии кнопки Cancel возвращается пустая строка.
Синтаксис:
InputBox (prompt [, title] [, default])
Аргументы:
prompt — обязательный параметр. Любое строковое выражение, отображаемое как сообщение в диалоговом окне. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (Сhr(13)), символа перевода строки (chr (10)) или комбинацию этих символов (Chr( 13) & Chr (10))
title — Необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения
default — Необязательный параметр. Строковое выражение, Отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым
Пример.
Имя =InputBox(“Введите Ваше имя”, “Пример окна ввода”)
На экране появится окно.
Рисунок 2 – Пример окна ввода
Переменной Имя будет присвоено значение типа String, введенное пользователем.
Следует учесть, что, поскольку введенные пользователем данные считаются текстом, при вводе числовых значений необходимо преобразовать их к одному из числовых типов данных с помощью функции преобразования типа, например val илиCDbl.
X=CDbl(InputBox(“Введите значение Х”, “Пример окна ввода”, “1,678”))
В результате выполнения этой операции на экране появится окно ввода.
Рисунок 3 – Пример окна ввода
Введенное пользователем значение будет преобразовано к типу Double и присвоено переменной Х. Если пользователь не будет вводить значение, а просто нажмет кнопку OK, переменной Х будет присвоено значение по умолчанию 1.678.
Окно вывода
Процедура MsgBox выводит на экран диалоговое окно, содержащее сообщение.
Устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата.
Синтаксис:
MsgBox (prompt [, buttons] [, title] )
Аргументы:
prompt — Обязательный параметр. Строковое выражение, отображаемое как сообщение в диалоговом окне
buttons — Необязательный параметр. Числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок используемого значка, приведены в табл.11
title — Необязательный параметр. Строковое выражение, отображаемое в строке , заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения
Таблица 11 – Значение констант, определяющее тип и число кнопок, тип значка
Имя Константы |
Числовое значение |
Отображаются кнопки |
VbOkOnly |
0 |
|
VbOkCancel |
1 |
|
VbAbortRetryIgnore |
2 |
|
VbYesNoCancel |
3 |
|
VbYesNo |
4 |
|
VbRetryCancel |
5 |
|
VbCritical |
16 |
|
VbQuestion |
32 |
|
VbExclamation |
48 |
|
VbInformation |
64 |
|
VbDefaultButtob1 |
0 |
Первая кнопка по умолчанию |
VbDefaultButtob2 |
256 |
Вторая кнопка по умолчанию |
VbDefaultButtob3 |
512 |
Третья кнопка по умолчанию |
VbDefaultButtob4 |
768 |
Четвертая кнопка по умолчанию |
VbSystemModal |
4096 |
Режим модальности: все программы приостанавливаются до тех пор, пока пользователь не ответит на сообщение |
Значения 0-5 параметра кнопки могут быть просуммированы со значениями 16-64 и 256-4096. В этом случае первые значения определяют состав кнопок диалогового окна, вторы – вид отображаемого в окне значка, а третьи – выбор кнопки по умолчанию.
Например, если в качестве значения параметра указать выражение 3+64+512, то в диалоговом окне будут отображены кнопки Да, Нет, Отмена, значок информирующего значения и по умолчанию будет выбрана кнопка Отмена.
Public Sub qq()
MsgBox "Нажмите любую кнопку", _
vbYesNoCancel + vbInformation + vbDefaultButton3, _
"Контрольный пример"
MsgBox "Нажмите любую кнопку", _
3 + 64 + 512, _
"Контрольный пример"
MsgBox "Нажмите любую кнопку", _
579, _
"Контрольный пример"
End Sub
При написании программ с откликом, когда нужно знать, какая кнопка диалогового окна была нажата (таблица 12), вместо возвращаемых значений удобнее использовать следующие константы VBA, которые делают код программы более читаемым и, к тому же, их легко запомнить.
Таблица 12
Константа |
Значение |
Нажатая кнопка |
vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo |
1 2 3 4 5 6 7 |
ОК Отмена (Cancel) Прервать (Abort) Повторить (Retry) Пропустить (Ignore) Да (Yes) Нет (No) |
Пример.
Public Sub TestMsgBox1()
x = 2
n = MsgBox("Значение переменной Х=" & x & Chr(10) _
& "Продолжитьвычисления ?", vbYesNo, "Пример окна MsgBox")
If n = 6 Then
MsgBox "Нажата кнопка Да"
ElseIf n = 7 Then
MsgBox "Нажата кнопка Нет"
End If
End Sub
Пользователь может нажать одну из кнопок – Да или Нет. Если будет нажата кнопка Да, переменной N будет присвоено значение 6 , если будет нажата кнопка Нет – 7. Проанализировав в дальнейшем это значение, можно выбрать одну из ветвей выполнения программы.
Часто процедура MsgBox используется в «минимальном» варианте - только для вывода сообщения, с одной кнопкой – OK. В этом случае аргументы не берутся в скобки.
Например:
MsgBox “Значение переменной Х=” & X
Пример окна сообщений
ПРИМЕР:
1. Пример использования окон сообщений. В результате действия приведенной ниже процедуры Тестокон появится диалоговое окно пример окна ввода с полем ввода
Следуя приглашению в этом диалоговом окне, введем в поле ввода имя, например Андрей. Нажмем кнопку ОК.
На экране отобразится диалоговое окно пример окна сообщения с текстом приветствия
Если пользователь не введет имя в поле ввода диалогового окна Пример окна ввода или нажмет кнопку Отмена, то компьютер выразит свое неудовлетворение действиями пользователя отображением диалогового окна
Public Sub ТестОкон()
Dim ИмяКлиента As String
'
' Ввод имени пользователя
'
ИмяКлиента = InputBox("Введите ваше имя", "Пример окна ввода")
' Реакция программы на ввод имени пользователя
If ИмяКлиента <> "" Then
MsgBox "Привет, " & ИмяКлиента, vbInformation, _
"Пример окна сообщения"
Else
MsgBox "Невежа, ты забыл ввести свое имя ", _
vbExclamation, "Еще один пример окна сообщения"
End If
End Sub
Условные операторы
Для изменения порядка выполнения программного кода используются условные операторы
Условный оператор позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Имеется два варианта синтаксиса:
1) Строчная форма записи условного оператора:
IF <условное выражение> Then <операторы 1> [Else <операторы 2>]
Работа:
Если <условное выражение> принимает значение True, то выполняются <операторы 1> после Then и управление передается оператору, следующему за условным оператором. Если <условное выражение>=False, то выполняются <операторы 2> после Else и управление передается оператору, следующему за условным оператором. Ветвь Else является необязательной
2) Блочная форма записи оператора IF (оператор расположен на нескольких строках ):
IF < условное выражение 1> Then
<операторы 1>
[ElseIf < условное выражение – n> Then
[<операторы-n >]…
[Else
[<ИначеОператоры>]
End If
Работа:
Если <условное выражение1> принимает значение True, то выполняются <операторы 1> после Then, и управление передается оператору, следующему за условным оператором. Если <условное выражение1> =False, то при наличии конструкции [ElseIf < условное выражение – n> проверяется значение < условное выражение – n> . Если оно имеет значение True, то выполняются[<операторы-n >]…и управление передается оператору, следующему за условным, в противном случае выполняются операторы [<ИначеОператоры>] после Else. Ветвь Else является необязательной.
На блок-схеме условные операторы отображаются следующим образом:
Пример 1
Вычислить, является ли введенное число четным
Public Sub Четное_число()
Dim s As Integer
s = Worksheets(1).Range("a1")
's = Worksheets("Лист1").Range("a1")
's = Worksheets(1).Cells(1, 1)
's = CInt(InputBox("Введите любое целое число"))
If s Mod 2 = 0 Then
Worksheets(1).Range("a2") = "Введенное число " & s & " является четным"
'MsgBox "Введенное число " & s & " является четным"
Else
Worksheets(1).Range("a2") = "Введенное число " & s & " является нечетным"
'MsgBox "Введенное число " & s & " является нечетным"
End If
End Sub
Пример 2
Вычислить
Public Sub aa()
Dim a As Double, f As Double
Dim i As Integer
a = Worksheets(2).Range("b1")
i = Worksheets(2).Range("b2")
If i Mod 2 = 0 And a > 0 Then
f = i * Sqr(a)
ElseIf i Mod 2 <> 0 And a < 0 Then
f = 0.5 * i * Sqr(Abs(a))
Else
f = Sqr(Abs(i * a))
End If
Worksheets(2).Range("a3") = "Результат"
Worksheets(2).Range("a4") = "f="
Worksheets(2).Range("b4") = f
End Sub
Пример 3 Вложенные операторы If
Public Sub Возраст1()
intВозраст = InputBox("Укажите возраст")
If intВозраст > 7 Then
If intВозраст <= 17 Then
MsgBox ("Школьник")
Else
MsgBox "Взрослый"
End If
Else
MsgBox "Дошкольник"
End If
End Sub
Пример 4 Эквивалентом вложенных операторов операторов If является оператор If …Then … ElseIf, в котором используется ключевое слово ElseIf
Public Sub Возраст2()
intВозраст = InputBox("Укажите возраст")
If intВозраст < 7 Then
MsgBox "Дошкольник"
ElseIf intВозраст <= 17 Then
MsgBox ("Школьник")
ElseIf intВозраст <= 23 Then
MsgBox ("Студент")
ElseIf intВозраст <= 55 Then
MsgBox ("Специалист")
Else
MsgBox "Пенсионер"
End If
End Sub
Что получим, если ничего не введем ?
Оператор безусловного перехода GoTo
Оператор безусловного перехода GoTo всегда изменяет порядок выполнения операторов в программе – при этом VBA не проверяет никаких условий, а просто переходит к выполнению программы с того места, которое будет указано в этом операторе.
Синтаксис оператора:
GoTo Labl
Здесь Labl – метка, определяющая оператор (или группу операторов), с которого будет продолжено выполнение программы. Метка – это любой допустимый идентификатор VBA, за которым обязательно должно следовать двоеточие.
Public Sub Опер_GoTo()
Пароль = InputBox("Введите Ваш пароль")
If Пароль <> "ABC" Then GoTo Неверный_пароль
MsgBox ("Добро пожаловать, ABC!")
'Другие операторы
Exit Sub
Неверный_пароль:
MsgBox "Вы не можете работать на этой машине"
End Sub
В этой процедуре оператор GoTo используется для перехода в особую ветвь программы, предназначенную для обработки ситуации, когда пользователь вводит неверный пароль. Если же пароль будет введен верно (“ABC”), то после вывода приветствия программа представит пользователю доступ к машине для продолжения работы.
Оператор GoTo не пользуется большой популярностью у программистов, поскольку его использование противоречит нормам структурного программирования и часто приводит к появлению ошибок в логике программы. Поэтому оператор GoTo следует применять только в том случае, когда без него никак нельзя обойтись. Обычно в VBA оператор GoTo используется только при обработке ошибок.
Условный оператор Select Case
Кроме рассмотренных ранее условных операторов If в языке VBA имеется еще один условный оператор Select Case, который используется в тех случаях, когда необходимо проверять одно и то же значение, сравнивая его с различными выражениями.
Синтаксис оператора Select Case
Select Case <выражение>
Case <список выражений 1>
<операторы 1>
…………..
Case <список выражений N>
<операторы N>
[Case Else
<операторы N+1>]
End Select
Здесь
<выражение> - любое численное или строковое выражение,
<список выражений i> - представляют список выражений, отделенных друг от друга запятыми или (если в интервале), то in to ik,
<операторы i> - (i=1,N) – операторы, которые выполняются, если <выражение i> совпадает с любым компонентом <список выражений i>,
[Case Else
<операторы N+1>] необязательная конструкция.
Работа:
Вычисляется <выражение>
Если значение <выражение> совпадает со значением из Case <список выражений i>, то выполняются соответствующие <операторы i> и затем управление передается на оператор следующий за оператором Select Case
Если значение <выражение> не совпадает ни с одним из Case <список выражений i>, то при наличии конструкции Case Else выполняются <операторы N+1>. Если конструкция Case Else отсутствует, то сразу выполняется оператор, следующий за оператором Select Case
Пример:
Ввести номер дня недели и по его значению вывести какой это день недели: Рабочий день, Суббота или Воскресенье.
Public Sub Оператор_Select_Case1()
Dim n_day As Integer
Dim day As String
n_day = CInt(InputBox("Введите номер дня недели"))
Select Case n_day
Case 1 To 5
day = "Рабочий день"
MsgBox "Сегодня - " & day, vbOKOnly + vbInformation
Case 6
day = "Суббота"
MsgBox "Сегодня - " & day, vbOKOnly + vbInformation
Case 7
day = "Воскресенье"
MsgBox "Сегодня - " & day, vbOKOnly + vbInformation
End Select
End Sub
Public Sub Оператор_Select_Case2()
Dim n_day As Integer
Dim day As String
n_day = CInt(InputBox("Введите номер дня недели"))
Select Case n_day
Case 6
day = "Суббота"
MsgBox "Сегодня - " & day, vbOKOnly + vbInformation
Case 7
day = "Воскресенье"
MsgBox "Сегодня - " & day, vbOKOnly + vbInformation
Case Else
day = "Рабочий день"
MsgBox "Сегодня - " & day, vbOKOnly + vbInformation
End Select
End Sub
Операторы повтора
Для организации циклов язык VBA предоставляет несколько гибких и мощных структур – операторы повтора.
А) Оператор цикла с параметром ( For — Next)
Оператор цикла позволяет повторять группу операторов заданное число раз
Синтаксис:
For <счетчик цикла>=<начало> To <конец> [Step шаг]
<операторы>
[Exit For]
Next <счетчик цикла>
Где:
<счетчик цикла> - любая числовая переменная, в которой сохраняется информация о количестве выполненных проходов цикла (счетчик цикла);
Параметры <начало> и <конец> - это числовые выражения, задающие начальное и конечное значение счетчика и определяющие количество проходов цикла.
Числовая переменная шаг задает приращение, на которое увеличивается счетчик цикла при каждом проходе. [Step шаг] необязательная фраза. При её отсутствии VBA (по умолчанию) увеличивает счетчик цикла на единицу.
Во фразе Next <счетчик цикла> имя переменной счетчик указывать необязательно. Но при указании имени переменной улучшается читабельность программы и в случае вложенных циклов For — Next сразу видно, какому именно циклу принадлежит данное слово Next
Работа:
Переменной <счетчик цикла> присваивается значение параметра <начало> и проверяется условие счетчик цикла < конец. Если условие неверно, то управление передается оператору, следующему за Next. Если же условие - верно, то выполняются все операторы, входящие в блок, обозначенный как <операторы>, вплоть до ключевого слова Next
Значение переменной <счетчик цикла> увеличивается на величину, заданную во фразе [Step шаг] или на единицу, если фраза Step не указана
Управление возвращается
Данный процесс будет выполняться, пока значение <счетчик цикла> не достигнет значение <конец>
Досрочно завершить цикл For — Next можно с помощью оператора Exit For, который располагается в том месте блока <операторы>, где необходимо выйти из оператора цикла For — Next не дожидаясь условия завершения цикла.
На блок – схеме оператор изображается следующим образом:
Пример 1
Вычислить
n-ый
член последовательности, заданный
формулой
,
если
Public Sub Prog1()
Dim n As Byte
Dim a1 As Integer, a2 As Integer, an As Integer
n = CByte(InputBox("введите N"))
a1 = 1: a2 = 1
For i = 3 To n
an = a2 + a1
a1 = a2: a2 = an
Next i
MsgBox n & "-й член последовательности = " & an
End Sub
Пример 2
Задана
последовательность хi
вещественных
чисел. Вычислить
Public Sub Prog2()
Dim n As Byte
Dim i As Byte
Dim xi As Double, s As Double
n = CByte(InputBox("введите N"))
s = 0
For i = 1 To n
xi= CDbl(InputBox("Введите " & i & "-й элемент последовательности"))
s = s + xi
Next i
Worksheets(1).Range("a1") = "Значение суммы равно"
Worksheets(1).Cells(2, 1) = s
End Sub
Пример 3
Задан массив, содержащий N вещественных чисел. Найти наибольший и наименьший элементы и поменять их местами.
Public Sub Prog3()
Dim n As Integer, i As Integer
Dim imin As Integer, imax As Integer
Dim max As Double, min As Double
Dim a() As Double
n = CInt(InputBox("введите N"))
ReDim a(1 To n)
Worksheets(1).Range("A1") = "Исх. массив"
For i = 1 To n
a(i)=CDbl(InputBox("Введите " & i & "-й элемент последовательности"))
Worksheets(1).Cells(i + 1, 1) = a(i)
Next
imin = 1: imax = 1
min = a(1): max = a(1)
For i = 1 To n
If a(i) > max Then
imax = i: max = a(i)
End If
If a(i) < min Then
imin = i: min = a(i)
End If
Next i
a(imin) = max
a(imax) = min
Worksheets(1).Range("C1") = "Рез. массив"
For i = 1 To n
Worksheets(1).Cells(i + 1, 3) = a(i)
Next i
End Sub
Пример 4
Вывести на экран окно сообщения со строкой нечетных чисел
Public Sub Prog4()
Dim addnum As String
For a = 1 To 21 Step 2
addnum = addnum & a & " "
Next a
MsgBox "Это последовательность нечетных чисел:" & _
Chr(13) & addnum
End Sub
В) Операторы повтора
Инструкция For…Next применяется в тех случаях, когда известно число повторений.
Если число повторений неизвестно, то применяются операторы повтора.
Существует несколько типов Операторов повтора
Операторы повтора с предусловием.
Синтаксис:
Do While <условное выражение>
<операторы>
[Exit Do]
< операторы >
Loop
While < условное выражение >
<операторы>
[Exit Do]
< операторы >
Wend
Работа:
Вычисляется условное выражение. Если значение условного выражения равно TRUE (истина), то выполняется блок <операторы> и, достигнув слова Loop, опять управление передается в начало оператора повтора, чтобы опять проверить условное выражение. Если вычисленное значение условного выражения равно FALSE (ложь), то управление передается оператору, следующему за оператором повтора.
При наличии инструкции Exit Do есть возможность досрочного выхода из цикла.
На блок-схеме операторы отображаются следующим образом:
Еще одной формой записи оператора повтора с предусловием, является следующий оператор:
Do Until <условие>
<операторы>
[Exit Do]
< операторы >
Loop
Работа:
Вычисляется условное выражение. Если значение условного выражения равно FALSE (ложь), то выполняется блок <операторы> и, достигнув слова Loop, опять управление передается в начало оператора повтора, чтобы опять проверить условное выражение. Если вычисленное значение условного выражения равно TRUE (истина), то управление передается оператору, следующему за оператором повтора.
Операторы повтора с постусловием.
Синтаксис:
Do
<операторы>
[Exit Do]
< операторы >
Loop While <условное выражение>
Работа:
Блок операторов выполняется, если <условное выражение> имеет значение TRUE (истина). Оператор повтора прекращает свою работу, если <условное выражение> примет значение FALSE (ложь)
Do
<операторы>
[Exit Do]
< операторы >
Loop Until <условное выражение>
Работа:
Блок операторов выполняется, если <условное выражение> имеет значение FALSE (ложь). Оператор повтора прекращает свою работу, если <условное выражение> примет значение TRUE (истина).
Примечание:
Отличие циклов с предусловием от циклов с постусловием заключается в том, операторы цикла с постусловием всегда выполняются хотя бы один раз.
Пример 1:
Вычислить значения Y=sin(x)+ex для всех значений х[a,b]
Программный код с использованием оператора Do While
Public Sub Операторы_повтора1()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
Do While x <= b
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Loop
End Sub
Программный код с использованием оператора While
Public Sub Операторы_повтора2()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
While x <= b
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Wend
End Sub
Программный код с использованием оператора Do While
Public Sub Операторы_повтора1()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
Do While x <= b
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Loop
End Sub
Программный код с использованием оператора Do Until
Public Sub Операторы_повтора3()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
Do Until x >= b
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Loop
End Sub
Программный код с использованием оператора Do … Loop While
Public Sub Операторы_повтора4()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
Do
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Loop While x <= b
End Sub
Пример 2
Рассортировать по убыванию одномерный массив, содержащий 10 вещественных элементов.
Текст программы приведен ниже
Public Sub Сортировка()
Dim a(1 To 10) As Double
Dim i As Integer, i1 As Integer
Dim n As Integer, imax As Integer
Dim j As Integer
Dim max As Double
Worksheets(1).Range("a1") = "Исходный массив"
n = 10
j = 2
For i = 1 To n
a(i) = Worksheets(1).Cells(j, 1)
j = j + 1
Next i
i1 = 1
Do While i1 <= n - 1
max = a(i1)
imax = i1
For i = i1 To n
If a(i) > max Then
imax = i: max = a(i)
End If
Next i
a(imax) = a(i1)
a(i1) = max
i1 = i1 + 1
Loop
Worksheets(1).Range("c1") = "Рассортированный массив"
j = 2
For i = 1 To n
Worksheets(1).Cells(j, 3) = a(i)
j = j + 1
Next i
End Sub
Пример 3
Вычислить
.
Вычисление суммы прекратить, когда при
каком-то значенииi,
общий член ряда станет <=
Текст программного кода будет выглядеть следующим оьразом
Public Sub Summa_ряда()
Const eps = 0.001
Dim sum As Double, ai As Double
Dim n As Integer, i As Integer
Dim j As Integer
Dim f1 As Integer, f2 As Integer
sum = 0
i = 1
ai = 1 / 2
Do Until ai <= eps
sum = sum + ai
i = i + 1
f1 = 1
For j = 1 To i
f1 = f1 * j
Next j
f2 = 1
For j = 1 To 2 * i
f2 = f2 * j
Next j
ai = f1 / f2
Loop
MsgBox "Значение i=" & i & Chr(10) & _
"Значение ai=" & ai & Chr(13) & _
"Значение Sum=" & sum
End Sub
Пользовательские подпрограммы
Часто в программировании одинаковые блоки алгоритма используются в разных частях программы. И тогда удобно применять концепцию пользовательских подпрограмм, т.е. написать подпрограмму, которую можно использовать по имени в разных частях программы по имени с различными аргументами (параметрами)
В VBA существуют два типа подпрограмм:
Подпрограммы-процедуры (процедуры).
Подпрограммы-функции (функции)
12.1 Подпрограмма – процедура – является самостоятельной частью программного кода, имеет свое имя, может иметь параметры, выполняет последовательность инструкций языка VBA.
Синтаксис описания:
[Private Public] Sub <имя процедуры> ([<список параметров>])
<операторы>
[Exit Sub]
< операторы >
End Sub
Здесь:
Private – ключевое слово, указывающее на то, что процедура доступна для всех процедур в данном модуле и недоступна процедурам, находящимся в других модулях.
Public - ключевое слово, указывающее на то, что процедура доступна во всех модулях проекта. Эта область действия процедуры принята по умолчанию, поэтому использовать ключевое слово Public при объявлении процедуры не обязательно
<имя процедуры> - Имя процедуры, которое удовлетворяет всем правилам создания идентификатора в VBA
([<список параметров>]) – это список параметров, значения которых передаются в процедуру или возвращаются из процедуры. Разделителем в списке формальных параметров является запятая.
<операторы> - группа инструкций, выполняемых в процедуре
[Exit Sub] – оператор, приводящий к немедленному выходу из процедуры.
Вызов подпрограммы – процедуры пользователя из другой процедуры можно произвести несколькими способами:
<имя процедуры> <список аргументов>
Call <имя процедуры> <список аргументов>
Примечание:
<Список параметров>отличается от <списка аргументов>тем, что первый указывается при описании подпрограммы, второй – при ее вызове в основной программе.
12.2 Подпрограмма – функция – это класс подпрограмм, отличается тем, что в результате выполнения функции всегда вычисляется единственное возвращаемое значение, которое присваивается переменной с именем данной функции.
Синтаксис описания:
[Private ½ Public] Function <имя функции> ([<список параметров>]) [As<тип функции>]
<операторы>
[Exit Function]
< операторы >
<имя функции> = <выражение>
End Function
Здесь:
<имя функции> - Имя функции, которое удовлетворяет всем правилам создания идентификатора в VBA
([<список параметров>])- список параметров, который описывает передаваемые функции данные
<тип функции> - определяет тип возвращаемого функцией значения ( по умолчанию это тип Variant). Следует помнить, что значения, сохраняемые или обрабатываемые как тип Variant, занимают больше памяти, чем любой другой тип данных, и на их обработку требуется больше времени. Поэтому при объявлении функции всегда следует указывать тип возвращаемого результата.
Примечание:
В теле функции должен быть оператор присваивания, который имени функции присваивает значение, являющееся результатом выполнения функции.
Вызов подпрограммы – функции пользователя осуществляется по имени в выражении, как любой стандартной функции VBA. За именем функции в круглых скобках указывается список аргументов.
Список параметров и список аргументов
<Список параметров> отличается от <списка аргументов> тем, что первый указывается при описании подпрограммы, второй – при ее вызове в основной программе.
<Список параметров> позволяет передать в подпрограмму требуемые значения из вызывающей программы и имеет следующий синтаксис:
Синтаксис:
[ByRef | ByVal] <имя параметра1> [As <Тип>], [ByRef | ByVal] <имя параметра2> [As <Тип>], [ByRef | ByVal] <имя параметра3> [As <Тип>], …
Здесь:
<Тип> позволяет явно задать тип передаваемых значений. Если тип опущен, то по умолчанию принимает значение Variant.
Ключевое слово ByVal (передача по значению) используется в тех случаях, когда желают, чтобы изменение параметров внутри процедуры не приводило к изменению соответствующих аргументов процедуры в основной программе.
Использование ByRef (передача по ссылке) или, если ключевое слово опущено, означает, что при изменении параметров внутри процедуры происходит изменение соответствующих параметров в основной программе.
При вызове подпрограммы пользователя в основной программе используется <Список аргументов>.
В <Списке аргументов> аргументы перечисляется через запятую.
Соответствие между списком параметров и списком аргументов:
Количество и типы в списке параметров и в списке аргументов должны соответствовать друг другу.
Аргументы, соответствующие параметрам с ключевым словом ByVal могут быть константами, переменными и выражениями.
Аргументы, сответсвующие параметрам с ключевывым словом ByRef (или по умолчанию), должны быть переменными.
Для выхода из подпрограммы и возврата в основную программу, опуская оставшиеся операторы, используется Exit Sub (в процедурах) и Exit Function (в функциях).
Примеры:
Пример 1. Вычислить с помощью подпрограммы пользователя площадь прямоугольника.
С помощью процедуры:
Sub Sgure(ByVal a As Long, ByVal b As Long, ByRef ss As Long)
ss = a * b
End Sub
Public Sub Test_sub()
Dim a As Long
Dim b As Long
Dim s As Long
b = 2
'Sgure 5, b, s
Call Sgure(5, b, s)
MsgBox "s=" & s
End Sub
С помощью функции:
Function SgureF(ByVal a As Long, ByVal b As Long) As Long
SgureF = a * b
End Function
Public Sub Test_Function()
Dim a As Long
Dim b As Long
Dim s As Long
b = 2
s = SgureF(5, b)
MsgBox "s=" & s
End Sub
Пример 2. Показывает отличие передачи параметра по ссылке от передачи параметра по значению.
Sub DemoByValByRef(ByVal a, b, ByRef c)
'a - передается по значению
'b - передается по умолчанию
' по ссылке (ByRef)
' c - передается по ссылке
a = a + 1
b = b + a
c = c + a
End Sub
Public Sub Test()
a = 1
b = 10
c = 100
DemoByValByRef a, b, c
MsgBox "a=" & a ‘ a=1
MsgBox "b=" & b ‘ b=12
MsgBox "c=" & c ‘ c=102
End Sub
Пример 3
Вычислить
.
Вычисление суммы прекратить, когда при
каком-то значенииi,
общий член ряда станет <=
Текст программного кода будет выглядеть следующим образом
Public Sub Summa_ряда()
Const eps = 0.001
Dim sum As Double, ai As Double
Dim n As Integer, i As Integer
sum = 0
i = 1
ai = 1 / 2
Do Until ai <= eps
sum = sum + ai
i = i + 1
ai = Factor(i) / Factor(2 * i)
Loop
MsgBox "Значение i=" & i & Chr(10) & _
"Значение ai=" & ai & Chr(13) & _
"Значение Sum=" & sum
End Sub
Function Factor(n As Integer) As Long
Factor = 1
For i = 1 To n
Factor = Factor * i
Next i
End Function
Тестовые задания: