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

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

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

Рис. 10.5

Программа заполнения списка объекта ListBox массивом, если список состоит

из одной колонки»

Private Sub CommandButton1_Click()

‘Заполнение списка массивом, 1 колонка

With ListBox1

.List = Array("Июнь", "Июль", "Август", "Сентябрь", "Октябрь") End With

End Sub

Private Sub ListBox1_Click()

TextBox1.Text = ListBox1.Text

Cells(10, 3).Value = ListBox1.Text

End Sub

Private Sub CommandButton2_Click()

UserForm2.Hide

End Sub

Некоторые комментарии к программе:

в модуле Private Sub ListBox1_Click(), программно под-

держивающем объект ListBox1, к объекту ListBox1 применяется свойство .Text, которое позволяет получить значение текущего выбранного элемента объекта ListBox1. Это значение присваивается объекту TextBox1, а так как выбран «сентябрь», то этот элемент и отображен в окне объекта TextBox1. Кроме того, этот же элемент списка объекта ListBox1 выведен в ячейку десятой строки и пятого столбца таблицы Excel;

модуль объекта CommandButton2, который в свойстве Caption переименован в «Отменить», обеспечивает завершение функционирования объекта UserForm за счет применения к объекту

UserForm2 метода Hide (скрыть).

10.2.3. Заполнение списка из диапазона, в который предварительно введены элементы списка

Вызов объекта UserForm3, на базе которого организуется заполнение списка объекта ListBox1 из диапазона, осуществляется с помощью следующего программного модуля:

Private Sub CommandButton3_Click()

UserForm3.Show

End Sub

Создание пользовательской формы c объектом ListBox1 организуется следующим образом:

войти в VBA Alt-F11;

выбрать Insert (вставка);

выбрать UserForm.

Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:

один объект ListBox;

два объекта CommandButton,

расположив их, как показано на рис. 10.6.

Далее войти в VBA (Alt-F11), выбрать объект UserForm3.

80

81

Рис. 10.6

Затем, выбравобъектCommandButton1, написатьсоответствующую программу, обеспечивающую заполнение данными объек-

та ListBox1.

Программа заполнения списка объекта ListBox из диапазона

Private Sub CommandButton1_Click() With ListBox1

.ColumnCount = 2

.RowSource = "A1:B8" End With

End Sub

Private Sub CommandButton2_Click()

UserForm3.Hide

End Sub

Некоторые комментарии к программе:

вмодулеPrivate Sub CommandButton1_Click(), программно поддерживающем объект CommandButton1, при реализации спо-

соба заполнения списка ListBox1 из диапазона к объекту ListBox1 применяется свойство RowSours, с помощью которого устанавливается диапазон, содержащий элементы списка, в данном случае

"A1:B8";

так как данные, передаваемые из указанного диапазона

вобъект ListBox1, представляют собой таблицу, состоящую из двух столбцов, к объекту ListBox1 применяется свойство

.ColumnCount, значение которого устанавливает число столбцов

всписке = 2;

модуль объекта CommandButton2, который в свойстве Caption переименован в «Закрыть», обеспечивает завершение функционирования объекта UserForm за счет применения к объекту

UserForm3 метода Hide (скрыть).

10.2.4. Заполнение списка поэлементно, если список состоит из нескольких колонок

Вызов объекта UserForm4, на базе которого организуется поэлементное заполнение списка объекта ListBox1 (если список состоит из нескольких колонок), осуществляется с помощью следующего программного модуля:

Private Sub CommandButton1_Click()

UserForm4.Show

End Sub

Создание пользовательской формы c объектом ListBox1 организуется следующим образом:

войти в VBA Alt-F11;

выбрать Insert (вставка);

выбрать UserForm.

Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:

один объект ListBox;

два объекта CommandButton,

расположив их, как показано на рис. 10.7.

82

83

Рис. 10.7

Далее войти в VBA (Alt-F11), выбрать объект UserForm4. Затем, выбравобъектCommandButton1, написатьсоответству-

ющую программу, обеспечивающую заполнение данными объек-

та ListBox1.

Программа поэлементного заполнения списка объекта, если список состоит из нескольких колонок

Private Sub CommandButton1_Click() With ListBox1

.ColumnCount = 3

.AddItem "Сорокина"

.List(0, 1) = "Информатика"

.List(0, 2) = "зачет"

.AddItem "Донец"

.List(1, 1) = "Математика"

.List(1, 2) = "зачет"

.AddItem "Гусева"

.List(2, 1) = "Физика"

.List(2, 2) = "зачет"

.AddItem "Жигунова"

.List(3, 1) = "Начертательная геометрия"

.List(3, 2) = "зачет" End With

Private Sub CommandButton2_Click()

UserForm4.Hide

End Sub

Некоторые комментарии к программе:

вмодулеPrivate Sub CommandButton1_Click(), программно поддерживающем объект CommandButton1, при реализации способа заполнения списка ListBox1 поэлементно (если список состоит из нескольких колонок) к объекту ListBox1 применяется метод AddItem, с помощью которого в операторе цикла With добавляются элементы списка, например .AddItem "Сорокина" и т. д.; кроме того, к объекту ListBox1 применяется свойство .List, в качестве значений которого элементам списка ListBox1, находящимся на пересечении указанных строк и столбцов, сообщаются соответствующие символьные константы, например "Информатика",

"зачет" и т. д.;

так как данные, формируемые в объекте ListBox1, представляют собой таблицу, состоящую из трех столбцов, к объекту ListBox1 применяется свойство .ColumnCount, значение которого устанавливает число столбцов в списке = 3;

модуль объекта CommandButton2, который в свойстве Caption переименован в «Закрыть», обеспечивает завершение функционирования объекта UserForm за счет применения к объекту UserForm4 метода Hide (скрыть).

10.2.5. Заполнение списка массивом, если список состоит из нескольких колонок

Вызов объекта UserForm5, на базе которого организуется заполнение списка объекта ListBox1 массивом (если список состоит из нескольких колонок), осуществляется с помощью следующего программного модуля:

84

85

Private Sub CommandButton1_Click()

UserForm5.Show

End Sub

Создание пользовательской формы c объектом ListBox1 организуется следующим образом:

войти в VBA Alt-F11;

выбрать Insert (вставка);

выбрать UserForm.

Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:

один объект ListBox;

два объекта CommandButton,

расположив их, как показано на рис. 10.8.

Рис. 10.8

Далее войти в VBA (Alt-F11), выбрать объект UserForm5. Затем, выбравобъектCommandButton1, написатьсоответству-

ющую программу, обеспечивающую заполнение данными объек-

та ListBox1.

Программа заполнения списка объекта массивом, если список состоит из нескольких колонок

Private Sub CommandButton1_Click() Dim S(1 To 5, 1 To 3)

Dim i As Integer

Dim j As Integer

S(1, 1) = "N": S(1, 2) = "ФИО": S(1, 3) = "Оценка" S(2, 1) = "1": S(2, 2) = "Сорокина": S(2, 3) = "5" S(3, 1) = "2": S(3, 2) = "Донец": S(3, 3) = "5"

S(4, 1) = "3": S(4, 2) = "Гусева": S(4, 3) = "5" S(5, 1) = "4": S(5, 2) = "Жигунова": S(5, 3) = "5" With ListBox1

.ColumnCount = 3

.List = S

End With

End Sub

Private Sub CommandButton2_Click()

UserForm4.Hide

End Sub

Некоторые комментарии к программе:

в модуле Private Sub CommandButton1_Click(), программно поддерживающем объект CommandButton1, при реализации способазаполненияспискаListBox1 массивом(еслисписоксостоитизнескольких колонок) сначала объявляется двумерный массив S, а затем с помощью операторов присваивания выполняется заполнение элементовмассива. ПослечегокобъектуListBox1 применяетсясвойство

.List, в качестве значения которого объекту ListBox1 передается двумерныймассивсимвольныхконстант"", "ФИО, "Оценка" ит. д.;так как данные, формируемые в объекте ListBox1, представляют собой таблицу, состоящую из трех столбцов, к объекту ListBox1 применяется свойство .ColumnCount, значение которого

устанавливает число столбцов в списке = 3;

модуль объекта CommandButton2, который в свойстве Caption переименован в «Закрыть», обеспечивает завершение функционирования объекта UserForm за счет применения к объекту

UserForm5 метода Hide (скрыть).

86

87

10.3. Заполнение объектов ListBox, расположенных на листе Excel

Создание объектов ListBox на листе Excel организуется следующим образом:

выбрать в верхнем горизонтальном меню «Вид»;

выбрать в подменю «Панель инструментов»;выбрать в подменю «Элементы управления».

ЗатемспанелиЭлементыуправленияналистExcel (рис. 10.9) последовательно переместить:

четыре объекта ListBox;

три объекта CommandButton,

расположив их, как показано на рис. 10.9.

Рис. 10.9

ДалеевойтивVBA(Alt-F11), выбратьобъектCommandButton1. Затем, выбравобъектCommandButton1, написатьсоответствующую программу, обеспечивающую заполнение данными объек-

тов ListBox1, ListBox2, ListBox4, ListBox5.

Программа заполнения объектов ListBox, расположенных на листе Excel

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("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь") End With

'Заполнение списка поэлементно, несколько колонок s(1, 1) = "N": s(1, 2) = "Ф.И.О.": s(1, 3) = "Оценка": s(2, 1) = "1": s(2, 2) = "Петров": s(2, 3) = "5"

s(3, 1) = "2": s(3, 2) = "Сидоров": s(3, 3) = "2" s(4, 1) = "3": s(4, 2) = "Иванов": s(4, 3) = "3" s(5, 1) = "4": s(5, 2) = "Ромашкин": s(5, 3) = "4"

With ListBox4

.ColumnCount = 3

.List = s End With

'Заполнение списка массивом, несколько колонок

With ListBox5

88

89

.ColumnCount = 3

.AddItem "июнь"

.List(0, 1) = "06"

.List(0, 2) = "30"

.AddItem "июль"

.List(1, 1) = "07"

.List(1, 2) = "31"

.AddItem "август"

.List(2, 1) = "08"

.List(2, 2) = "31"

.AddItem "сентябрь"

.List(3, 1) = "09"

.List(3, 2) = "30" End With

End Sub

Private Sub CommandButton2_Click()

ListBox1.Clear

ListBox2.Clear

ListBox4.Clear

ListBox5.Clear

End Sub

Private Sub CommandButton3_Click()

Sheets("лист0").Select

End Sub

Некоторые комментарии к программе:

в модуле Private Sub CommandButton1_Click(), программ-

но поддерживающем объект CommandButton1, реализуются те же программы, что и в модуле, программно поддерживающем объ-

ект CommandButton1 раздела 10.1;

в модуле Private Sub CommandButton1_Click(), программ-

но поддерживающем объект CommandButton1, не реализуется способ заполнения объекта ListBox «из диапазона», т. е. объект ListBox3 отсутствует;

в модуле Private Sub CommandButton2_Click(), программ-

но поддерживающем объект CommandButton2, который в свойстве Caption переименован в «Очистить», к объекту ListBox1 при-

мененметод.Clear, спомощьюкоторогоосуществляетсяудаление элементов списка. Аналогично операции применяются к элемен-

там списков объектов ListBox2, ListBox4 и ListBox5;

в модуле Private Sub CommandButton3_Click(), программ-

но поддерживающем объект CommandButton3, который в свойстве Caption переименован в «Меню», к объекту Sheets применен метод .Select, с помощью которого выполняется переход на лист оглавления всего пакета.

ЧАСТЬ ВТОРАЯ

10.4. Табулирование функций в объектах ListBox

При решении задач табулирования функций в объектах ListBox создаваемыеобъектыListBox можноразмещатькакнаспециально созданныхобъектахUserForm, такиналистахExcel, используяпри этом для вызова и табуляции кнопки (объекты CommandButton).

Создание пользовательской формы c объектом ListBox организуется следующим образом:

войти в VBA Alt-F11;

выбрать Insert (вставка);

выбрать UserForm.

Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:

один объект ListBox;три объекта Label;три объекта TextBox;

три объекта OptionButton;два объекта CommandButton,

расположив их, как показано на рис. 10.10.

Далее войти в VBA (Alt-F11), выбрать объект UserForm. Затем, выбравобъектCommandButton1, написатьсоответству-

ющую программу, обеспечивающую табуляцию функций в объек-

те ListBox1.

90

91

Рис. 10.10

Программа табулирования функций в объекте ListBox

Private Sub CommandButton1_Click() Dim i As Integer

Dim x As Double

Dim XN As Double

Dim XK As Double

Dim DX As Double

Dim S() As String

If Not IsNumeric(TextBox1) Or Not IsNumeric(TextBox2) Or Not IsNumeric(TextBox3) Then

MsgBox "неверные данные" Exit Sub

End If

XN = CDbl(TextBox1)

XK = CDbl(TextBox2)

DX = CDbl(TextBox3)

If OptionButton1 = True Then

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String i = 0

S(i, 1) = "N": S(i, 2) = "x": S(i, 3) = "y"

92

i = i + 1 x = XN

Do While x <= XK

y = (2 + (Sin(x)) ^ 2) / (1 + x ^ 2) ‘ функция 1 семестра

S(i, 1) = i: S(i, 2) = Format(x, "0.0"): S(i, 3) = Format(y, "0.0") x = x + DX: i = i + 1

Loop

End If

If OptionButton2 = True Then

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 4) As String i = 0

S(i, 1) = "N": S(i, 2) = "x": S(i, 3) = "g1": S(i, 4) = "g2" i = i + 1

x = XN

Do While x <= XK

y = g(x) ‘ функция 1 семестра

S(i, 1) = i: S(i, 2) = Format(x, "0.0")

If x <= 0 Then S(i, 3) = Format(y, "0.0000") Else S(i, 4) = Format(y, "0.0000") x = x + DX: i = i + 1

Loop

End If

If OptionButton3 = True Then

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 5) As String i = 0

S(i, 1) = "N": S(i, 2) = "x": S(i, 3) = "z1": S(i, 4) = "z2": S(i, 5) = "z3" i = i + 1

x = XN

Do While x <= XK

y = z(x) ‘ функция 1 семестра

S(i, 1) = i: S(i, 2) = Format(x, "0.0")

If x < 0 Then S(i, 3) = Format(y, "0.0000")

If (x >= 0) And (x <= 1) Then S(i, 4) = Format(y, "0.0000") If x > 1 Then S(i, 5) = Format(y, "0.0000")

x = x + DX: i = i + 1 Loop

End If

With ListBox1

.ColumnCount = 5

.List = S

93

End With

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Function g(x)

If x <= 0 Then g = (3 * x ^ 2) / (1 + x ^ 2) Else g = Sqr(1 + 2 * x / (1 + x ^ 2)) End Function

Function z(x)

If x < 0 Then z = 3 * x + Sqr(1 + x ^ 2)

If (x >= 0) And (x <= 1) Then z = 2 * Cos(x) * Exp(-2 * x)

If x > 1 Then z = 2 * Sin(3 * x)

End Function

Некоторые комментарии к программе:

вмодулеPrivate Sub CommandButton1_Click(), программно поддерживающем объект CommandButton1, используется функция IsNumeric(TextBox1), проверяющая, являются ли данные, помещенные в объекте TextBox1 или TextBox2, цифровыми;

в программе также используется функция CDbl(TextBox), обеспечивающаяпреобразованиеданныхобъектовTextBox1 иTextBox2 вцифровые;

в модуле используется динамическое объявление массива Dim S() As String с последующим уточнением мерности массива;если включен объект OptionButton1, то табулируется функцияy=f(x), вычисленныезначениякоторойиотображаютсявобъекте ListBox1 (см. рис. 10.10); предварительно уточняется мерность массива S оператором ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String, который можно размещать в любом месте программы. Диапазон изменения индексов по первому измерению от 0 довеличинывычисленногорезультатаарифметическоговыражения Round(Abs(XK - XN) / DX) + 1, т. е. + 1, для того чтобы увеличить количество элементов массива с учетом «шапки таблицы», по

второму измерению – от 1 до 3;

если включен объект OptionButton2, то табулируется функция g=f(x), вычисленные значения которой и отображаются в объ-

94

екте ListBox1 (рис. 10.11); предварительно уточняется мерность массива S оператором ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String, который можно размещать в любом месте программы. Диапазон изменения индексов по первому измерению от 0 довеличинывычисленногорезультатаарифметическоговыражения Round(Abs(XK - XN) / DX) + 1, т. е. + 1, для того чтобы увеличить количество элементов массива с учетом «шапки таблицы», по второму измерению – от 1 до 4;

если включен объект OptionButton3, то табулируется функция z=f(x), вычисленные значения которой и отображаются в объекте ListBox1 (рис. 10.12), предварительно уточняется мерность массива S оператором ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String, который можно размещать в любом месте программы. Диапазон изменения индексов по первому измерению от 0 довеличинывычисленногорезультатаарифметическоговыражения Round(Abs(XK - XN) / DX) + 1, т. е. +1, для того чтобы увеличить количество элементов массива с учетом «шапки таблицы», по второму измерению – от 1 до 5;

формулы функций g=f(x) и z=f(x) оформлены в виде модулей пользовательских функций Function g(x) и Function z(x);

Рис. 10.11

95

Рекомендуемая литература

1. Гарнаев А. Ю. Использование MS Excel и VBA в экономике и финансах / А. Ю. Гарнаев. – СПб.: БХВ – Санкт-Петербург, 1999. – 336 с., ил.

2. Гарбер Г. З. Основы программирования на Visual Basic и VBA

в Excel 2007 / Г. З. Гарбер. – М.: Солон-Пресс, 2008. – 192 с.

Рис. 10.12

объекту ListBox1 сообщается свойство .ColumnCount, в соответствии с которым в объекте ListBox1 устанавливается значение числа колонок = 5, максимальное из возможных вариантов количества столбцов при табулировании функций y=f(x), g=f(x)

и z=f(x).

96

97

Оглавление

Введение................................................................................................................

3

1. Табулирование функции................................................................................

3

2. Табулирование разветвляющейся функции..............................................

7

3. Табулирование функции, разветвляющейся больше чем один раз.....

12

4. Табулирование двух функций.....................................................................

17

5. Построение поверхности..............................................................................

21

6. Квадратичные формы..................................................................................

25

Часть первая................................................................................................

26

6.1. Решение матричного уравнения в Excel..............................................

26

6.2. Решение матричного уравнения в Excel с предварительным

 

преобразованием............................................................................................

29

6.3. Вычисление квадратичной формы в Excel...........................................

31

6.4. Вычисление квадратичной формы с использованием

 

матричных функций Excel............................................................................

33

6.5. Вычисление квадратичной формы с использованием

 

матричных функций VBA............................................................................

34

Часть вторая................................................................................................

35

6.6. Операции над массивами в Excel.........................................................

35

6.7. Операции над массивами в VBA..........................................................

37

7. Операторы цикла..........................................................................................

39

8. Игра «угадай число».....................................................................................

48

9. Пользовательские формы............................................................................

50

9.1. Калькулятор с OptionButton..................................................................

52

9.2. Калькулятор с CheckBox.......................................................................

55

9.3. Логарифмический калькулятор............................................................

57

9.4. Решение квадратных уравнений...........................................................

60

9.5. Вычисление максимума, минимума, среднего арифметического,

 

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

62

9.6. Использование объекта ScrollBar (полоса прокрутки).......................

66

10. Работа с объектом ListBox.........................................................................

70

Часть первая.................................................................................................

72

10.1. Заполнение объектов ListBox, расположенных на одном

 

объекте UserForm..........................................................................................

72

10.2. Заполнение объектов ListBox, расположенных на разных

 

объектах UserForm........................................................................................

77

10.2.1. Заполнение списка поэлементно, если список состоит

 

из одной колонки.....................................................................................

77

10.2.2. Заполнение списка массивом, если список состоит

 

из одной колонки.....................................................................................

79

98

 

10.2.3. Заполнение списка из диапазона, в который

 

предварительно введены элементы списка...........................................

81

10.2.4. Заполнение списка поэлементно, если список состоит

 

из нескольких колонок............................................................................

83

10.2.5. Заполнение списка массивом, если список состоит

 

из нескольких колонок............................................................................

85

10.3 Заполнение объектов ListBox, расположенных на листе Excel

 

Часть вторая.................................................................................................

91

10.4. Табулирование функций в объектах ListBox......................................

91

Рекомендуемая литература..............................................................................

97

99