КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Составление списка в программеКроме считывания элементов списка из ячеек, заданных свойством RowSource, имеется еще один способ добавления элементов в список – использование метода AddItem. Пример 5. В рабочем листе в столбце A указаны номера контрактов, в столбце B - названия городов, где выполняется данный контракт, в столбце C – стоимости контрактов. Каждый контракт выполняется в одном городе; при этом в одном городе может выполняться несколько контрактов. Требуется, чтобы названия городов отображались в списке на пользовательской форме (см. рисунок 7). Каждый город должен быть указан в списке только один раз. При щелчке по названию города должна вычисляться сумма контрактов, выполняемых в этом городе. На пользовательской форме необходимо разместить список (с именем Spisok_gorodov), надпись Сумма, текстовое поле (с именем Pole_summa), а также кнопку для закрытия формы. Для инициализации формы можно использовать следующую процедуру:
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.
|