![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Макросы занятие 7. Монопольные окна диалога.
Окна диалога Напоминаем, что существуют так называемые монопольные окна диалога. Монопольное окно блокирует выполнение программного кода до тех пор пока не будет получен ответ с помощью нажатия на выбранную кнопку, ввода данных или в результате закрытия окна. Примером может служить окно сохранения файла. Заметим, что обработка событий в зависимости от выбранной кнопки разная. Отсюда следует вывод о том, что само окно диалога возвращает разные значения, которые затем обрабатываются соответствующими кодами программ. Различают два типа окон диалога: MsgBox и InputBox. Первое – окно сообщений. Оно может иметь разные наборы кнопок, задаваемых с помощью одной из набора констант. Например, «Да» и «Нет» (vbYesNo) или «Прервать» «Повторить» «Игнорировать» (vbAbortRetryIgnore). Константу можно не задавать, тогда окно диалога при вызове будет выведено с кнопкой ОК.
VBA помогает пользователю определиться с порядком настроек окна сразу после набора инструкции MsgBox(комментарий, константа набора кнопок, наименование окна…). Значения, возвращаемые диалоговым окном при нажатии соответствующей кнопки: OK 1 Cancel 2 Abort 3 Retry 4 Ignore 5 Yes 6 No 7 Таким образом мы можем присвоить переменной значение возвращаемое окном диалога, например:
Второй тип окна – окно ввода значений. Предназначено для присвоения переменной конкретного значения по ходу выполнения программы. Синтаксис применения:
Содержимое в квадратных скобках общепринято считать как необязательные параметры. Пример: Razmer=InputBox(“Введите размерность”, ”Окно ввода”, 7) В программе переменной Razmer будет присвоено значение 7 по умолчанию или измененное пользователем при нажатии на «Да» или пустое при нажатии на “Cancel”.
Пример. Вызвать функцию площади круга или функцию длина окружности в диалоге. Sub диалог() радиус =InputBox(“Введите радиус круга”, ”Окно ввода”, 10) Otv=MsgBox(“Площадь круга – да, Длина окружности – нет”, vbYesNo, ”Ответьте! ”) if Otv=6 then площадь_круга(радиус) 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 End Sub В данном примере используется вложенный цикл по переменной j, который необходим для заполнения значений в колонках. Причем его предел зависит он от текущего номера строки. Пример. Начиная с активной ячейки, по запрашиваемой размерности, построить пирамидальную матрицу, причем грани пирамиды равны 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 Не пугайтесь кажущейся сложности выражений в индексах строк и колонок. Программный код не ваза, которую не соберешь после падения. Смелее экспериментируйте, но делайте это не беспорядочно, а на основе продуманной логики действий.
|