Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Составление списка в программе




Кроме считывания элементов списка из ячеек, заданных свойством RowSource, имеется еще один способ добавления элементов в список – использование метода AddItem.

Пример 5. В рабочем листе в столбце A указаны номера контрактов, в столбце B - названия городов, где выполняется данный контракт, в столбце C – стоимости контрактов. Каждый контракт выполняется в одном городе; при этом в одном городе может выполняться несколько контрактов. Требуется, чтобы названия городов отображались в списке на пользовательской форме (см. рисунок 7). Каждый город должен быть указан в списке только один раз. При щелчке по названию города должна вычисляться сумма контрактов, выполняемых в этом городе.

На пользовательской форме необходимо разместить список (с именем Spisok_gorodov), надпись Сумма, текстовое поле (с именем Pole_summa), а также кнопку для закрытия формы. Для инициализации формы можно использовать следующую процедуру:

Рисунок 7 – Пользовательская форма со списком, составленным по данным в рабочем листе (пример 5) Рисунок 8 – Пользовательская форма с полями ввода ячеек (пример 6)

 

Private Sub userform_initialize()

Dim nazv() As String

Set d = Range("A1").CurrentRegion

m = d.Rows.Count

ReDim nazv(1 To m)

kol = 1: nazv(1) = d.Cells(1, 2).Value

For i = 2 To m

nazvanie = d.Cells(i, 2).Value

vklucheno = False

For j = 1 To kol

If nazvanie = nazv(j) Then vklucheno = True

Next j

If vklucheno = False Then

kol = kol + 1

nazv(kol) = nazvanie

End If

Next i

For k = 1 To kol

spisok_gorodov.AddItem (nazv(k))

Next k

End Sub

 

Здесь в строке Dim nazv() As String объявлен динамический массив: его размерность можно указывать и изменять в программе с помощью оператора ReDim. В операторе Set d = Range("A1").CurrentRegion переменная d связывается с диапазоном ячеек, где размещаются данные о контрактах. В операторе m = d.Rows.Count определяется размер диапазона ячеек с данными (другими словами – количество контрактов). В оператореReDim nazv(1 To m)размер массива nazv устанавливается в соответствии с количеством контрактов (т.е. с максимально возможным количеством городов).

Группа операторов kol = 1 … Next i реализует сбор списка названий городов в массиве nazv. Сначала в массив включается название города, указанного в первой строке (для первого контракта). Для каждого последующего города выполняется проверка на его присутствие в массиве nazv; для этого его название (переменная nazvanie) сравнивается со всеми названиями, уже присутствующими в массиве nazv. Если город еще не включен в этот массив, то он добавляется в него, и количество городов в массиве (переменная kol) увеличивается на 1.

В цикле For k = 1 To kol … Next kэлементы массива nazv последовательно добавляются в список spisok_gorodov. Для этого используется метод AddItem.

Процедура для обработки щелчка по списку городов (т.е. для вычисления суммы по выбранному городу) может быть следующей:

Private Sub spisok_gorodov_Click()

nazvanie = spisok_gorodov.Text

Set d = Range("A1").CurrentRegion

m = d.Rows.Count

Sum = 0

For i = 1 To m

If d.Cells(i, 2).Value = nazvanie Then Sum = Sum + d.Cells(i, 3).Value

Next i

pole_summa.Value = Sum

End Sub

Здесь в операторе nazvanie = spisok_gorodov.Text переменной nazvanie присваивается выбранный элемент списка. Затем в диапазоне ячеек, заполненном данными, выполняется суммирование величин из столбца C (т.е. стоимостей контрактов), если соответствующая величина в столбце B (название города) совпадает со значением переменной nazvanie. Вычисленная сумма выводится в текстовое поле pole_summa.


Поделиться:

Дата добавления: 2015-08-05; просмотров: 52; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты