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

06_Лекция_Основные объекты VBA в Excel

.pdf
Скачиваний:
103
Добавлен:
23.03.2016
Размер:
831.55 Кб
Скачать

Использование метода 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