Список (ListBox) и поле со списком (ComboBox)

Список (ListBox)

Предположим, что нам надо создать следующую форму, с помощью которой пользователь мог указывать преподавателей кафедры:

Список (ListBox) и поле со списком (ComboBox) - student2.ru

ТРЕБУЕТСЯ: создать форму (выполните самостоятельно!) и написать программу инициализации формы, в которой:

§ Список преподавателей должен быть в 2 колонки (1-я колонка – Ф.И.О, 2-я – Должность).

§ В список заносятся только преподаватели кафедры АСУ.

§ Предусмотрена возможность выбора нескольких элементов.

§ Элементы списка формируются на основе данных, расположенных на листе Кадры в книге C:\St\Институт.xls (Рис. 10‑10):

Список (ListBox) и поле со списком (ComboBox) - student2.ru

Рис. 10‑10. Структура базы данных Кадры

Начальные условия

1) при создании формы присвойте следующие имена элементам управления:

­ кнопке ОК – cmdOK

­ кнопке Отмена – cmdОтмена

­ списку – lstСотрудник

2) саму форму назовите frmСписок_в_2_колонки.

Тогда программа инициализации формы и 2 её подпрограммы будут выглядеть, например, так:

1) Option Base 1
2) Dim flagНаличие As Integer
3) Dim flag As Integer
4) Sub Список_2_колонки()
5) Dim Преподаватели() As String
6) Dim ПреподавателиТранс () As String
7) Dim НомерСтроки As Integer
8) Dim КолСотрудников As Integer
9) On Error GoTo Ошибка
10) '1. Проверяем существование книги C:\St\Институт.xls
11) Call НаличиеКниги("C:\St\Институт.xls")
12) If flagНаличие = 0 Then Exit Sub
13) '2. Проверяем существование листа Кадры
14) Call НаличиеЛиста("Кадры")
15) If flag = 0 Then Exit Sub
16) '3. Отбираем сотрудников кафедры АСУ в массив _ Преподаватели:
17) НомерСтроки = 3
18) КолСотрудников = 0
19) While Trim(Cells(НомерСтроки, 2).Value) <> ""
20) If Trim(Cells(НомерСтроки, 1).Value) = " АСУ" Then
21) КолСотрудников = КолСотрудников + 1
22) ReDim Preserve Преподаватели(2, КолСотрудников)
23) Преподаватели(1, КолСотрудников) = _ Cells(НомерСтроки, 2).Value
24) Преподаватели(2, КолСотрудников) = _ Cells(НомерСтроки, 3).Value
25) End If
26) НомерСтроки = НомерСтроки + 1
27) Wend
28) '4. Транспонируем массив Преподаватели:
29) ReDim ПреподавателиТранс(КолСотрудников, 2)
30) For i = 1 To КолСотрудников
31) ПреподавателиТранс (i, 1) = Преподаватели(1, i)
32) ПреподавателиТранс (i, 2) = Преподаватели(2, i)
33) Next i
34) '5. Заполняем список, состоящий их 2-х колонок и _
35) выводим форму на экран:
36) With frmСписок_в_2_колонки.lstСотрудник
37) .ColumnCount = 2
38) .MultiSelect = fmMultiSelectMulti
39) .List = ПреподавателиТранс
40) End With
41) frmСписок_в_2_колонки.Show
42) Exit Sub
43) Ошибка:
44) MsgBox "Программа выполнила недопустимую операцию и _ будет закрыта!", vbCritical, "Сообщение об ошибке"
45) End Sub


1) Sub НаличиеКниги(ПолноеИмяФайла)
2) Dim ПолноеИмяФайла As String
3) Dim Файл As String
4) flagНаличие = 1
5) flag = 0
6) '1. Проверяем существование книги:
7) Файл = Dir(ПолноеИмяФайла)
8) If Файл = "" Then
9) flagНаличие = 0
10) MsgBox "Файл " & ПолноеИмяФайла & " не найден!", _ vbInformation
11) Exit Sub
12) End If
13) '2. Проверяем, открыта ли книга:
14) For i = 1 To Workbooks.Count
15) If Workbooks(i).Name = Файл Then
16) Workbooks(i).Activate
17) flag = 1
18) Exit For
19) End If
20) Nexti
21) If flag = 0 Then _ Workbooks.Open Filename:= ПолноеИмяФайла
22) End Sub
1) Sub НаличиеЛиста(Лист)
2) Dim Лист As String
3) 'Проверяем наличие листа:
4) flag = 0
5) For i = 1 To Worksheets.Count
6) If Worksheets(i).Name = Лист Then
7) flag = 1
8) Exit For
9) End If
10) Nexti
11) If flag = 1 Then
12) Sheets(Лист).Select
13) Else
14) MsgBox "Не могу сформировать список - лист " & _ Лист & " не найден!", vbExclamation, _ “Сообщение об ошибке”
15) Exit Sub
16) End If
17) End Sub

Замечания:

1. Подпрограмма НаличиеКниги проверяет, существует ли нужная нам книга.

2. Подпрограмма НаличиеЛиста проверяет, существует ли искомый лист.

3. Приведенный пример не является догмой, а руководством к действию. вы можете написать свой код – гораздо лучший J!

Задание:

В Модуль10 наберите и протестируйте представленные выше программы.

Определение выбранных элементов списка

Расширим нашу задачу и подсчитаем количество выбранных сотрудников. Полученную цифру выведем на экран.

Для того чтобы определить, какие элементы списка выбрал пользователь, воспользуемся свойством Selected:

Option Base 1

Private Sub cmdOK_Click()

Dim Сотрудников As Integer

For i = 0 To lstСотрудник.ListCount - 1

If lstСотрудник.Selected(i) = True Then_

Сотрудников = Сотрудников + 1

Next i

MsgBox "Выбрано " & Сотрудников & " сотрудников!", _

vbInformation, "Сообщение"

Unload Me

End Sub

Задание:

1. В модуле формы frmСписок_в_2_колонки наберите и протестируйте программу cmdOK_Click.

2. Напишите и протестируйте программу cmdОтмена_Click.

Наши рекомендации