- •1.Введение в программирование на vba Понятие объекта
- •Среда программирования
- •Типы данных
- •Переменные
- •Стандартные элементы управления. Объект Форма(UserForm) и элемент Кнопка(CommandButton)
- •Элемент Кнопка
- •Стандартные окна ввода и вывода сообщений
- •Окно сообщения
- •Окно ввода
- •Практические задания Задание 1.1
- •Задание 1.2
- •Задание 1.3
- •Задание 1.4
- •2.Реализация линейных алгоритмов Программирование арифметических выражений
- •Математические операции
- •Стандартные математические функции
- •Элементы Надпись(Label) и Поле(TextBox) Элемент Поле
- •Элемент Надпись
- •Практические задания Задание 2.1
- •Задание 2.2
- •Задание 2.3
- •3.Реализация алгоритмов с условиями Программирование условий Операторы сравнения
- •Логические операции
- •Инструкция If…Then…Else
- •Инструкция Select Case
- •Функции, используемые при программировании условий
- •Элементы Рисунок(Image), Счетчик и Полоса прокрутки(ScrollBar) Элемент Рисунок
- •Элемент Счетчик
- •Элемент Полоса прокрутки
- •Практические задания Задание 3.1
- •Задание 3.2
- •З адание 3.3
- •4.Реализация циклических алгоритмов Программирование циклов Цикл For…Next
- •Цикл Do While…Loop / Do…Loop While
- •Цикл Do Until...Loop / Do…Loop Until
- •Практические задания Задание 4.1
- •Задание 4.2
- •5.Использование процедур и функций в программах на vba Процедуры и функции
- •Элементы Рамка(Frame), Флажок(CheckBox), Переключатель(OptionButton), Выключатель(ToggleButton) Элемент Рамка
- •Элемент Флажок
- •Элемент Выключатель
- •Элемент Переключатель
- •Практические задания Задание 5.1
- •6.Использование структурированных типов данных на примере массивов Понятие массива. Работа с массивами
- •Практические задания Задание 6.1
- •Практические задания Задание 7.1
- •Задание 7.2
- •Задание 7.3
- •Задание 7.4
- •Задание 7.5
- •Задание 7.6
- •Задание 7.7
- •Задание 7.8
- •8.Работа с макросами в ms Excel Основные объекты ms Excel
- •Понятие макроса. Создание, редактирование, выполнение макросов
- •Цикл For Each
- •Инструкция With
- •Практические задания Задание 8.1
- •Задание 8.2
- •Задание 8.3
- •9.Создание приложений, управляемых с помощью диалоговых окон Элементы Поле со списком (ComboBox), Список (ListBox)
- •Практические задания Задание 9.1
- •Задание 9.2
- •10.Рекомендуемая литература
Практические задания Задание 9.1
Поместите на рабочий лист таблицу:
|
A |
B |
C |
D |
1 |
ФИО |
Отдел |
Должность |
Стаж |
2 |
Иванов И.И. |
1 |
нач. отдела |
19 |
3 |
Васильева В.В. |
1 |
менеджер |
11 |
4 |
Петров П.П. |
2 |
нач. отдела |
10 |
5 |
Коваль К.К. |
2 |
рук. группы |
5 |
6 |
Акимов А.А. |
3 |
менеджер |
8 |
7 |
Белов Б.Б. |
2 |
менеджер |
3 |
8 |
Волков В.В. |
3 |
нач. отдела |
12 |
9 |
Голиков Г.Г. |
2 |
менеджер |
7 |
Создайте форму, которая позволяет выполнять следующие операции с данными из этой таблицы: "Загрузить все данные", "Загрузить с учетом условий", "Новая таблица с учетом условий", "Таблица из выделенных".
Операция "Загрузить все данные" предполагает, что все строки таблицы за исключением заголовка и все столбцы помещаются в список сотрудников, имеющийся на форме (элемент ListBox1).
Операция "Загрузить с учетом условий" помещает в список только те строки, для которых выполняются заданные условия.
Операция "Новая таблица с учетом условий" формирует на новом листе таблицу такой же структуры, содержащую только те строки исходной таблицы, которые удовлетворяют заданным условиям.
Операция "Таблица из выделенных" формирует на новом листе таблицу точно такой же структуры, содержащую выделенные строки списка сотрудников. Чтобы в списке можно было выделять несколько произвольных элементов, значение свойства MultiSelect у списка должно быть равно 1.
Кроме элемента ListBox на форме имеются 3 элемента ComboBox. Они содержат список отделов, список должностей и список операций. Выбранная операция выполняется при нажатии на кнопку «Выполнить».
Далее приведен текст модуля формы. Разберитесь, как работает программа. Особое внимание обратите на реализацию работы со списками. Значения всех списков формируются по-разному. Это сделано специально, чтобы показать имеющиеся возможности. Узнать номер выбранного элемента списка можно, используя свойство ListIndex. Для анализа выбранной операции в примере использована инструкция Select Case. Проверка условия запрограммирована в виде специальной функции Условие. Процедура НоваяТаблица добавляет в рабочую книгу новый рабочий лист и копирует на него шапку таблицы.
Dim MyRng As Range
Dim RMin As Integer, RMax As Integer
Dim CMin As Integer, CMax As Integer
Dim CCount As Integer
Dim MySheet As Worksheet
Dim NewSheet As Worksheet
Private Sub CommandButton1_Click()
Select Case ComboBox3.ListIndex
Case 0 'Загрузить все данные
MySheet.Activate
ListBox1.RowSource = Range(Cells(RMin, CMin), _
Cells(RMax, CMax)).Address
ListBox1.ListIndex = 0
Case 1 'Загрузить с учетом условий
ListBox1.RowSource = ""
j = 0
For i = RMin To RMax
If Условие(MySheet.Cells(i, 2), MySheet.Cells(i, 3), _
MySheet.Cells(i, 4)) Then
ListBox1.AddItem MySheet.Cells(i, 1)
ListBox1.List(j, 1) = MySheet.Cells(i, 2)
ListBox1.List(j, 2) = MySheet.Cells(i, 3)
ListBox1.List(j, 3) = MySheet.Cells(i, 4)
j = j + 1
End If
Next
ListBox1.ListIndex = 0
Case 2 'Hовая таблица с учетом условий
НоваяТаблица
j = RMin - 1
For i = RMin To RMax
If Условие(MySheet.Cells(i, 2), MySheet.Cells(i, 3), _
MySheet.Cells(i, 4)) Then
j = j + 1
For k = CMin To CMax
NewSheet.Cells(j, k) = MySheet.Cells(i, k)
Next k
End If
Next
Case 3 'Таблица из выделенных
НоваяТаблица
j = RMin - 1
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
j = j + 1
For k = CMin To CMax
NewSheet.Cells(j, k) = ListBox1.List(i, k - 1)
Next k
End If
Next i
End Select
End Sub
Private Sub UserForm_Initialize()
Dim Отделы(3) As String
Set MyRng = ActiveCell.CurrentRegion.Cells
Set MySheet = ActiveSheet
RMin = MyRng.Rows(1).Row + 1
RMax = MyRng.Rows(MyRng.Rows.Count).Row
CMin = MyRng.Columns(1).Column
CMax = MyRng.Columns(MyRng.Columns.Count).Column
CCount = MyRng.Columns.Count
'Для заполнения списка используется свойство RowSource
ListBox1.ColumnCount = CCount
ListBox1.RowSource = _
Range(Cells(RMin, CMin), Cells(RMax, CMax)).Address
ListBox1.ListIndex = 0
ListBox1.MultiSelect = fmMultiSelectMulti
'Для заполнения списка используется массив,
'созданный в программе
Отделы(0) = "все": Отделы(1) = "1"
Отделы(2) = "2": Отделы(3) = "3"
ComboBox1.List = Отделы
ComboBox1.ListIndex = 0
'Для заполнения списка используется метод AddItem
ComboBox2.AddItem "все"
For i = RMin To RMax
НетДолжности = True
For j = 0 To ComboBox2.ListCount - 1
If ComboBox2.List(j) = Cells(i, 3) Then
НетДолжности = False: Exit For
End If
Next j
If НетДолжности Then ComboBox2.AddItem Cells(i, 3)
Next
ComboBox2.ListIndex = 0
'Для заполнения списка используется массив фиксированных значений
ComboBox3.Style = fmStyleDropDownList
ComboBox3.List = Array("Загрузить все данные", _
"Загрузить с учетом условий", "Новая таблица с учетом условий", _
"Таблица из выделенных")
ComboBox3.ListIndex = 0
End Sub
Private Function Условие(Отдел As String, Должность As String, Стаж As Single)
If TextBox1.Text = "" Then СтажМ = 0 Else СтажМ = CSng(TextBox1.Text)
If TextBox2.Text = "" Then СтажБ = 0 Else СтажБ = CSng(TextBox2.Text)
Условие = ((ComboBox1.Value = "все") Or (ComboBox1.Value = Отдел)) And _
((ComboBox2.Value = "все") Or (ComboBox2.Value = Должность)) And _
((TextBox1.Text = "") Or (Стаж < СтажМ)) And _
((TextBox2.Text = "") Or (Стаж > СтажБ))
End Function
Public Sub НоваяТаблица()
Sheets.Add after:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Name = InputBox("Введите имя листа")
Set NewSheet = Sheets(Worksheets.Count)
n = RMin - 1
For k = CMin To CMax
NewSheet.Cells(n, k) = MySheet.Cells(n, k)
NewSheet.Columns(k).ColumnWidth = MySheet.Columns(k).ColumnWidth
Next k
End Sub
