Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

информатика.методичка

.pdf
Скачиваний:
37
Добавлен:
29.03.2015
Размер:
2.63 Mб
Скачать

модуль объекта 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