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

ТРЕБУЕТСЯ: создать форму (выполните самостоятельно!) и написать программу инициализации формы, в которой:
§ Список преподавателей должен быть в 2 колонки (1-я колонка – Ф.И.О, 2-я – Должность).
§ В список заносятся только преподаватели кафедры АСУ.
§ Предусмотрена возможность выбора нескольких элементов.
§ Элементы списка формируются на основе данных, расположенных на листе Кадры в книге C:\St\Институт.xls (Рис. 10‑10):

Рис. 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) | If Dir(ПолноеИмяФайла) = "" Then | 
| 8) | flagНаличие = 0 | 
| 9) | MsgBox "Файл " & ПолноеИмяФайла & " не найден!", _ vbInformation | 
| 10) | Exit Sub | 
| 11) | End If | 
| 12) | '2. Определяем имя книги: | 
| 13) | Файл = Dir(ПолноеИмяФайла) | 
| 14) | '3. Проверяем, открыта ли книга: | 
| 15) | For i = 1 To Workbooks.Count | 
| 16) | If Workbooks(i).Name = Файл Then | 
| 17) | Workbooks(i).Activate | 
| 18) | flag = 1 | 
| 19) | Exit For | 
| 20) | End If | 
| 21) | Nexti | 
| 22) | If flag = 0 Then _ Workbooks.Open Filename:= ПолноеИмяФайла | 
| 23) | 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 наберите и протестируйте представленные выше программы.