Страница: 1 |
|
Вопрос: Помогите, пожалуйста с колонками в ListBox, VBA
|
Добавлено: 08.07.08 13:06
|
|
Автор вопроса: Aleksandr
|
Помогите, пожалуйста, с кодом, а может у кого-нибудь есть пример как прописать свойсвта ListBox в VBA Excel для следующего случая:
Например, есть пять заполненных столбцов (A,B,C,D,E)на листе и есть некая переменная Z. Я циклом построчно проверяю на условие, что Если значение в строке по столбцу "A" = переменной Z, то значения столбца "C" и "E" из этой строки добавляется в список ListBox т.е. в две колонки. (как сделать одну колонку знаю).
Как прописать свойства ListBox, чтобы это осуществить.
И Второй вопрос. Как, при выборе из полученного списка в ListBox, узнать координату СТРОКИ с которой добавились эти значения? Т.е. когда мышкой выделяю в ListBox строчку, какой-то переменной присвоилось бы координата СТРОКИ откуда она была добавлена c листа Excel?
Буду очень признателен за помощь!
Ответить
|
Номер ответа: 4 Автор ответа: Jasmin
Вопросов: 23 Ответов: 417
|
Профиль | | #4
|
Добавлено: 08.07.08 14:18
|
Если программно так:
Dim MyArray(6, 4)
UserForm1.ListBox1.ColumnCount = 4
For i = 2 To 5
MyArray(i - 2, 0) = i - 2
Next i
MyArray(0, 1) = Первое значение колонка 1
MyArray(1, 1) = Второе значение колонка 1
MyArray(2, 1) = Третье значение колонка 1
MyArray(0, 2) = Первое значение колонка 2
MyArray(1, 2) = Второе значение колонка 2
MyArray(2, 2) = Третье значение колонка 2
UserForm1.ListBox1.ColumnWidths = "20;0;40;40"
MyArray(0, 3) = Первое значение колонка 3
MyArray(1, 3) = Второе значение колонка 3
MyArray(2, 3) = Третье значение колонка 3
UserForm1.ListBox1.List() = MyArray
Взятие значения опять же через двойной клик.
Ответить
|
Номер ответа: 8 Автор ответа: Aleksandr
Вопросов: 7 Ответов: 15
|
Профиль | | #8
|
Добавлено: 10.07.08 07:59
|
Огромное спасибо! У меня всё получилось!
PS. Часто, находя интересующие вопросы я сталкиваюсь с тем, что человек всех благодарит, а что у него получилось и как он решил ту или иную задачу не всегда понятно, что вынуждает перекапывать весь форум дальше и не всегда результативно.
Поэтому выкладываю часть кода, что у меня получилось работающим после помощи специалистов.
'Если formInfoObor.ComboBox4.Text = "Все"
If formInfoObor.ComboBox4.Text = "Все" Then
ChDir "E:\Мои документы\База данных"
Workbooks.Open Filename:="E:\Мои документы\База данных\ПереченьОборудования.xls"
Workbooks("ПереченьОборудования.xls".Activate
Sheets("СписокОбор".Select
Cells.Select
Selection.Sort Key1:=Range("2", Order1:=xlAscending, Key2:=Range("H2" _
, Order2:=xlAscending, Key3:=Range("I2", Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
 ataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortTextAsNumbers
'Определяем количество строк для поиска и количество строк в MyZakArr
KolStrok = 2
MyArrayRow = -1
 o While Sheets("СписокОбор".Cells(KolStrok, "O" <> ""
KolStrok = KolStrok + 1
MyArrayRow = MyArrayRow + 1
Loop
If MyArrayRow = -1 Then
MsgBox "Ни одной записи не найдено! Попробуйте повторить поиск!"
GoTo line10
Else
End If
'Ищем совпадение заказчиков и добавляем данные в formInfoObor.ListBox1
ReDim MyArrayZak(MyArrayRow, 22)
formInfoObor.ListBox1.ColumnCount = 22
Stroka = -1
KolStrok = KolStrok - 1
For pereboStrok = 2 To KolStrok
Stroka = Stroka + 1
MyArrayZak(Stroka, 0) = Stroka + 1
MyArrayZak(Stroka, 1) = Sheets("СписокОбор".Cells(pereboStrok, "B"
MyArrayZak(Stroka, 2) = Sheets("СписокОбор".Cells(pereboStrok, "C"
MyArrayZak(Stroka, 3) = Sheets("СписокОбор".Cells(pereboStrok, ""
MyArrayZak(Stroka, 4) = Sheets("СписокОбор".Cells(pereboStrok, "E"
MyArrayZak(Stroka, 5) = Sheets("СписокОбор".Cells(pereboStrok, "F"
MyArrayZak(Stroka, 6) = Sheets("СписокОбор".Cells(pereboStrok, "G"
MyArrayZak(Stroka, 7) = Sheets("СписокОбор".Cells(pereboStrok, "H"
MyArrayZak(Stroka, 8) = Sheets("СписокОбор".Cells(pereboStrok, "I"
MyArrayZak(Stroka, 9) = Sheets("СписокОбор".Cells(pereboStrok, "J"
MyArrayZak(Stroka, 10) = Sheets("СписокОбор".Cells(pereboStrok, "K"
MyArrayZak(Stroka, 11) = Sheets("СписокОбор".Cells(pereboStrok, "L"
MyArrayZak(Stroka, 12) = Sheets("СписокОбор".Cells(pereboStrok, "M"
MyArrayZak(Stroka, 13) = Sheets("СписокОбор".Cells(pereboStrok, "N"
MyArrayZak(Stroka, 14) = Sheets("СписокОбор".Cells(pereboStrok, "O"
MyArrayZak(Stroka, 15) = Sheets("СписокОбор".Cells(pereboStrok, "P"
MyArrayZak(Stroka, 16) = Sheets("СписокОбор".Cells(pereboStrok, "Q"
MyArrayZak(Stroka, 17) = Sheets("СписокОбор".Cells(pereboStrok, "R"
MyArrayZak(Stroka, 18) = Sheets("СписокОбор".Cells(pereboStrok, "S"
MyArrayZak(Stroka, 19) = Sheets("СписокОбор".Cells(pereboStrok, "T"
MyArrayZak(Stroka, 20) = Sheets("СписокОбор".Cells(pereboStrok, "U"
MyArrayZak(Stroka, 21) = Sheets("СписокОбор".Cells(pereboStrok, "V"
Next pereboStrok
formInfoObor.ListBox1.ColumnWidths = "30;0;0;80;0;0;0;120;120;0;0;0;0;0;100;0;0;0;0;0;0;0"
formInfoObor.ListBox1.List() = MyArrayZak
formInfoObor.ListBox1.Width = 480
GoTo line20
Else
End If
Ответить
|
Номер ответа: 10 Автор ответа: Aleksandr
Вопросов: 7 Ответов: 15
|
Профиль | | #10
|
Добавлено: 10.07.08 08:04
|
Прошу прощения!!! Номер ответа:8 не из того цикла!!! Вот правильный, с добавлением нужных строк в ЛистБокс:
'Если formInfoObor.ComboBox4.Text = "Заказчик"
If formInfoObor.ComboBox4.Text = "Заказчик" Then
ChDir "E:\Мои документы\База данных"
Workbooks.Open Filename:="E:\Мои документы\База данных\ПереченьОборудования.xls"
Workbooks("ПереченьОборудования.xls".Activate
Sheets("СписокОбор".Select
Cells.Select
Selection.Sort Key1:=Range("2", Order1:=xlAscending, Key2:=Range("H2" _
, Order2:=xlAscending, Key3:=Range("I2", Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
 ataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortTextAsNumbers
'Определяем количество строк для поиска и количество строк в MyZakArr
KolStrok = 2
MyArrayRow = -1
 o While Sheets("СписокОбор".Cells(KolStrok, "O" <> ""
If Sheets("СписокОбор".Cells(KolStrok, "O" = formInfoObor.ComboBox2.Text Then
MyArrayRow = MyArrayRow + 1
Else
End If
KolStrok = KolStrok + 1
Loop
If MyArrayRow = -1 Then
MsgBox "Ни одной записи не найдено! Попробуйте повторить поиск!"
GoTo line10
Else
End If
'Ищем совпадение заказчиков и добавляем данные в formInfoObor.ListBox1
ReDim MyArrayZak(MyArrayRow, 22)
formInfoObor.ListBox1.ColumnCount = 22
Stroka = -1
For pereboStrok = 2 To KolStrok
If Sheets("СписокОбор".Cells(pereboStrok, "O" = formInfoObor.ComboBox2.Text Then
Stroka = Stroka + 1
MyArrayZak(Stroka, 0) = Stroka + 1
MyArrayZak(Stroka, 1) = Sheets("СписокОбор".Cells(pereboStrok, "B"
MyArrayZak(Stroka, 2) = Sheets("СписокОбор".Cells(pereboStrok, "C"
MyArrayZak(Stroka, 3) = Sheets("СписокОбор".Cells(pereboStrok, ""
MyArrayZak(Stroka, 4) = Sheets("СписокОбор".Cells(pereboStrok, "E"
MyArrayZak(Stroka, 5) = Sheets("СписокОбор".Cells(pereboStrok, "F"
MyArrayZak(Stroka, 6) = Sheets("СписокОбор".Cells(pereboStrok, "G"
MyArrayZak(Stroka, 7) = Sheets("СписокОбор".Cells(pereboStrok, "H"
MyArrayZak(Stroka, 8) = Sheets("СписокОбор".Cells(pereboStrok, "I"
MyArrayZak(Stroka, 9) = Sheets("СписокОбор".Cells(pereboStrok, "J"
MyArrayZak(Stroka, 10) = Sheets("СписокОбор".Cells(pereboStrok, "K"
MyArrayZak(Stroka, 11) = Sheets("СписокОбор".Cells(pereboStrok, "L"
MyArrayZak(Stroka, 12) = Sheets("СписокОбор".Cells(pereboStrok, "M"
MyArrayZak(Stroka, 13) = Sheets("СписокОбор".Cells(pereboStrok, "N"
MyArrayZak(Stroka, 14) = Sheets("СписокОбор".Cells(pereboStrok, "O"
MyArrayZak(Stroka, 15) = Sheets("СписокОбор".Cells(pereboStrok, "P"
MyArrayZak(Stroka, 16) = Sheets("СписокОбор".Cells(pereboStrok, "Q"
MyArrayZak(Stroka, 17) = Sheets("СписокОбор".Cells(pereboStrok, "R"
MyArrayZak(Stroka, 18) = Sheets("СписокОбор".Cells(pereboStrok, "S"
MyArrayZak(Stroka, 19) = Sheets("СписокОбор".Cells(pereboStrok, "T"
MyArrayZak(Stroka, 20) = Sheets("СписокОбор".Cells(pereboStrok, "U"
MyArrayZak(Stroka, 21) = Sheets("СписокОбор".Cells(pereboStrok, "V"
Else
End If
Next pereboStrok
formInfoObor.ListBox1.ColumnWidths = "30;0;0;80;0;0;0;120;120;0;0;0;0;0;100;0;0;0;0;0;0;0"
formInfoObor.ListBox1.List() = MyArrayZak
formInfoObor.ListBox1.Width = 480
GoTo line20
End If
Ответить
|
Номер ответа: 11 Автор ответа: Jasmin
Вопросов: 23 Ответов: 417
|
Профиль | | #11
|
Добавлено: 10.07.08 09:39
|
MyArrayZak(Stroka, 1) = Sheets("СписокОбор" .Cells(pereboStrok, "B"
и. д. можно заменить вот такFor iArrZak = 1 to 21
MyArrayZak(Stroka, iArrZak) = Sheets("СписокОбор" .Cells(pereboStrok, Chr(iArrZak+65))
next iArrZak
Так красивее.
Ответить
|
Страница: 1 |
Поиск по форуму