- •Пользовательские формы
- •Режимы работы с формой
- •Режим конструктора
- •Элементы управления
- •Событийные процедуры
- •Объекты UserFormиControls
- •Режим выполнения
- •Разработка приложения
- •Пример 1
- •Конструирование основной формы
- •Свойства формы и элементов управления
- •Создание событийных процедур
- •Конструирование формы для выбора рабочего листа
- •Создание событийных процедур
- •Элемент ListBox
- •Событийная процедура инициализации формы
- •Завершение разработки приложения
- •Связь формы с рабочей книгой
- •Элемент TextBox
- •Элемент ListBox
- •Пример 2
- •Конструирование форм
- •Процедуры
Событийная процедура инициализации формы
Процедура инициализации формы запускается при загрузке формы, но перед ее высвечиванием. Обычно в подобной процедуре устанавливаются начальные значения свойств различных элементов управления и, в том числе, создаются списки.
Список можно создать различными способами. Разберем три способа.
Первый способ создает список, используя метод AddItem – метод добавления элемента в объект ListBox.
Private Sub UserForm_Initialize() ' заполняет список методом AddItem Dim p As Object lst_Sheet.Clear 'очистка списка ForEachpInWorksheets lst_Sheet.AddItemp.Name'добавление элемента списка Next p End Sub |
Список очищается и для каждого рабочего листа в список добавляется элемент, значение которого определяется именем листа. В процедуре использован цикл объектного типа. |
Второй способ создает список из двумерного массива.
Private Sub UserForm_Initialize() 'создать список из массива названий листов Dim wSheets As Integer Dim i As Integer Dim Arr() As Variant wSheets = Worksheets.Count lst_Sheet.Clear ReDim Arr(1 To wSheets, 1) For i = 1 To wSheets Arr(i, 0) = Worksheets(i).Name Next i lst_Sheet.List() = Arr() End Sub |
Массив Arr описывается как динамический массив типа Variant. Подсчитывается количество рабочих листов в книге и массив Arr переопределяется как двумерный массив с одним столбцом. Количество строк массива равно количеству рабочих листов. Нумерация строк массива начинается с единицы, а столбцов - с нуля. |
В цикле элементам массива присваиваются имена рабочих листов. Последний оператор присваивает массиву элементов списка значения массива Arr. Поскольку массив Arr описан как локальная переменная, по окончании процедуры инициализации формы эта переменная теряет свое значение.
Запустив форму Act_Sheet, можно активизировать любой рабочий лист.
Рис. 7.10. Список листов рабочей книги
На рисунке показан список листов рабочей книги, созданный при запуске формы Act_Sheet. Лист диаграмм отсутствует в этом списке.
Завершение разработки приложения
После завершения разработки формы для выбора и активизации рабочего листа изменим событийную процедуру нажатия на кнопку Sel_Sheet основной формы Str_An.
Процедура Sel_Sheet_Click должна вызывать форму Act_Sheet и после выбора и активизации рабочего листа должна разбивать введенную в Inp_Box строку текста на слова, записывая их в ячейки активного рабочего листа.
Public Sub word_recording() a = Trim(Inp_Box) & " " 'удаление ведущих и концевых пробелов; 'для удобства добавить пробел в конце строки n = Len(a) i = 1 m = 2 Do j = InStr(i, a, " ") 'поиск очередного пробела в строке m = m + 1 Cells(m, 1) = Mid(a, i, j - i) If j = n Then 'достигнут конец строки Exit Sub Else i = j + 1 End If Loop End Sub
Private Sub Sel_Sheet_Click() Act_Sheet.Show word_recording End Sub
|
Общая процедура word_recording разбивает введенный текст на слова подобно ранее разобранной процедуре Text_Analysis, но не высвечивает полученные слова, а записывает их на активный рабочий лист в столбец A, начиная с ячейки A3.
Событийная процедура нажатия на кнопку Sel_Sheet высвечивает форму выбора рабочего листа и запускает процедуру разбивки текста и сохранения слов в ячейках рабочего листа. |
Рис. 7.11. Формы приложения