Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

Событийная процедура инициализации формы

Процедура инициализации формы запускается при загрузке формы, но перед ее высвечиванием. Обычно в подобной процедуре устанавливаются начальные значения свойств различных элементов управления и, в том числе, создаются списки.

Список можно создать различными способами. Список может быть подготовлен методами объекта Listbox, может содержать значения элементов массива или значения ячеек интервала рабочего листа. Разберем разные способы создания списка.

Первый способ создает список, используя метод AddItem для добавления элемента в объект ListBox.

Private Sub UserForm_Initialize()

' список заполняется методом AddItem

Dim p As Object

lst_Sheet.Clear 'очистка списка

For Each p In Worksheets

lst_Sheet.AddItem p.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, 0)

For i = 1 To wSheets

Arr(i, 0) = Worksheets(i).Name

Next i

lst_Sheet.List() = Arr()

End Sub

Динамический массив Arr имеет тип Variant. После подсчета количества рабочих листов в книге массив Arr переопределяется как двумерный массив с одним столбцом и с количеством строк, равным количеству рабочих листов. Нумерация строк массива Arr начинается с единицы, а столбцов – с нуля.

В цикле элементам массива присваиваются имена рабочих листов. Последний оператор процедуры присваивает массиву элементов списка значения массива Arr. Поскольку массив Arr описан как локальная переменная, по окончании процедуры инициализации формы эта переменная теряет свое значение.

Запустив форму Act_Sheet, можно активизировать любой рабочий лист.

Рис. 7.13. Список рабочих листов

На рисунке показан список рабочих листов, созданный при запуске формы 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.14. Формы приложения 1 в режиме выполнения