06_Лекция_Основные объекты VBA в Excel
.pdfИспользование метода GoalSeek
Пример. Разработать программу, которая по введенным числовым значениям некоторого уравнения решает данное уравнение и находит неизвестную переменную х. Результат вычисления выводится в текстовое окно на форме и на лист Excel.
Разработанная форма в рабочем состоянии
Технология выполнения
1.Запустите приложение Excel, сохраните документ.
2.Перейдите в редактор VBA.
3.Создайте форму.
4.На листе Excel расположите необходимый текст (оформление),
предусмотрев соответствующие ячейки вывода информации.
Вывод результатов на лист excel после запуска формы.
5. Обработайте кнопки.
Кнопка Вычислить
Private Sub CommandButton1_Click() Dim a, b, c As Double
a = CDbl(TextBox1.Text)
b = CDbl(TextBox2.Text)
c = CDbl(TextBox3.Text) With ActiveSheet
Range(«b3»).Value = a
Range(«b4»).Value = b
Range(«b5»).Value = c
Range(«b6»).FormulaLocal = «=b3*b7^3+b4*sin(b7)»
Range(«b6»).GoalSeek Goal:=c, changingCell:=Range(«b7»)
TextBox4.Text = CStr(.Range(«b7»).Value)
TextBox4.Text = FormatNumber(TextBox4.Text, 2)
End With
End Sub
Кнопка Закрыть
Private Sub CommandButton2_Click() UserForm1.Hide
End Sub
Процедура инициализации формы
Private Sub UserForm_initialize() Worksheets(1).Visible = False End Sub
Использование методов AutoFill при заполнении таблиц
Пример. Создать программу, которая по введенным текстовым данным в соответствующие текстовые поля формы автоматизирует ввод данных на студентов некоторой специальности учебного заведения. Результаты заполнения текстовых полей выводятся на лист excel, что позволяет при необходимости распечатать данные.
Технология выполнения
1.Запустите приложение Excel, сохраните документ.
2.Перейдите в редактор VBA. Создайте форму.
Разработанная форма в режиме конструктора
3. На листе Excel расположите необходимый текст (оформление), предусмотрев соответствующие ячейки вывода информации.
Вывод результатов на лист excel после запуска формы
4. Обработайте кнопки.
Кнопка Создать таблицу
Const strNomer = 3 количество строк для заголовка Dim strName1 As String 'строка для адресации ячеек
Dim strName2 As String
Dim nomer As Long номер очередной строки таблицы
Private Sub CommandButton1_Click()
ActiveWorkbook.SaveAs («работа с базой данных. xls») nomer = 1 End Sub
Кнопка Добавить строку
Private Sub CommandButton2_Click() strName1 = Trim(Str(strNomer + nomer))
With ActiveSheet 'ввод данных для новой отчетной таблицы
Range("A" + strName1).Value = nomer Range("B" + strName1).Value = TextBox1.Text Range("C" + strName1).Value = TextBox2.Text Range("D" + strName1).Value = TextBox3.Text
'автозаполнение с текущей строки таблицы strName2 = Trim(Str(strNomer + nomer + 1))
Set range1 =.Range("A" + strName1 +":D" + strName1) Set range2 =.Range("A" + strName1 +":D" + strName2) range1.AutoFill Destination:=range2
Range("A" + strName2 +":D" + strName2).Clear End With
' очистка полей формы для ввода очередной записи
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox1.SetFocus nomer = nomer + 1 End Sub
Кнопка Закончить таблицу
Private Sub CommandButton3_Click()
'закрытие формы подведение итогов и вывод фамилии преподавателя
UserForm1.Hide
With ActiveSheet
strName2 = Trim(Str(strNomer + nomer + 2))
Range("A" + strName2).Value = «классный руководитель»
Range("D" + strName2).Value = TextBox4.Text End With
End Sub
5. Откомпилируйте программу и запустите на выполнение.
|
Динамические массивы |
|
|
Если заранее неизвестно, сколько |
будет введено данных в массив, |
или |
объем данных собираемых для |
массива значительно меняется, то |
в |
подобных ситуациях можно |
создать динамический массив. |
Динамические массивы создаются с помощью оператора Dim, Private, Public, причем список размерностей опускается, затем их размер устанавливается с помощью оператора ReDim во время выполнения процедуры.
Оператор |
ReDim |
имеет |
следующий |
синтаксис: |
ReDim |
[Preserve] |
ИмяПеременной |
(индексы) |
[As тип] _ |
[,ИмяПеременной (индексы) [As тип] ]
Здесь необязательное ключевое слово Preserve приводит к тому, что VBA сохраняет данные в имеющемся массиве;
ИмяПеременной – имя существующего массива; индексы – измерения массива;
тип – любой тип VBA или определенный пользователем тип. Примеры:
1)Dim Month( ) As String - объявляет динамический массив Month;
2)Redim Month(1 To 30) – изменяет размер массива до 30 элементов;
3)Redim Preserve Month(1 To 31) – изменяет размер массива до 31
элемента, сохраняя содержимое;
4)Dim Table( ) As Integer – объявляет динамический массив;
5)ReDim Table(3, 15) – делает массив двумерным;
6)ReDim Table(4, 20) – изменяет размер двумерного массива;
7)ReDim Preserve Table(4, 24) – только изменяет последний размер массива;
8)Dim Mas As Variant –объявляет переменную типа Variant;
9) ReDim Mas(20) As Integer – создает массив из 20 целых чисел в
Variant.
Пример. Сформировать двумерный массив A(n,m) из случайных чисел. Случайные числа умножить на 100 и округлить до ближайшего целого. Число столбцов массива увеличить на единицу. Вычислить сумму элементов каждой строки и записать в добавленный столбец.
Массив отобразить на элементе управления ListBox. Код модуля формы ' Объявляем динамический массив
Dim a() As Single
Dim m, n, i, j As Integer, s As Single Private Sub CommandButton1_Click() n = Val(TextBox1.Text)
m = Val(TextBox2.Text)
'Если введены некорректные данные,
'осуществляется выход из процедуры
If (n<= 0) Or (m<=0) Then
MsgBox "Введите положительные числа", 48
Exit Sub
End If
'Устанавливаем размерности массива
ReDim a(1 To n, 1 To m)
'Формируем массив из случайных чисел
For i = 1 To n For j = 1 To m
a(i, j) = Int(Rnd(20) * 100) Next
Next
' Отображаем массив на ListBox With ListBox1
.ColumnCount = m
.List = a End With End Sub
Private Sub CommandButton2_Click()
'Очищаем ListBox
ListBox1.Clear
'Число столбцов массива увеличиваем на 1,
'сохраняя содержимое
ReDim Preserve a(1 To n, 1 To m + 1)
'Вычисляем сумму элементов каждой строки и
'записываем в добавленный столбец
For i = 1 To n s = 0
For j = 1 To m
s = s + a(i, j) Next
a(i, m + 1) = s Next
' Измененный массив отображаем на ListBox With ListBox1
.ColumnCount = m + 1
.List = a End With End Sub
Private Sub CommandButton3_Click() ListBox1.Clear
TextBox1.Text = ""
TextBox2.Text = "" End Sub
Private Sub CommandButton4_Click() UserForm1.Hide
End Sub