- •Лабораторная работа №4 Основы программирования на языке vba
- •4.1 Основные этапы работы с программами на vba в Excel
- •4.2 Простейший пример программы на языке vba
- •4.3 Типы данных. Объявление переменных и констант
- •4.3.1 Типы данных
- •4.3.2 Объявление переменных
- •4.3.3 Объявление констант
- •4.3.4 Область видимости переменных
- •4.4 Оператор If
- •4.5Безусловный переход. Оператор GoTo
- •4.6Цикл до. Оператор For
- •4.7 Массивы
- •4.8 Цикл пока. Оператор DoWhile
- •4.8 Подпрограммы
- •4.9 Функции
- •4.10 Область видимости процедур
- •4.11 Варианты заданий
- •Лабораторная работа №5 операции с ячейками и рабочими листами ms excel в программах на vba
- •5.1 Основные способы ссылок на ячейки рабочего листа Excel
- •5.2 Примеры обработки данных в ячейках рабочего листа msExcel
- •5.3 Примеры операций с рабочими листами ms Excel
- •5.4 Варианты заданий
- •Лабораторная работа №6 элементы управления в программах на vba
- •6.1 Размещение элементов управления на рабочем листе Excel
- •6.2 Пример использования элементов управления: кнопки, переключатели, счетчики, флажки, текстовые поля
- •6.3 Пример использования элементов управления: списки
- •6.4 Варианты заданий
- •Лабораторная работа №7 пользовательские формы в программах на vba
- •7.1 Создание пользовательской формы в Excel
- •7.2 Кнопки, текстовые поля, списки
- •7.3 Флажки, счетчики
- •7.4 Список из нескольких колонок
- •7.5 Список с возможностью выбора нескольких элементов
- •7.6 Составление списка в программе
- •7.7 Поля выбора ячеек
- •7.8 Варианты заданий
- •Лабораторная работа №8 программЫ на vba для работы с текстовыми данными
- •8.1 Подготовка среды vba для работы с файлами
- •8.2 Ввод данных из файла
- •8.3 Вывод данных в файл
- •8.4 Обмен данными между двумя файлами
- •8.5 Функции обработки строк
- •8.6 Варианты заданий
- •Литература
- •Содержание
7.7 Поля выбора ячеек
Поле выбора ячеек (RefEdit) – элемент управления, позволяющий выбирать ячейки на рабочем листе Excel (аналогично тому, как это делается, например, при использовании встроенных функций в Excel).
Пример 7.6 – Требуется разработать программу для сортировки наборов чисел. В программе используется форма, приведенная на рисунке 7.8. В поле выбора ячеек, имеющем подпись Диапазон, выбирается диапазон ячеек, заполненных числами, из произвольного числа строк и одного столбца. В поле выбора ячеек Вывод указывается ячейка, с которой должен начинаться вывод результатов (отсортированного набора чисел). Сортировка выполняется при нажатии кнопки Сортировать. На странице Параметры размещаются два переключателя для выбора способа сортировки: по возрастанию или по убыванию.
Рисунок 7.8 – Пользовательская форма с полями выбора ячеек (пример 7.6) |
Разместить остальные элементы управления. На странице Сортировка разместить две надписи (Диапазон и Выход), два поля выбора ячеек (с именами Diap_sort и Diap_vyvod), две кнопки (с именами sort и vyhod). На странице Параметры разместить два переключателя (с именами Sort_po_vozr и Sort_po_ub) для выбора способа сортировки – по возрастанию или по убыванию.
В процедуре инициализации формы предусмотреть, чтобы один из переключателей на странице Параметры был установлен, а другой – сброшен.
Для обработки щелчка по кнопке Сортировать ввести следующую процедуру (здесь предполагается, что для этой кнопки установлено свойство Name – Sort):
Private Sub Sort_click()
Dim massiv() As Single
Set d = Range(Diap_sort.Value)
m = d.Rows.Count
n = d.Columns.Count
If n <> 1 Then
MsgBox ("Неправильно выбран диапазон данных")
Exit Sub
End If
Set dv = Range(diap_vyvod.Value)
mm = dv.Rows.Count
nn = dv.Columns.Count
If (mm <> 1) Or (nn <> 1) Then
MsgBox ("Неправильно указан адрес вывода")
Exit Sub
End If
ReDim massiv(1 To m)
For i = 1 To m
massiv(i) = d.Cells(i).Value
Next i
If Sort_po_vozr.Value = True Then
Call sortirovka_v(massiv, m)
Else
Call sortirovka_ub(massiv, m)
End If
For i = 1 To m
dv.Cells(i, 1).Value = massiv(i)
Next i
End Sub
Здесь в строке Dim massiv() As Single объявлен динамический массив. В операторе Set d = Range(Diap_sort.Value) переменная d связывается с диапазоном ячеек, заданном в поле выбора ячеек Diap_sort. В операторах m = d.Rows.Count и n = d.Columns.Count определяются размеры выбранного диапазона ячеек. Затем проверяется количество столбцов в выбранном диапазоне: оно должно быть равно 1. Если это не так, выводится сообщение о неправильно выбранном диапазоне данных, и выполняется выход из процедуры (Exit Sub).
В операторе Set dv = Range(diap_vyvod.Value) переменная dv связывается с диапазоном, указанном в поле выбора ячеек diap_vyvod. Затем проверяются размеры этого диапазона. Он должен представлять собой в точности одну ячейку (с нее будет начинаться вывод отсортированного массива). Если это не так, то выводится сообщение о неправильно заданном адресе вывода.
В операторе ReDim massiv(1 To m) размер массива massiv устанавливается в соответствии с выбранным диапазоном. Затем в этот массив передается содержимое ячеек выбранного диапазона.
В зависимости от того, какой из переключателей на странице Параметры установлен, вызывается одна из процедур сортировки: по возрастанию (Sortirovka_v) или по убыванию (Sortirovka_ub). В процедуру передается массив massiv, а также его размер (m).
Затем в цикле содержимое отсортированного массива massiv выводится в столбец рабочего листа Excel, начиная с ячейки, указанной в поле diap_vyvod.
Процедура сортировки по возрастанию может быть следующей:
Sub sortirovka_v(a, m)
For i = 1 To m – 1 ‘ i-й элемент массива будет сравниваться со всеми последующими
For j = i + 1 To m
If a(i) > a(j) Then
x = a(i): a(i) = a(j): a(j) = x ‘ Если i-й элемент оказался больше j-го, то они меняются местами
End If
Next j
Next i
End Sub
Процедура сортировки по убыванию полностью аналогична приведенной процедуре и отличается от нее только знаком операции сравнения.