Определение выбранных элементов списка
Расширим нашу задачу и подсчитаем количество выбранных сотрудников. Полученную цифру выведем на экран.
Для того чтобы определить, какие элементы списка выбрал пользователь, воспользуемся свойством 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.
Поле со списком (ComboBox)
Предположим, что нам надо создать форму, с помощью которой пользователь указывает нужную ему кафедру:
ТРЕБУЕТСЯ: создать форму (выполните самостоятельно!) и написать программу инициализации формы, в которой элементы поля со списком формируются на основе данных, расположенных в первом столбце на листе Кадры в книге C:\St\Институт.xls (Рис. 10‑10):
Начальные условия
1) при создании формы присвойте следующие имена элементам управления:
кнопке ОК – cmdOK
кнопке Отмена – cmdОтмена
полю со списком – cboКафедра
2) саму форму назовите frmКафедра.
Тогда код, который формирует поле со списком, запишется так:
Sub ПолеСоСписком()
'Объявляем переменные и массивы:
Dim Кафедры() As String
Dim Кафедра As String
Dim НомерСтроки As Integer
Dim КолСотрудников As Integer
Dim КолКафедр As Integer
'1. Проверяем существование книги C:\St\Институт.xls
Call НаличиеКниги("C:\St\Институт.xls")
If flagНаличие = 0 Then Exit Sub
'2. Проверяем существование листа Кадры
Call НаличиеЛиста("Кадры")
If flag = 0 Then Exit Sub
'3. Формируем список кафедр, которые встречаются в первом _
столбце на листе Кадры:
НомерСтроки = 3
Do While Trim(Cells(НомерСтроки, 1).Value) <> ""
НомерСтроки = НомерСтроки + 1
Loop
КолКафедр = 1 'кол-во кафедр
ReDim Preserve Кафедры(КолКафедр) As String
Кафедры(КолКафедр) = Trim(Cells(3, 1).Value)
For i = 3 To НомерСтроки - 1
If Trim(Cells(i + 1, 1).Value) <> "" Then
Кафедра = Trim(Cells(i + 1, 1).Value)
For j = 1 To КолКафедр
If Кафедра = Кафедры(j) Then GoTo n3
Next j
КолКафедр = КолКафедр + 1
ReDim Preserve Кафедры(КолКафедр) As String
Кафедры(КолКафедр) = Trim(Cells(i + 1, 1).Value)
End If
n3: Next i
'4. Сортируем список кафедр:
For i = 1 To КолКафедр - 1
Кафедра = Кафедры(i)
k = i
For j = i + 1 To КолКафедр
If Кафедры(j) >= Кафедра Then
Else
Кафедра = Кафедры(j)
Кафедры(j) = Кафедры (k)
Кафедры(k) = Кафедра
End If
Next
Nexti
'5. Заполняем поле со списком и выводим форму на экран:
frmКафедра.cbo Кафедра.List = Кафедры
frmКафедра.Show
End Sub
Задание:
1. В Модуль10 наберите и протестируйте программу ПолеСоСписком.
2. В модуле формы frmКафедра напишите программу обработки события «щелчок/нажатие кнопки cmdОтмена», которая выгружает форму из памяти.
3. Оформите фрагмент сортировки одномерного массива в виде подпрограммы СортировкаМассива(КолЭлементов).