ПОмогите в коде разобраться

Программирование на Visual Basic for Applications
Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

ПОмогите в коде разобраться

Сообщение Мишка » 28.05.2007 (Пн) 10:25

собственно, Добрый "день". очень долго думает комбобокс(наверно) когда насильно присваиваю ему индекс:

я в VBA писал(а):Private Sub ComboBox1_Change()

'занесение кол-ва порций
TextBox1.Text = Range("dish").Cells(2, ComboBox1.ListIndex + 1)

TextBox1.Enabled = True
TextBox1.SetFocus
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim li As Integer

'проверка на ручной ввод
If ComboBox1.ListIndex = -1 Then
das = MsgBox("НЕ НАДО НИЧЕГО ПИСАТЬ ВРУЧНУЮ!!! просто выберите из уже имеющихся!!!!", vbExclamation, "ПРЕДУПРЕЖДЕНИЕ!")
TextBox1.Enabled = False
Exit Sub
End If

li = ComboBox1.ListIndex

Range("dish").Cells(2, ComboBox1.ListIndex + 1) = TextBox1.Text

'заполнение списка комбобокса БЛЮД
ComboBox1.Clear
For i = 1 To Range("dish").Columns.Count
UserForm5.ComboBox1.AddItem (Range("dish").Cells(2, i) & " - " & Range("dish").Cells(1, i))
Next i

ComboBox1.ListIndex = li 'ЭТА СТРОКА!!!!!!!!!! МЕДЛЕННО РАБОТАЕТ!!! :-(

TextBox1.Enabled = False
End Sub
;-)

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 28.05.2007 (Пн) 10:32

и еще вопрос: можно ли как то просто запретить вводить вручную в комбобокс, только выбирать? и можно ли вместо повторного очищения и заполнения комбобокса поменять в нем значения? (типа выше у меня написано что
Код: Выделить всё
'заполнение списка комбобокса БЛЮД
ComboBox1.Clear
For i = 1 To Range("dish").Columns.Count
UserForm5.ComboBox1.AddItem (Range("dish").Cells(2, i) & " - " & Range("dish").Cells(1, i))
Next i
а мне нужно просто в начале каждой строчки бокса поменять цифру на то что было вписано в текстбоксе...)
да... и все это происходит в УсерФорм5.

:-( не смейтесь плиз над моей прогой! это моя первая! на вба
;-)

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 28.05.2007 (Пн) 14:36

Для ComboBox
Установи Style в fmStyleDropDownList - чтобы пользователь мог только выбирать данные из выпадающего списка.
Установи ColumnCount = 2, два столбца выпадающего списка.
ColumnWidths = "16 pt; 80 pt" - ширина каждого столбца в pt
Дотсуп по List(RowIndex, ColumnIndex) (оба индекса начинаются с 0)
Тогда сможешь менять числовые значения в столбце 0 по изменению TextBox1

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 29.05.2007 (Вт) 7:02

Спасибо, попробую!
;-)

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 29.05.2007 (Вт) 11:27

Мишка
Так а чем отличается от твоего исходного подхода? ListIndex - это номер строки в ComboBox. От того, что их стало 2, а не 1, номер строки никак не поменяется. Или я чего-то не понимаю? Тогда по подробнее, что у тебя делается и как и какие данные на рабочем листе, с которыми ты пытаешься установить связь.

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 30.05.2007 (Ср) 7:27

есть примитивная прога, типа тётька из столовки(т.к. с компом обращаться совсем не умеет) теперь должна вести отчет. и для этого я пытаюсь сделать ей "проще".
теперь у меня на листе несколько РАНГЕ присвоенных вручную и с ними я работаю, есть диапазон dish,это столбы в которых в первой строке находятся их названия, а во второй количество съеденных в неделю порций(сам лист гораздо больше, там считаются и цены для НЕ рабочих, для отчетности и для рабочих, считаются суммы использованных продуктов[диапазон poducti] из определенного количества которых состоит каждая стрепня из dish)

короче, в комбобоксе пятой усерформы вводилось количество съеденного, а рядом в текстбоксе нужно вводить было новое кол-во.
теперь я комбо поменял на листбокс(только на этой усерформе) поступил аналогично как Вы рассказали про комбо...(колумн - 2)
все стало СУПЕР! только начал упрощать другую форму... устанавливать Style - fmStyleDropDownList и убрал кучу проверок на ручной ввод... но теперь другие косяки вылезли - чтобы небыло ничего НЕ выбрано понаставил везде КомбоБокс.ЛистИндекс=0
чтобы первая строка была уже выбрана, а она могла уже нужную сама выбрать. короче: теперь при очистке КомбоБокса вылетает ошибка типа нет НУЛЕВОЙ строки! я и сам знаю, но по идее комбо(вроде бы) заполняется раньше чем КомбоБокс.ЛистИндекс =0
;-)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 30.05.2007 (Ср) 7:59

Перед установкой индекса, проверяй наличие полей в комбобоксе..
А лучше скажи, в каком событии идет установка, а в каком заполнение.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 30.05.2007 (Ср) 10:01

Мишка писал(а):... примитивная прога ... пытаюсь сделать ... "проще"...


"Проще" - это Access! Там эти трепыхания делаются волшебным образом без единой строчки кода, как такового. Вот что я тебе посоветую, коллега: изучай M$ Access
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 30.05.2007 (Ср) 14:00

Мишка
Так и не понял из твоих пояснений - в чём причина постоянной очистки ComboBox? Да и устанавливать свойство ListIndex можно только после того, как в ComboBox что-то есть


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 96

    TopList