Формы записи алгоритмов
Loop
Do
Loop
Dim A As Variant
End Select
Select Case KeyKode
Case vbkey 0: MsBox “Нажали 0”
Case vbkey 1, vbkey 2: MsBox “Нажали 1 или 2”
Case vbkey 3 to vbkey 9, vbkey A to vbkey z: MsBox “Нажали цифру от 3 до 9 или буквенную клавишу”
Case Else: MsBox “Нажата не буква и не цифра”
End Sub
8.10.5. Операторы повтора
Оператор цикла For_Next – это наиболее широко используемый оператор, позволяющий организовать циклический процесс.
В этом операторе заранее известно число повторений цикла. Заданы начальное, конечное значения параметра (переменной) цикла и шаг изменения параметра цикла. Он имеет вид:
For <переменная цикла> = <начало> То <конец> [Step<шаг>]
<блок операторов 1> ‘тело цикла
[Exit For] ‘прекращение цикла по внутреннему условию
<блок операторов 2> ‘– повторяется определённое число раз
Next <переменная цикла>
Пример 1:Суммирование элементов массива:
A = Array (1, 4, 12, 23, 34, 3, 24)
S = 0
For i = LBound (A) to UBound (A)
S = S+A(i)
Next i
Пример 2: Нахождение произведения первых n натуральных чисел.
Sub Factor ()
Const n as Integer=20, Fact as Integer=1
Dim i as Integer
For i=1 to n
Fact = Fact*i
Next i
MsgBox Format (Fact, “############”)
‘ Будет выведено 2432902008176640000
End Sub
Пример 3: Суммирование элементов выделенного диапазона
With Selection
n=.Rows.Count
m=.Column.Count
End With : S=0
For i=1 to n
For j=1 to m
S=S+selection.Cells(i,j).value
Next j
Next i
with Section.End(xlDown) ‘ Здесь под I столбцом выделенного
.offset (1,0).value = “Сумма” ‘диапазона выводится «сумма»,
.offset (1,1).value = S ‘а в соседней клетке значение S
End With
Оператор Do _Loop является вторым оператором, позволяющим организовать циклический процесс.
Он создаёт логически управляемый цикл. Имеет 4 модификации:
а) условие True в начале цикла
Do [While <условие>] – выполняется пока условие истинно
[<блок операторов>]
[Exit Do]
[<блок операторов>]
б) условие True в конце цикла:
[<блок операторов>]
[Exit Do]
[<блок операторов>]
Loop [While <условие>]
в) условие False в начале цикла:
Do [Until <условие>] – выполняется пока условие
[<блок операторов>] не станет истинным
[Exit Do]
[<блок операторов>]
г) условие False в конце цикла:
Do
[<блок операторов>]
[Exit Do]
[<блок операторов>]
Loop [Until <условие>]
Пример 1:
Option Explicit
Sub Do_Rnd()
Dim a As Single: Dim I as Integer
Randomize
Do While True
a = Rnd()
Debug.Print a ‘печать случайного числа
If a>0.99 Then Exit Do
Loop
End Sub
Пример 2: Последовательное отображение имен файлов с расширением .sys на устройстве С:
Файл = Dir (“C:\*.sys”)
Do while <Len (Файл)
MsBox Файл – Без Exit!
Файл = Dir
Loop
Пример 3: Суммирование всех вводимых чисел.
S=0: Do
x=InputBox (“Введите число”)
If Not IsNumeric (x) then Exit Do
S=S+x
Loop
Пример 4:Код, ожидающий правильного ввода пароля
Do : Пароль = InputBox(“Введите пароль”)
Loop Until Пароль = “Привет”
Следующей разновидностью оператора цикла является оператор While _ Wend.
Его невозможно прервать – нет Exit Do.Он имеет следующую конструкцию:
While <условие>
<блок операторов>
Wend
Пример: Бросается игральная кость до выпадения 6 очков.
Dim Бросок As integer, Очки As integer
Randomize
Очки = Int(6*Rnd())+1
Бросок = 1
While Очки<6
Бросок = Бросок + 1
Очки = Int (6+ Rnd ())+1
Wend
MsgBox “Победили на броске” & CStr(Бросок)
Циклический оператор For Each _ Next относится к операторам объектного типа, т.е. применяется к массивам и наборам элементов. Имеет вид:
For Each <элемент>In<набор>
[<блок операторов >]
[Exit For] ‘– используется для прерывания цикла
[<блок операторов >]
Next [<элемент>]
Пример 1: Суммирование элементов массива
Dim A As Variant
Dim b, s as Integer
A = Array (1, 4, 12, 23, 34, 3, 23)
S = 0
b=InputBox (" введите с клавиатуры значение для b ")
For Each b in A
S=S+b
Next b
Пример 2:
S = 0
For Each с in Selection.Cells
S = S+c.value
Next c 'Из выделенного диапазона
MsgBox “S=”&CStr(S)
Пример 3:Работа с семейством рабочих листов – удаление из книги рабочего листа Тест.
For Each Лист in Worksheets
If Лист.Name = “Tест” then
Лист.Delete
End If
Next Лист
Пример 4:Работа с семейством ячеек в диапазоне А1 : С4, ячейки с положительными значениями окрашиваются в синий цвет, а с неположительными – в красный.
With Ячейка
if .value <=0 then
.Interior.ColorIndex =3
else .Interior.ColorIndex =5
End if
End With
Next Ячейка
Пример 5:Оператор With избавляет программиста от использования большого количества повторений имени одного и того же объекта или работе с его свойствами и методами. Происходит структурирование кода, что делает его более прозрачным.
1 вариант:
With Range (“A1”)
.value = 3
.Font.Italic = True
End With
2 вариант:
With Range (“A1”)
.value = 3
With .Font
.italic = True
.size = 12
.Bold = True
.Color = RGB(255, 30, 255)
End With
End With
8.11. Встроенные диалоговые окна
8.11.1. Окно ввода информации
Встроенных диалоговых окон существует 2 типа: окно сообщений и окно ввода. Окно сообщений выводит простейшую информацию (MsgBox), а окно ввода (InputBox) обеспечивает ввод информации.
Функция InputBox – окно с двумя кнопками ОК и Cancel, строкой сообщения и полем ввода. Рассмотрим оператор, выдающий это окно на экран.
InputBox (Prompt[,Title] [,Default] [,xPos] [,yPos] [,Helpfile, Context]), где:
Prompt - строковое выражение, отображаемое в строке заголовка окна
Title – строковое выражение отображаемое в строке заголовка окна.
Default - строковое выражение отображаемое в поле ввода по умолчанию, если не ввести другое.
xPos – расстояние по горизонтали между левой границей ДО и левым краем экрана (если нет, то по центру горизонтали)
yPos - расстояние по вертикали между верхней границей ДО и верхним краем экрана (если нет, на 1/3 высоты экрана)
Helpfile – адрес файла-справки о ДО, а Context – номер соответствующего раздела в системе.
Пример:Option Explicit
Sub Msg_Inp()
Dim Response As Integer
Dim Message As String
Dim Default As String
Dim Title As String
Dim Help As String
Dim Style As Integer
Dim Ctxt As Integer
Message = «Введите Фамилию, Имя и Отчество студента» ‘ строка-‘сообщение
Title=”Пример окна для ввода” ‘Заголовок окна
Default = “Смирнов Игорь Александрович” ‘текст по умолчанию
Responce = InputBox (Message; Title; Default; 100; 100):End Sub
![]() |
Рис.61. Окно ввода данных
8.11.2. Встроенные диалоговые окна для обмена сообщениями
Они бывают нескольких типов.
А) Простое окно-сообщение
Пример: MsgBox (“Строка сообщения”)
Б) Функция MsgBox – выводит на экран ДО с сообщением, устанавливая режим ожидания нажатия кнопки пользователя.
MsgBox ((Prompt[,Buttons] [,Title] [,Helpfile, Context])
Prompt – строковое сообщение в ДО
Buttons – числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых в ДО кнопок: 0 – ОК+отмена; 2 – стоп + повтор + пропустить; 3 – да + нет + отмена; 4 – да + нет; 5 – повтор + отмена.
Остальные пункты команды, как в InputBox.
Кроме кнопок можно отображать значки:
16 – – белый на сером;
48 – – черный на светло сером;
Перед рисунком указан код этих значков.
Пример.Использование окна с кнопками Да, Нет, Отмена.
Sub Три_кнопки ()
Dim Сообщение As String: Dim Кнопкa As Integer
‘В Переменной сообщение задаётся структура ДО
Сообщение = vbYesNoCancel + vbQuestion + vbDefaultButton1
‘Кнопка возвращает число при нажатии кнопки
Кнопка = MsgBox (“Выберите Да, Нет, или Отмена?”, Сообщение, “Ещё пример”)
‘В зависимости от полученного значения будет одно из сообщений из Select Case:
Select Case Кнопка
Case vbYes: MsgBox “Выбрали Да”,vbInformation, “Еще пример”
Case vbNo: MsgBox “Выбрали Нет” vbInformation, “Еще пример”
|
|
End Select
End Sub
Пример. Использование в программе.
Sub Msg_Priim()
|
Randomize
a=rnd()
MsgBox “Значение случ. числа” &cstr(a) Рис. 62. Окно вывода результата
End Sub
Пример.Ввод значения.
x= InputBox(“Введите х”, “Пример”) : y=x^2
Для вывода в окне командной кнопки используются коды, приведённые в табл. 6.
Таблица 6
Коды командных кнопок и пиктограмм
Код | Константа | Описание |
vb OK Only vb OK Cancel vb AbortRetryIgnore vb YesNoCancel vb YesNo vb RetryCancel | Коды командных кнопок: OK OK, Отмена Прекратить, Повторить, Игнорировать Да, Нет, Отмена Да, Нет Повторить, Отмена | |
vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 | Коды активности по умолчанию Активная первая Активная вторая Активная третья | |
vbCritical vbQuestion vbExclamation vbInformation | Коды пиктограмм Важное сообщение Предупредительный запрос (справка) Предупредительное сообщение Информационное сообщение | |
vbApplicationModal vbSystemModal | Коды модальности Программное модальное описание (требуется обязательный ответ, работа приложения приостанавливается) Системное модальное описание (требуется обязательный ответ – работа всех приложений приостанавливается) |
Рассмотрим пример использования этих кодов (рис. 63).
Пример.Использование кодов кнопок.
Option Explicit
Sub Msg_Priim()
Dim Response As Integer:Dim Msg As String
Dim Title As String
Dim Help As String
Dim Style As Integer
Dim Ctxt As Integer
Msg= «Вы хотите продолжить?»
Style = 35’vbYesNoCancel+ vbDefaultButton1+ vbQuestion
Title=”Пример окна сообщения” ‘ (Заголовок окна)
Help = “DEMO.HLP” ‘Имя файла-подсказки
Ctxt = 0 ‘Номер контекста внутри файла-подсказки
Response = MsgBox ( Msg; Style; Title; Help; Ctxt ) ‘ присвоение
‘ переменной кода ответа
End Sub
Они обеспечивают ввод и редактирование данных файлов и таблиц. Для создания ДО выполнить команду:
Вставка/ Макрос/ Диалог – тип вставляемого листа.
На экране есть панель инструментов Формы для размещения и настройки элементов окна и основа для построения ДО пользователя.
![]() |
Рис. 63. Окно вывода с кнопками
8.11.3. Диалоговые окна пользователей
Состав пиктограмм панели инструментов Формы имеет вид, приведённый в табл. 7.
В диалоговом окне могут размещаться элементы произвольного вида, которые сознают наборы объектов. Доступ к конкретному элементу – по имени набора и имени или порядковому номеру элемента внутри набора.
Метки – не могут редактироваться пользователем в процессе работы с диалоговым окном, но могут изменяться программным путем с помощью свойства Caption объекта Labels()
Пример.Sheets(“<имя_листа_диалога>”). Labels (“<имя_объекта_метки>”). Caption = “строка_текста”
Поле ввода – является многострочным, содержит текст, который можно корректировать. Поле ввода входит в набор EditBoxes(), его можно редактировать и программным способом.
Пример.Sheets(“<имя_листа_диалога>”). EditBoxes (“<имя_окна>”). Text = “строка_текста”
Таблица 7
Перечень пиктограмм
Вид | Название вида |
Метка (создание текстовых вставок в окне) | Label |
Поле ввода текста | EditBox |
Рамка группы (обеспечение элементов окна) | GroupBox |
Командная кнопка (может быть назначена процедура или макросы) | CreateBatton |
Поле ввода со списком (комбинированное окно) | Combination List Edit |
Поле ввода с раскрывающимся списком | Combination Drop_Down Edit |
Редактор органов управления (свойства объекта) | Control Propites |
Переключатель координатной сетки | Toggle grid |
Флажок (контрольный индикатор) | Check Box |
Переключатель (кнопка выбора) | OptionBatton |
Окно списка | ListBox |
Раскрывающийся список (выпадающее окно) | Drop_Down |
Линейка прокрутки | ScrollBar |
Регулятор счетчика (спиннер) | Spinner |
Редактор кода программы | EditCode |
Выполнение диалога | RunDialog |
Рамка группы – обеспечивает объединение нескольких элементов ДО. Он изображается в первую очередь, а за тем в него размещают новые элементы. Для задания строки текста в новой строке рамки программным путем, используется его свойство Caption.
Флажок - обеспечивает аддитивный выбор, имеет свойство Value (значение True или False) и образует набор CheckBoxes().
Выбран не выбран
Кнопка переключателя – обеспечивает альтернативный выбор из списка взаимоисключающих опций. Образуют набор OptionBattons () Свойство Value имеет значения True или False - не выбрана кнопка.
Окно списка – предоставляет для выбора список значений, при этом редакция списка невозможна. Список формируется только программным путем. Он может быть организован с помощью свойств объекта:
а) ListFillRange – ссылка на диапазон ячеек электронной таблицы, содержащая значения элементов списка.
б) List() – перечисление элементов списка, непосредственно, замена старого списка новым целиком.
Раскрывающийся список – подобен окну списков, но входит в набор DropDowns()
Поле ввода со списком – объединяет окно списка и окно редактирования. При выборе элемента списка он автоматически появляется в окне редактирования, где его корректируют (здесь два различных окна).
Поле ввода с раскрывающимся списком – представляет собой комбинацию выпадающего списка, элементы которого редактируются.
Линейка прокрутки – создаёт вертикальную или горизонтальную линейку прокрутки. Value содержит положение ползунка – число, доступ к линейкам через набор ScrolBars(). Свойства Min и Max – это диапазон значений, а свойства LargeChange и SmallChange содержат величину изменения Value.
Регулятор счетчика – аналогичен линейке прокрутки, но нет свойства LargeChange.
ЗАКЛЮЧЕНИЕ
Если был внимательно изучен весь материал и проработан на компьютере, то вы должны были освоить основные разделы для работы с текстовым редактором, электронными таблицами и базой данных. Освоение пакета повысило ваш уровень работы с компьютером. Изучение операторов языка программирования VBA дало вам умение использовать эти операторы при написании программ, создании собственных модулей для расчётов в EXCEL
На практике наиболее распространены следующие формы представления алгоритмов:
- словесная (записи на естественном языке);
- графическая (изображения из графических символов);
- псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.);
- программная (тексты на языках программирования).
Словесный способ записи алгоритмов представляет собой описание последовательных этапов обработки данных. Алгоритм задается в произвольном изложении на естественном языке. |
Например. Записать алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел.
Алгоритм может быть следующим:
1. задать два числа;
2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма;
3. определить большее из чисел;
4. заменить большее из чисел разностью большего и меньшего из чисел;
5. повторить алгоритм с шага 2.
Описанный алгоритм применим к любым натуральным числам и должен приводить к решению поставленной задачи. Убедитесь в этом самостоятельно, определив с помощью этого алгоритма наибольший общий делитель чисел 125 и 75.
Словесный способ не имеет широкого распространения по следующим причинам:
- такие описания строго не формализуемы;
- страдают многословностью записей;
- допускают неоднозначность толкования отдельных предписаний.