информатика.методичка
.pdfмодуль объекта CommandButton2, который в свойстве Caption переименованв«Выход», обеспечиваетзавершениефункционирования объекта UserForm.
9.4. Решение квадратных уравнений
Создание пользовательской формы организуется следующим образом:
войти в VBA – Alt-F11;
выбрать Insert (вставка);
выбрать UserForm.
Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:
шесть объектов Label;шесть объектов Textbox;три объекта Frame;
два объекта CommandButton,
расположив их, как показано на рис. 9.7.
В объекте UserForm используются три объекта Frame (рамка) (см. рис. 9.7), два из которых переименованы в «Исходные данные» и «Результаты».
Далее открыть модуль, программно поддерживающий объект CommandButton1 (в свойстве Caption переименованный в «Вычислить»), объекта UserForm, и написать программу, обеспечивающую организацию взаимодействия выбранных объектов для получения результатов при вычислении корней квадратного уравнения с заданными коэффициентами a, b и c.
Программа решения квадратных уравнений
Private Sub CommandButton1_Click() Dim A As Double, B As Double, C As Double
Dim X1 As Double, X2 As Double, D As Double
If IsNumeric(TextBoxA) And IsNumeric(TextBoxB) And IsNumeric(TextBoxC) Then
A = TextBoxA: B = TextBoxB: C = TextBoxC
60
Рис. 9.7
D = B ^ 2 - 4 * A * C: TextBoxD = D If D >= 0 Then
X1 = (-B + D ^ (1 / 2)) / (2 * A)
X2 = (-B - D ^ (1 / 2)) / (2 * A) TextBoxX1.Visible = True: TextBoxX1 = X1 TextBoxX2.Visible = True: TextBoxX2 = X2 Label4.Visible = True
Label4 = "X1" Label5.Visible = True Else
TextBoxX1.Visible = False
TextBoxX2.Visible = False Label4 = "Нет решений" Label5.Visible = False End If
61
Else
MsgBox "ВВЕДИТЕA,B,C"
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Некоторые комментарии к программе:
в программе для удобства в Properties в разделе Name объект TextBox1 переименован в TextBoxA, аналогично TextBox2 – TextBoxB, TextBox3 – TextBoxC, TextBox4 – TextBoxX1, TextBox5 – TextBoxX2 и TextBox6 – TextBoxD;
в программе используется функция INumeric(TextBox), проверяющая, являются ли данные, помещенные в объекте TextBoxA, или в объекте TextBoxB, или в объекте TextBoxC, цифровыми;в программе обрабатывается ситуация, когда дискриминант приобретает отрицательное значение, в этом случае объектам
TextBoxX1, TextBoxX2 и Label5 сообщается свойство Visible со значением False, в результате чего указанные объекты становятся невидимыми, а объекту Label4 присваивается символьная кон-
станта Нет решений (рис. 9.8);
модуль объекта CommandButton2, который в свойстве Caption переименован в «Выход», обеспечивает завершение функционирования объекта UserForm.
9.5. Вычисление максимума, минимума, среднего арифметического, среднего геометрического и среднего гармонического
Создание пользовательской формы организуется следующим образом:
войти в VBA – Alt-F11;
выбрать Insert (вставка);
выбрать UserForm.
Рис. 9.8
Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:
одинадцать объектов Label;десять объектов Textbox;три объекта Frame;
два объекта CommandButton,
расположив их, как показано на рис. 9.9.
В объекте UserForm используются три объекта Frame (рамка) (см. рис. 9.9), два из которых переименованы в «Исходные данные» и «Результаты».
Далее открыть модуль, программно поддерживающий объект CommandButton1 (в свойстве Caption переименованный в «Вычислить») объекта UserForm, и написать программу, обеспечивающую организацию взаимодействия выбранных объектов для
62 |
63 |
Рис. 9.9
получения результатов при вычислении максимального, минимального значений из пяти введенных чисел, а также вычисления среднего арифметического, среднего геометрического и среднего гармонического значений.
Программа вычисления максимума, минимума, среднего арифметического, среднего геометрического
и среднего гармонического
Private Sub CommandButton1_Click()
If Not IsNumeric(TextBox1) Or Not IsNumeric(TextBox2) Or
Not IsNumeric(TextBox3) Or Not IsNumeric(TextBox4) Or Not
IsNumeric(TextBox5) Then
MsgBox "Исходныеданныевведеныневерноилинеполностью!", , "Введите
числа"
Exit Sub
End If
A = CDbl(TextBox1)
B = CDbl(TextBox2)
C = CDbl(TextBox3)
D = CDbl(TextBox4)
E = CDbl(TextBox5)
TextBox6 = Application.WorksheetFunction.Max(A, B, C, D, E) TextBox7 = Application.WorksheetFunction.Min(A, B, C, D, E) TextBox8 = Application.WorksheetFunction.Average(A, B, C, D, E) TextBox9 = (A * B * C * D * E) ^ (1 / 5)
If A <> 0 And B <> 0 And C <> 0 And D <> 0 And E <> 0 Then TextBox10.Visible = True
Label11.Visible =
TextBox10 = 5 / (1 / A + 1 / B + 1 / C + 1 / D + 1 / E) Else
TextBox10.Visible = False Label11.Visible = True End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Некоторые комментарии к программе:
в программе используется функция INumeric(TextBox), проверяющая, являются ли данные, помещенные в объекте TextBox1, или в объекте TextBox2, или в объекте TextBox3, или в объекте TextBox4, или в объекте TextBox5, цифровыми;
в программе используется функция CDbl(TextBox), обеспечивающая преобразование данных объектов TextBox1, TextBox2,
TextBox3, TextBox4 и TextBox5 в цифровые;
в программе используются функции вычисления максимума
Max(A, B, C, D, E), минимума Min(A, B, C, D, E) и среднего ариф-
метического значения Average(A, B, C, D, E) для пяти введенных чисел A, B, C, D, E;
в программе при вычислении среднего гармонического обрабатывается ситуация невозможности деления на ноль, при этом
64 |
65 |
вобъектTextBox10 выводитсярезультатвычислениясреднегогармонического, а объект Label11 делается невидимым за счет сообщенияемучерезсвойствоVisible значенияFalse, впротивномслучае – наоборот: невидимым делается объект TextBox10, а объекту Label11 через свойство Caption передается значение «Числа должны быть отличны от нуля!» (рис. 9.10);
Рис. 9.10
модуль объекта CommandButton2, который в свойстве Caption переименован в «Выход», обеспечивает завершение функционирования объекта UserForm.
9.6. Использование объекта ScrollBar (полоса прокрутки)
Создание пользовательской формы организуется следующим образом:
войти в VBA – Alt-F11;
выбрать Insert (вставка);
выбрать UserForm.
Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:
три объекта Textbox;
три объекта ScrollBar;
один объект CommandButton,
расположив их, как показано на рис. 9.11.
Рис. 9.11
Далее войти вVBA (Alt-F11), выбрать объект UserForm. Затем, выбрав сначала, например, объект ScrollBar1, написать соответствующую программу, обеспечивающую организацию взаимодействия выбранных объектов для изменения цвета объект UserForm в зависимости от состояний объектов ScrollBar1, ScrollBar2
иScrollBar3.
Итак для каждого из семи объектов объекта UserForm.
66 |
67 |
Программы использования объекта ScrollBar
Private Sub ScrollBar1_Change()
UserForm5.BackColor = RGB(ScrollBar1, ScrollBar2, ScrollBar3)
TextBox1 = CStr(ScrollBar1)
End Sub
Private Sub ScrollBar2_Change()
UserForm5.BackColor = RGB(ScrollBar1, ScrollBar2, ScrollBar3)
TextBox2 = CStr(ScrollBar2)
End Sub
Private Sub ScrollBar3_Change()
UserForm5.BackColor = RGB(ScrollBar1, ScrollBar2, ScrollBar3)
TextBox3 = CStr(ScrollBar3)
End Sub
Private Sub TextBox1_Change() Dim Red As Integer
If (TextBox1 = " ") Or (TextBox1 = "") Then Red = 0
Else
Red = CDbl(TextBox1) End If
If (Red >= 0) And (Red <= 255) Then ScrollBar1.Value = Red
UserForm5.BackColor = RGB(ScrollBar1, ScrollBar2, ScrollBar3) Else
MsgBox "от 0 до 255" End If
End Sub
Private Sub TextBox2_Change() Dim Green As Byte
Green = TextBox2
If Green >= 0 And Green <= 255 Then ScrollBar2.Value = Green
UserForm5.BackColor = RGB(ScrollBar1, ScrollBar2, ScrollBar3) Else
MsgBox "от 0 до 255" End If
End Sub
68
Private Sub TextBox3_Change() Dim Blue As Byte
Blue = TextBox3
If Red >= 0 And Blue <= 255 Then ScrollBar3.Value = Blue
UserForm5.BackColor = RGB(ScrollBar1, ScrollBar2, ScrollBar3) Else
MsgBox "от 0 до 255" End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Некоторые комментарии к программе:
в модуле Private Sub ScrollBar1_Change(), программно поддерживающем объект ScrollBar1, используется функция
RGB(ScrollBar1, ScrollBar2, ScrollBar3), вычисленное значение которой присваивается как значение свойства .BackColor объекту
UserForm5;
функцияRGB(ScrollBar1, ScrollBar2, ScrollBar3) естьфунк-
ция от трех формальных параметров, фактическими параметрами которой в данном случае являются состояния объектов ScrollBar1, ScrollBar2, ScrollBar3;
состояние каждого из объектов ScrollBar1, ScrollBar2, ScrollBar3, т. е. положение «бегунка» на полосе прокрутки, как количественное значение изменяется в свойствах maх и min панели
Properties в диапазоне 255–0;
этозначение, преобразованноеспомощьюфункцииCStr(ScrollBar1) в символьную величину, присваивается объекту TextBox1 для визуального отображения;
аналогичным образом построены и функционируют моду-
ли Private Sub ScrollBar2_Change() и Private Sub ScrollBar3_ Change();
в модуле Private Sub TextBox2_Change(), программно под-
держивающем объект TextBox2, переменной Green присваивается
69
значение, внесенное в окно объекта TextBox2, а затем это значение, если оно принадлежит диапазону 0–255, передается объекту ScrollBar2. Таким образом управлять изменением цвета объекта UserForm2 можно за счет перемещения «бегунка» на полосе прокрутки объекта ScrollBar2 и, наоборот, путем внесения целого числа в окно объекта TextBox2;
аналогичным образом построены и функционируют модули
Private Sub TextBox1_Change() иPrivate Sub TextBox3_Change();
модуль объекта CommandButton2, который в свойстве Caption переименован в «Выход», обеспечивает завершение функционирования объекта UserForm.
10. РАБОТА С ОБЪЕКТОМ LISTBOX
Целью лабораторной работы является приобретение навыков практического использования объекта ListBox, т. е. заполнение и обработка данных.
Объект ListBox применяется для хранения списка значений, из которогопользовательможетвыбратьодноилинесколькозначений, которые в последующем будут использоваться в тексте программы.
Заполняется объект ListBox только программно!
При этом используются следующие способы заполнения:поэлементно, если список состоит из одной колонки;массивом, если список состоит из одной колонки;из диапазона, в который предварительно введены элементы
списка;поэлементно, если список состоит из нескольких колонок;
массивом, если список состоит из нескольких колонок. Создаваемые объекты ListBox можно размещать как на спе-
циально созданных объектах UserForm, например, на одном (рис. 10.1) или на нескольких (рис. 10.2), так и на листах Excel (рис. 10.3), используя при этом для вызова и заполнения кнопки
(объекты CommandButton).
Рис. 10.1
Рис. 10.2
70 |
71 |
Рис. 10.3
ЧАСТЬ ПЕРВАЯ
10.1. Заполнение объектов ListBox, расположенных на одном объекте UserForm
Создание пользовательской формы c объектами ListBox организуется следующим образом:
войти в VBA – Alt-F11;
выбрать Insert (вставка);
выбрать UserForm.
72
Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:
пять объектов ListBox;один объект TextBox;
два объекта CommandButton,
расположив их, как показано на рис. 10.1.
Далее войти в VBA (Alt-F11), выбрать объект UserForm. Затем, выбравобъектCommandButton1, написатьсоответству-
ющую программу, обеспечивающую заполнение данными объек-
тов ListBox1 – ListBox5.
Для реализации заполнения объекта ListBox3 способом «Из диапазона» необходимо предварительно ввести элементы списка в выбранный диапазон, например A1:B6 (см. рис. 10.1).
Программа заполнения объектов ListBox, расположенных на одном объекте UserForm
Private Sub CommandButton1_Click()
Dim S(1 To 5, 1 To 3) As String
Dim i As Integer, j As Integer
'Заполнение списка поэлементно, 1 колонка
With ListBox1
.AddItem "Июнь"
.AddItem "Июль"
.AddItem "Август"
.AddItem "Сентябрь" End With
'Заполнение списка массивом, 1 колонка
With ListBox2
.List = Array("Июнь", "Июль", "Август", "Сентябрь", "Октябрь") TextBox1 = .ListIndex
.ControlSource = "A7" End With
'Заполнение списка из диапазона
With ListBox3
.ColumnCount = 2
73
.RowSource = "A1:B6"
.ControlSource = "A8" End With
'Заполнение списка поэлементно, несколько колонок
With ListBox4
.ColumnCount = 3
.AddItem "Июнь"
.List(0, 1) = "0.6"
.List(0, 2) = "30"
.AddItem "Июль"
.List(1, 1) = "0.7"
.List(1, 2) = "31"
.AddItem "Август"
.List(2, 1) = "0.8"
.List(2, 2) = "31"
.AddItem "Сентябрь"
.List(3, 1) = "0.9"
.List(3, 2) = "30" End With
'Заполнение списка массивом, несколько колонок
S(1, 1) = "№": S(1, 2) = "ФИО": S(1, 3) = "Оценка" S(2, 1) = "1": S(2, 2) = "Петров": S(2, 3) = "3"
S(3, 1) = "2": S(3, 2) = "Шацков": S(3, 3) = "5" S(4, 1) = "3": S(4, 2) = "Фролькис": S(4, 3) = "2" S(5, 1) = "4": S(5, 2) = "Печкин": S(5, 3) = "4" With ListBox5
.ColumnCount = 3
.List = S
End With
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Некоторые комментарии к программе:
в модуле Private Sub CommandButton1_Click(), программ-
но поддерживающем объект CommandButton1, при реализации способа поэлементного заполнения списка ListBox1 к объекту ListBox1 применяется метод AddItem, с помощью которого
в операторе цикла With добавляются элементы списка, например
.AddItem "Июнь" и т. д.;
вмодулеPrivate Sub CommandButton1_Click(), программно поддерживающем объект CommandButton1, при реализации способа заполнения списка ListBox2 массивом, если список состоит из одной колонки, к объекту ListBox2 применяется свойство .List, в качестве значения которого объекту ListBox2 передается одномерный массив символьных констант "Июнь", "Июль" и т. д.;
для списка ListBox2 применяется свойство .ControlSource, с помощью которого устанавливается ячейка (в данном случае это "A7"), в которую возвращается выбранный элемент списка ListBox2; так как на рис. 10.1 в списке ListBox2 была выбрана вторая строка, второй элемент списка "Июль", то поэтому этот элемент и отобразился в ячейке A7;
в операторе цикла With объекта ListBox2 для объекта TextBox1 применяется свойство .ListIndex, которое возвращает номер текущего, т. е. выбранного, элемента списка. Так как первоначально после вызова объекта UserForm объекты ListBox1 – ListBox5 не заполнены и, следовательно, в объекте ListBox2 никакой элемент списка не выбран, то после нажатия кнопки «Заполнить» в окне объекта TextBox1 (см. рис. 10.1) появляется значение «-1». После выбора в объекте ListBox2 элемента списка "Июль" и повторного нажатия кнопки «Заполнить» в окне объекта TextBox1 (см. рис. 10.1) появляется значение «1», а не «2», так как нумерация элементов списка начинается с нуля;
вмодулеPrivate Sub CommandButton1_Click(), программно поддерживающем объект CommandButton1, при реализации способа заполнения списка ListBox3 из диапазона к объекту ListBox3 применяется свойство RowSours, с помощью которого устанавливается диапазон, содержащий элементы списка, в данном случае
"A1:B6";
так как данные, передаваемые из указанного диапазона в объект ListBox3, представляют собой таблицу, состоящую из двух столбцов, токобъектуListBox3применяетсясвойство.ColumnCount, значение которого устанавливает число столбцов в списке = 2;
74 |
75 |
для списка ListBox3 применяется свойство .ControlSource, с помощью которого устанавливается ячейка (в данном случае это "A8"), в которую возвращается выбранный элемент списка ListBox3. Так как на рис. 10.1 в списке ListBox3 была выбрана пятая строка списка ListBox3, элементом которого является "5", то поэтому этот элемент и отобразился в ячейке A8;
в модуле Private Sub CommandButton1_Click(), программ-
но поддерживающем объект CommandButton1, при реализации способа заполнения списка ListBox4 поэлементно, если список состоит из нескольких колонок, к объекту ListBox4 применяется метод AddItem, с помощью которого в операторе цикла With добавляются элементы списка, например .AddItem "Июнь" и т. д.; к объекту ListBox4 применяется свойство .List, в качестве значений которого элементам списка ListBox4, находящимся на пересечении указанных строк и столбцов, сообщаются соответствующие символьные константы, например "0.6", "30" и т. д.;
так как данные, формируемые в объекте ListBox4, представляют собой таблицу, состоящую из трех столбцов, то к объекту ListBox4 применяется свойство .ColumnCount, значение которого устанавливает число столбцов в списке = 3;
в модуле Private Sub CommandButton1_Click(), программ-
но поддерживающем объект CommandButton1, при реализации способазаполнения спискаListBox5 массивом, если список состоит из нескольких колонок, сначала объявляется двумерный массив S, а затем с помощью операторов присваивания выполняется заполнение элементов массива. После этого к объекту ListBox5 применяется свойство .List, в качестве значения которого объекту ListBox5 передается двумерный массив символьных констант "№", "ФИО", "Оценка" и т. д. Кроме того, к объекту ListBox5 применяется свойство .ColumnCount, значение которого устанавливает число столбцов в списке = 3;
модуль объекта CommandButton2, который в свойстве Caption переименован в «Выход», обеспечивает завершение функционирования объекта UserForm.
10.2. Заполнение объектов ListBox, расположенных на разных объектах UserForm
Создание пользовательских форм c объектами ListBox целесообразно начинать с формирования кнопочного меню (см.
рис. 10.2).
Тогда в каждом модуле, программно поддерживающем соответствующий объект CommandButton, находится обращение к определенному объекту UserForm.
10.2.1. Заполнение списка поэлементно, если список состоит из одной колонки
Вызов объекта UserForm1, на базе которого организуется заполнение списка объекта ListBox1 поэлементно (если список состоит из одной колонки), осуществляется с помощью следующего программного модуля:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Создание пользовательской формы c объектом ListBox1 организуется следующим образом:
войти в VBA – Alt-F11;
выбрать Insert (вставка);
выбрать UserForm.
Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:
один объект ListBox;
два объекта CommandButton,
расположив их, как показано на рис. 10.4.
Далее войти в VBA (Alt-F11), выбрать объект UserForm1. Затем, выбравобъектCommandButton1, написатьсоответству-
ющую программу, обеспечивающую заполнение данными объек-
та ListBox1.
76 |
77 |
Рис. 10.4
Программа поэлементного заполнения списка объекта ListBox, если список состоит
из одной колонки
Private Sub CommandButton1_Click()
‘Заполнение списка поэлементно, 1 колонка
With ListBox1
.AddItem «Июнь»
.AddItem «Июль»
.AddItem «Август»
.AddItem «Сентябрь» End With
End Sub
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
78
Некоторые комментарии к программе:
модуль объекта CommandButton2, который в свойстве Caption переименован в «Закрыть», обеспечивает завершение функционирования объекта UserForm за счет применения к объекту
UserForm1 метода Hide.
10.2.2. Заполнение списка массивом, если список состоит из одной колонки
Вызов объекта UserForm2, на базе которого организуется заполнение списка объекта ListBox1 массивом (если список состоит из одной колонки), осуществляется с помощью следующего программного модуля:
Private Sub CommandButton2_Click()
UserForm2.Show
End Sub
Создание пользовательской формы c объектом ListBox1 организуется следующим образом:
войти в VBA – Alt-F11;
выбрать Insert (вставка);
выбрать UserForm.
Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:
один объект ListBox;один объект TextBox;
два объекта CommandButton,
расположив их, как показано на рис. 10.5.
Далее войти в VBA (Alt-F11), выбрать объект UserForm2. Затем, выбравобъектCommandButton1, написатьсоответству-
ющую программу, обеспечивающую заполнение данными объек-
та ListBox1.
79