Страница: 1 |
Страница: 1 |
Вопрос: Заполнение ListBox2 неповторяющимися из элементами
Добавлено: 06.03.07 09:17
Автор вопроса: khall
Из списка ListBox1 выбранные элементы переносятся в список ListBox2 с помощью кнопки AddButton (Добавить). При этом свойство MultiSelect списка ListBox1 = fmMultiSelectExtended (хотя конечно можно и fmMultiSelectMulti).
Как сделать так, чтобы в список ListBox2 вносились только неповторяющиеся элементы из списка ListBox1?
Option Explicit
Dim i As Integer
Dim j As Integer
Private Sub AddButton_Click()
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
For j = 0 To ListBox1.ColumnCount - 1
ListBox2.AddItem ListBox1.List(i, j)
Next j
End If
Next i
End Sub
Private Sub DeleteAllButton_Click()
ListBox2.Clear
End Sub
Private Sub DeleteButton_Click()
If ListBox2.ListIndex = -1 Then Exit Sub
ListBox2.RemoveItem ListBox2.ListIndex
End Sub
Private Sub CancelButton_Click()
Unload Me
End Sub
Private Sub OKButton_Click()
MsgBox "Список содержит " & ListBox2.ListCount & " элемента/-ов."
Unload Me
End Sub
Private Sub UserForm_Initialize()
ListBox1.MultiSelect = fmMultiSelectExtended
End Sub
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #1
Добавлено: 06.03.07 16:39
Нужно вставить проверку на наличие подобного содержимого перед вставкой очередной строки, т.е. сравнивать очередную вставляемую строку ListBox1 с уже существующими в ListBox2
А вообще-то не совсем понятно:
1. "...неповторяющиеся элементы из списка ListBox1..." - должно только одно из повторяющихся значений вноситься или повторяющиеся должны игнорироваться вообще
2.
Номер ответа: 2
Автор ответа:
khall
Вопросов: 2
Ответов: 6
Профиль | | #2
Добавлено: 06.03.07 16:58
В ListBox2 только одна колонка. А носить в ListBox2 нужно только те данные из ListBox1, которых нет в ListBox2. Спасибо.
Номер ответа: 3
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #3
Добавлено: 06.03.07 22:29
А в listbox создаютса колонки? я думал только в ListView.
Номер ответа: 4
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #4
Добавлено: 06.03.07 22:30
Проверил не создаютса
Номер ответа: 5
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #5
Добавлено: 07.03.07 02:11
khall, держите готовый
Dim i As Integer
Dim j As Integer
Dim Flag As Boolean
Dim Stroka1, Stroka2 As String
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
Stroka1 = ListBox1.List(i)
If ListBox2.ListCount <> 0 Then
Flag = False
For j = 0 To ListBox2.ListCount - 1
Stroka2 = ListBox2.List(j)
If Stroka1 = Stroka2 Then
Flag = True
End If
Next j
If Flag = False Then ListBox2.AddItem ListBox1.List(i)
Else
ListBox2.AddItem ListBox1.List(i)
End If
End If
Next i
End Sub
Docal, все есть. Поставте ColumnHeads=True и назначте ColumnCount
Номер ответа: 6
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #6
Добавлено: 07.03.07 02:57
Docal, хороший пример в Справке VBA. Смотрите пример к Column Property(Forms)
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 07.03.07 09:52
Номер ответа: 8
Автор ответа:
khall
Вопросов: 2
Ответов: 6
Профиль | | #8
Добавлено: 07.03.07 10:45
Спасибо!
Можно еще и таким образом:
Option Explicit
Dim i As Integer
Dim j As Integer
Dim fl As Integer
Private Sub AddButton_Click()
For i = 0 To Me.ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
fl = True
For j = 0 To Me.ListBox2.ListCount - 1
If ListBox1.List(i) = ListBox2.List(j)
Then fl = False
Next j
If fl Then
ListBox2.AddItem ListBox1.List(i)
End If
End If
Next i
End Sub
Номер ответа: 9
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #9
Добавлено: 07.03.07 16:13
Действительно
 oc