- •Макросы занятие 1. Макрорекодер и редакторVba.
- •Макросы занятие 2. Переменные, простые функции
- •Типы переменных
- •Макросы занятие 3. Условия, ветвление решения.
- •Макросы занятие 4. Циклы.
- •Макросы занятие 5. Функции для обработки текстов.
- •Макросы занятие 6. Объекты и их свойства.
- •Макросы занятие 7. Монопольные окна диалога.
- •Макросы занятие 8. Автоматизация для пользователя.
- •Макросы занятие 9 (на 8-12 часов). Разработка интерфейса пользователя.
- •Макросы занятие 10. Работа с массивами.
- •Макросы занятие 11. Работа с файлами.
- •Макросы занятие 12. Обязательные условия для выполнения индивидуальных заданий.
Макросы занятие 7. Монопольные окна диалога.
Окна диалога
Напоминаем, что существуют так называемые монопольные окна диалога. Монопольное окно блокирует выполнение программного кода до тех пор пока не будет получен ответ с помощью нажатия на выбранную кнопку, ввода данных или в результате закрытия окна.
Примером может служить окно сохранения файла. Заметим, что обработка событий в зависимости от выбранной кнопки разная. Отсюда следует вывод о том, что само окно диалога возвращает разные значения, которые затем обрабатываются соответствующими кодами программ.
Различают два типа окон диалога: MsgBoxиInputBox.
Первое – окно сообщений. Оно может иметь разные наборы кнопок, задаваемых с помощью одной из набора констант. Например, «Да» и «Нет» (vbYesNo) или «Прервать» «Повторить» «Игнорировать» (vbAbortRetryIgnore). Константу можно не задавать, тогда окно диалога при вызове будет выведено с кнопкой ОК.
VBAпомогает пользователю определиться с порядком настроек окна сразу после набора инструкцииMsgBox(комментарий, константа набора кнопок, наименование окна…).
Значения, возвращаемые диалоговым окном при нажатии соответствующей кнопки:
OK 1
Cancel 2
Abort 3
Retry 4
Ignore 5
Yes 6
No7
Таким образом мы можем присвоить переменной значение возвращаемое окном диалога, например:
Otv=MsgBox(“Коррекция – да, Новый груз – нет”,vbYesNo,”Ответьте!”), гдеvbYesNo– константа из окна списка, предлагаемого при заполненииMsgBox. При нажатии на «Да»otv=6, «Нет»otv=7. Далее через оператор условия можно выполнить ветвление программы.
Второй тип окна – окно ввода значений.
Предназначено для присвоения переменной конкретного значения по ходу выполнения программы. Синтаксис применения:
переменная=InputBox(“коментарий или вопрос”[,”заголовок”][,значение по умолчанию])
Содержимое в квадратных скобках общепринято считать как необязательные параметры.
Пример:
Razmer=InputBox(“Введите размерность”,”Окно ввода”,7)
В программе переменной Razmerбудет присвоено значение 7 по умолчанию или измененное пользователем при нажатии на «Да» или пустое при нажатии на “Cancel”.
Пример. Вызвать функцию площади круга или функцию длина окружности в диалоге.
Subдиалог()
радиус =InputBox(“Введите радиус круга”,”Окно ввода”,10)
Otv=MsgBox(“Площадь круга – да, Длина окружности – нет”,vbYesNo,”Ответьте!”)
ifOtv=6thenплощадь_круга(радиус)elseдлина_круга(радиус)
End Sub
Примечание. Предполагается, что вызываемые функции «площадь_круга», «длина_круга» запрограммированы и находятся в доступных модулях (см.занятие 2).
Пример. По запрашиваемой размерности построить единичную треугольную матрицу.
Subтреуг_матр1()
Range(“A1”).Select
Razm=InputBox(“Введите размерность матрицы”,”Окно ввода”,9)
for i=1 to Razm
for j=1 to i
Cells(i,j)=1
Next j
Next i
EndSub
В данном примере используется вложенный цикл по переменной j, который необходим для заполнения значений в колонках. Причем его предел зависит он от текущего номера строки.
Пример. Начиная с активной ячейки, по запрашиваемой размерности, построить пирамидальную матрицу, причем грани пирамиды равны 1, а центральное значение – номер слоя пирамиды вида:
1
1 2 1
1 2 3 2 1
Sub пирамида()
Ns= ActiveCell.Row
Nk= ActiveCell.Column
Razm=InputBox(“Введите размерность пирамиды”,””,9)
If Razm>Nk then
Razm=Nk
MsgBox “Размерность будет изменена до” + Str(Nk)+” строк”
End If
for i=1 to Razm
for j=1 to i
Cells(i+Ns-1, Nk+j -1) = i - j + 1
Cells(i+Ns-1,Nk-j+1) = i - j + 1
Next j
Next i
End Sub
Не пугайтесь кажущейся сложности выражений в индексах строк и колонок. Программный код не ваза, которую не соберешь после падения. Смелее экспериментируйте, но делайте это не беспорядочно, а на основе продуманной логики действий.
Задания
1. По заданной размерности построить треугольную единичную матрицу, а затем с цифрами по порядку, начиная с первой верхней ячейки
2. По заданной размерности построить «пирамиду», начиная с активной ячейки с учетом ограничений по колонкам
1
2 1 2
3 2 1 2 3
3. С учетом ограничений по колонкам и строкам «Песочные» часы вида
3 2 1 2 3
2 1 2
1
1
2 1 2
3 2 1 2 3
4. В файле ex2.xlsисправить программный код для вставки формул так, чтобы формулы вставлялись в произвольное количество строк
5. Для вектора произвольной размерности (в столбце Эл.таблицы) по выбору через диалог выполнять операции:
А) сумма элементов
Б) среднее
В) сумма четных элементов
Г) определить минимум и максимум