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

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

Для того чтобы определить, какие элементы списка выбрал пользователь, воспользуемся свойством 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. Оформите фрагмент сортировки одномерного массива в виде подпрограммы СортировкаМассива(КолЭлементов).