Страница: 1 |
Страница: 1 |
Вопрос: Выбор значений из Combobox
Добавлено: 13.02.08 15:12
Автор вопроса: Jasmin
Привет всем!
Есть форма, на ней ComboBox. Заполняю значениями через массив.
MyList - массив со значениями списка
Далее при попытке выбора какого-либо значения из списка НИЧЕГО не выбирается и не ругается.
В отладке показывает ComboBox1.Text и ComboBox1.Value как пустую строку.
Подскажите куда подевалось выбранное значение ?
P.S. Обычно чтобы определить выбранное значение использовала ComboBox1.Value. Сейчас выдает пустую строку.
Спасибо.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 13.02.08 15:22
Воможно вы делаете что-то неверно.
Попробуйте воспользоваться этим кодом - все верно работает:
Dim S(4) As String
S(0) = "artyom1"
S(1) = "artyom2"
S(2) = "artyom3"
S(3) = "artyom4"
S(4) = "artyom5"
ComboBox1.List = S
End Sub
Private Sub ComboBox1_Change()
MsgBox (Me.ComboBox1.Value)
End Sub
Номер ответа: 2
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #2
Добавлено: 13.02.08 17:34
Задам вопрос по-другому. ))
'Код формы
Option Base
Private Sub UserForm_Initialize()
Dim S(4) As String
For i=1 To 30
S(i) = "artyom" & i
Next i
ComboBox1.List = S
End Sub
Private Sub ComboBox1_Change()
Dim STemp() As String
MyStr=ComboBox1.Text
j=1
For i=1 To 30
If S(i) Like "*" & MyStr & "*" Then
STemp(j)=S(i)
End If
Next i
ComboBox1.Clear
ComboBox1.List = STemp
ComboBox1.DropDown
End Sub
Суть такая. На форме список. При инициализации заполняется начальными данными. Например, серийными номерами. В поле начинают вводить данные, предположительно содержащиеся в списке. При каждом изменении содержимое списка корректируется. В нем остаются значения, в которых присутствуют набранные символы. При этом во время "такого" поиска список должен быть раскрыт, чтобы пользователь, как только увидит нужный номер, мог щелкнуть на нем мышью и соответственно окончательно сделать выбор.
"Поиск" работает, список остается раскрытым. Но при выборе значения мышкой, список закрывается (как и должно быть), но в нем не отображается выбранное значение. Свойства ComboBox1.Text и ComboBox1.Value имеют пустое значение.
Куда все делось ? 8-0 Что я неправильно делаю/использую ?
Номер ответа: 3
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #3
Добавлено: 13.02.08 22:20
что это ?
Dim S(4) As String //Инициализируешь массив с 5-ми элементами?. напиши Dim S(29) as string
For i=1 To 30
S(i) = "artyom" & i
Next i
второй кусок кода
Dim STemp() As String
dim j as integer
j=0
For i=1 To 30
If S(i) Like "*" & MyStr & "*" Then
ReDim STemp(j) 'увеличим размер массива
STemp(j)=S(i)
j = j + 1 ' инкрементируем переменную
End If
Next i
Номер ответа: 4
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #4
Добавлено: 14.02.08 06:37
Это я поторопилась. Конечно
(У меня нумерация поставлена с 1)
Прибавление номера элемента массива тоже делаю. С массивами все нормально. Но при выборе мышью свойства ComboBox1.Text и ComboBox1.Value имеют пустое значение. Как мне получить значение, которое пользователь выбрал из списка ?
Номер ответа: 5
Автор ответа:
night-roll
Вопросов: 36
Ответов: 326
Профиль | | #5
Добавлено: 14.02.08 18:15
(У меня нумерация поставлена с 1)
правильнее будет...
Номер ответа: 6
Автор ответа:
night-roll
Вопросов: 36
Ответов: 326
Профиль | | #6
Добавлено: 14.02.08 18:34
Ох, ты! чуть не забыл ...ответ на сам вопрос!
массив S(i) надо объявить Public? раз Вы уж с ним работате, а не со списком ComboBox
Номер ответа: 7
Автор ответа:
night-roll
Вопросов: 36
Ответов: 326
Профиль | | #7
Добавлено: 14.02.08 18:36
Ох, ты! чуть не забыл ...ответ на сам вопрос!
массив S(i) надо объявить Public? раз Вы уж с ним работате, а не со списком ComboBox
Номер ответа: 8
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #8
Добавлено: 15.02.08 06:42
У меня массивы все объявлены как Public. Все передается и работает.
Но вопрос-то был в другом. )) "но в нем не отображается выбранное значение. Свойства ComboBox1.Text и ComboBox1.Value имеют пустое значение."
Пока пешила проблему через
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MyText = ComboBox1.SelText
End Sub
Но это у меня на форме есть еще элементы, на которые я могу перейти. А если их не будет, как быть ?
Номер ответа: 9
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #9
Добавлено: 15.02.08 06:48
Если в начале макроса есть директива Option Base 1 (изменяющая начало нумерацию базового индекса на 1), то необязательно писать
можно просто
Это просто другой вариант объявления размерности массива.
Номер ответа: 10
Автор ответа:
night-roll
Вопросов: 36
Ответов: 326
Профиль | | #10
Добавлено: 15.02.08 21:47
Номер ответа: 11
Автор ответа:
night-roll
Вопросов: 36
Ответов: 326
Профиль | | #11
Добавлено: 15.02.08 22:44
прошу извинить за опечатку в топике №10, под Вышем следует понимать Вашем
по существу: вот в этом месте...
ComboBox1.List = STemp
ComboBox1.DropDown
.List = STemp
.DropDown
End With
Номер ответа: 12
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #12
Добавлено: 16.02.08 09:55
Согласна.
Исправила.
Но значения выбора все равно появляются только после выполнения Sub ComboBox1_Exit.
Почему так происходит ?