Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA-Laboratorny_praktikum.doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
4.56 Mб
Скачать

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

11.4.1.Список (ListBox)

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

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

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

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

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

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

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

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

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

  • кнопке ОК – cmdOK

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

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

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

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

Option Base 1

Dim flagНаличие As Integer

Dim flag As Integer

Sub Список_2_колонки()

Dim Преподаватели() As String

Dim ПреподавателиТранс () As String

Dim НомерСтроки As Integer

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

On Error GoTo Ошибка

'1. Проверяем существование книги C:\St\Институт.xls

Call НаличиеКниги("C:\St\Институт.xls")

If flagНаличие = 0 Then Exit Sub

'2. Проверяем существование листа Кадры

Call НаличиеЛиста("Кадры")

If flag = 0 Then Exit Sub

'3. Отбираем сотрудников кафедры АСУ в массив _

Преподаватели:

НомерСтроки = 3

КолСотрудников = 0

While Trim(Cells(НомерСтроки, 2).Value) <> ""

If Trim(Cells(НомерСтроки, 1).Value) = " АСУ" Then

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

ReDim Preserve Преподаватели(2, КолСотрудников)

Преподаватели(1, КолСотрудников) = _

Cells(НомерСтроки, 2).Value

Преподаватели(2, КолСотрудников) = _

Cells(НомерСтроки, 3).Value

End If

НомерСтроки = НомерСтроки + 1

Wend

'4. Транспонируем массив Преподаватели:

ReDim ПреподавателиТранс(КолСотрудников, 2)

For i = 1 To КолСотрудников

ПреподавателиТранс (i, 1) = Преподаватели(1, i)

ПреподавателиТранс (i, 2) = Преподаватели(2, i)

Next i

'5. Заполняем список, состоящий их 2-х колонок и _

выводим форму на экран:

With frmСписок_в_2_колонки.lstСотрудник

.ColumnCount = 2

.MultiSelect = fmMultiSelectMulti

.List = ПреподавателиТранс

End With

frmСписок_в_2_колонки.Show

Exit Sub

Ошибка:

MsgBox "Программа выполнила недопустимую операцию и _

будет закрыта!", vbCritical, "Сообщение об ошибке"

End Sub

Sub НаличиеКниги(ПолноеИмяФайла)

Dim ПолноеИмяФайла As String

Dim Файл As String

flagНаличие = 1

flag = 0

'1. Проверяем существование книги:

If Dir(ПолноеИмяФайла) = "" Then

flagНаличие = 0

MsgBox "Файл " & ПолноеИмяФайла & " не найден!", _

vbInformation

Exit Sub

End If

'2. Определяем имя книги:

Файл = Dir(ПолноеИмяФайла)

'3. Проверяем, открыта ли книга:

For i = 1 To Workbooks.Count

If Workbooks(i).Name = Файл Then

Workbooks(i).Activate

flag = 1

Exit For

End If

Next i

If flag = 0 Then _

Workbooks.Open Filename:= ПолноеИмяФайла

End Sub

Sub НаличиеЛиста(Лист)

Dim Лист As String

'Проверяем наличие листа:

flag = 0

For i = 1 To Worksheets.Count

If Worksheets(i).Name = Лист Then

flag = 1

Exit For

End If

Next i

If flag = 1 Then

Sheets(Лист).Select

Else

MsgBox "Не могу сформировать список - лист " & _

Лист & " не найден!", vbExclamation, _

"Сообщение об ошибке"

Exit Sub

End If

End Sub

Замечания:

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

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

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

Задание:

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]