Страница: 1 | 2 |
Вопрос: Вопрос по ListBox-у.
Добавлено: 20.08.07 16:54
Автор вопроса: Сергей
Привет.
Как из ListBox-a вставить информацию в ячейку листа в Экселе (ту строку, которая выделена курсором)? Как можно разбить ListBox на 3 столбца (или же в строке ввода необходимо вставлять символы таббуляции)? Как в этом случае (по столбцам) осуществляется их заполнение и вставка в ячейку строки, на которой находится курсор?
И еще вопрос: Видел ListBox и слевой стороны от каждой строки расположен Флажок (CheckBox), т.е. подразумевается что можно выделить несколько строк для вставки. Как организуется такой ListBox и как с ним работать (заполнять данными и брать из него инфу)?
Спасибо за разъяснения.
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #1
Добавлено: 20.08.07 17:19
Для заполнения записей листбокса 3-ми столбацами следует использовать раздетель vbTab, но сначала нужно установить листбоксу флаг LB_SETTABSTOPS через SendMessage (третьим аргументом указывается количество столбцов, четвертым передается указатель на массив с размерами столбцов).
Флажки делаются свойством Style = Checkbox.
Номер ответа: 2
Автор ответа:
alex
Вопросов: 0
Ответов: 3
Профиль | | #2
Добавлено: 21.08.07 09:22
Для вставки информации в ячейку можно использовать событие Change, которое происходит при изменении значения ListBox.
Номер ответа: 3
Автор ответа:
Сергей
Вопросов: 13
Ответов: 25
Профиль | | #3
Добавлено: 21.08.07 13:39
А можно пример кода?
Номер ответа: 4
Автор ответа:
alex
Вопросов: 0
Ответов: 3
Профиль | | #4
Добавлено: 21.08.07 15:03
Имя ListBox - lsbXXX.
Пример кода:
Private Sub lsbXXX_Change()
 im Yach As Range
For Each Yach In Selection
Yach.Value = lsbXXX.Value
Next Yach
End Sub
Номер ответа: 5
Автор ответа:
Сергей
Вопросов: 13
Ответов: 25
Профиль | | #5
Добавлено: 21.08.07 16:15
Пробовал пользоваться SendMessage.
Const LB_SETSEL = &H185
Но в этом месте на ".hwnd"
SendMessage ListBox1.hwnd, LB_SETSEL, True, ByVal True
End Sub
выдается сообщение об ошибке: Method or data member not found.
Номер ответа: 6
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #6
Добавлено: 21.08.07 23:06
Для получения hwnd, тебе нужно найти свое окно (например, FindWindow), а на нем дочернее, твой листбокс.
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 23.08.07 20:28
попробуй помучь ListView. ListBox поддерживает столбцы, но это не похоже на столбцы экселя, это скорее всего список с прокруткой в бок, а не вниз. Количество стобцов помойму и через обычные свойства листбокса устанавливались, хотя я уже непомню..
Своё окно помойму можно и проще найти Me.hWnd
Номер ответа: 8
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #8
Добавлено: 23.08.07 22:40
Номер ответа: 9
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #9
Добавлено: 24.08.07 02:10
Может все-таки попробуем без API обойтись?
Dim m(2, 2)
m(0, 0) = 1
m(0, 1) = 2
m(0, 2) = 3
m(1, 0) = 4
m(1, 1) = 5
m(1, 2) = 6
m(1, 0) = 7
m(1, 1) = 8
m(1, 2) = 9
m(2, 0) = 10
m(2, 1) = 11
m(2, 2) = 12
With ListBox1
.ColumnCount = 3
.List = m
End With
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With ListBox1
ActiveCell.Value = .List(.ListIndex, 0)
ActiveCell.Offset(columnOffset:=1).Value = .List(.ListIndex, 1)
ActiveCell.Offset(columnOffset:=2).Value = .List(.ListIndex, 2)
End With
End Sub
Номер ответа: 10
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #10
Добавлено: 24.08.07 02:15
На всякий-разный - работает по двойному клику на строке ListBox'а
Номер ответа: 11
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #11
Добавлено: 24.08.07 03:13
По вопросу о флажках: выставляете свойства ListBox'а:
- MultiSelect = fmMultiSelectMulti
- ListStyle = fmListStyleOption
Это можно делать также в UserForm_Initialize
По вводу вставки значений из нескольких строк из ListBox'а с несколькими столбцами на лист Excel'я - позже
Номер ответа: 12
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #12
Добавлено: 24.08.07 04:52
Держите целиком. Работает от кнопки
Private Sub UserForm_Initialize()
Dim m(2, 2)
m(0, 0) = 1
m(0, 1) = 2
m(0, 2) = 3
m(1, 0) = 4
m(1, 1) = 5
m(1, 2) = 6
m(2, 0) = 7
m(2, 1) = 8
m(2, 2) = 9
With ListBox1
.ColumnCount = 3
.List = m
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
End With
End Sub
Private Sub CommandButton1_Click()
c = 0
With ListBox1
For a = 0 To .ListCount - 1
If .Selected = True Then
For b = 0 To 2
ActiveCell.Offset(c, b).Value = .List(a, b)
Next
c = c + 1
End If
Next
End With
End Sub
Номер ответа: 13
Автор ответа:
Сергей
Вопросов: 13
Ответов: 25
Профиль | | #13
Добавлено: 06.09.07 12:30
Спасибо все получилось.
Столкнулся с такой заморочкой и не знаю как ее решить:
На форме есть ListBox, TextBox и кнопка. ListBox заплнен большим списком строк (есть вертикальный скролл). В TextBox нужно вводить строку и по кнопки искать ее в ListBox-е. Если найдена то выделить ее. (ListBox - МультиСелект). Т.е. типа поиска. Проблема в том, что строка в ListBox выделяется, а автоматического скроллинга на эта строку не происходит. Т.е. пользователь не видит что выделяется если выделение происходит в глубине списка. Как это решить? Желательно не API функциями.
Спасибо.
Номер ответа: 14
Автор ответа:
Сергей
Вопросов: 13
Ответов: 25
Профиль | | #14
Добавлено: 06.09.07 13:53
Все, нашел.
Dim i As Byte
For i = 0 To ListBox1.ListCount - 1
If ListBox1.List(i, 0) = TextBox1.text Then
ListBox1.Selected(i) = True
[B][B]ListBox1.TopIndex = i[/B]
Exit Sub
End If
Next i
Номер ответа: 15
Автор ответа:
Сергей
Вопросов: 13
Ответов: 25
Профиль | | #15
Добавлено: 06.09.07 16:22
А вот такой вопрос:
У меня есть ListBox с тремя колонками и массив с тремя полями, т.е.
Mas(1).n = "123"
Mas(1).m = "456"
Mas(1).k = "789"
Как заполнить ListBox значениями из Mas? Пока только нашел способ передачи данных другому массиву типа Mas1(1,3), тогда командой ListBox1.List = Mas1 все получается.
Можно ли обойтись без второго массива а как то напрямую передать здначения Mas --> ListBox1?
Спасибо.