Страницы: 1
RSS
На изменение КомбоБокса (форма) должно измениться то же самое значение в опорном списке.
 
Добрый вечер, Форумчане. Опять к Вам за помощью.
Есть форма. В ней левые СВ назначают опорные списки для правых СВ.
Нужно сделать, чтобы при изменении значения в правом СВ (например, "Ад" ;)  перед тем же самым значением в опорном списке добавлялось "Тест." (т.е. здесь это будет "Тест.Ад" ;) .
В опорном диапазоне дубликатов нет.

В прилагаемом файле более наглядно.
Изменено: iNic - 09.12.2014 18:55:20
 
Вариант для первого комбобокса:
Код
Private Sub ComboBox11_Change()
    With Range(ComboBox11.RowSource).Cells(ComboBox11.ListIndex + 1): .Value = IIf(.Value Like "Тест*", "", "Тест.") & .Value: End With
End Sub

Для второго по аналогии.
 
Красота.
Влад, спасибо.
 
Эх, поторопился!!!!!!!!!!!!!!!!!!!
Ведь и в самом Комбобоксе тоже меняется значение. А не должно.
Как полечить? То есть, чтобы значение в самом КомбоБоксе НЕ менялось при этом.
Или как в конце макроса из самого Комбобокса удалить "Тест.", чтобы осталось только исходный текст?
Изменено: iNic - 09.12.2014 23:53:10
 
Цитата
iNic пишет: Как полечить? То есть, чтобы значение в самом КомбоБоксе НЕ менялось при этом.
Загружайте в комбобокс массивы используя .List, тогда при изменении данных на листе в комбобоксе ничего не поменяется...
 
Это как?
 
Сейчас у вас так ComboBox11.RowSource = "дБ"
Я предлагаю так
myRa = Range("I4:I9" ;)  
ComboBox11.List = myRa


Т.е нет прямой ссылки на диапазон.
Изменено: Watcher_1 - 09.12.2014 23:53:27
 
У меня диапазонов около 200... Куча работы переписывать на конкретные ячейки.
Может можно в конце макроса на изменение Комбобокса из его значения удалить "Тест.", чтобы остался только исходный текст? Но в питающем списке, чтобы осталось изменённое значение.
Изменено: iNic - 09.12.2014 20:44:46
 
Да не надо под конкретные ячейки ничего переписывать - все диапазоны у ТС уже имеют имена, поэтому достаточно вместо задания диапазона-источника (ComboBox11.RowSource = "дА") сразу закидывать в элемент управления массив значений из диапазона (ComboBox11.List =[дА].Value). Но при следующем вызове формы или изменении левых списков значения со словом "Тест" все равно попадут в комбобоксы.
 
Влад, сделал, как Вы написали.
Теперь ругается
Код
Private Sub ComboBox11_Change()
    With Range(ComboBox11.RowSource).Cells(ComboBox11.ListIndex + 1): .Value = IIf(.Value Like "Тест*", "", "Тест.") & .Value: End With
End Sub
 
Изменено: iNic - 09.12.2014 23:35:07
 
Конечно ругается - теперь привязанного диапазона у комбобокса нет. Поэтому для корректной работы как вариант имя диапазона можно записывать в специальное свойство Tag (ComboBox11.List =[дА].Value: ComboBox11.Tag = "дА" ;) , а затем считывать в нужной процедуре:
Код
Private Sub ComboBox11_Change()
    With Range(ComboBox11.Tag).Cells(ComboBox11.ListIndex + 1): .Value = IIf(.Value Like "Тест*", "", "Тест.") & .Value: End With
End Sub
Уверен, что на реальном файле можно было бы еще упростить, но для текущего примера пока так.
Изменено: Влад - 09.12.2014 23:51:48
 
Влад, в
Код
Tag (ComboBox11.List = [дА].Value: ComboBox11.Tag = "дА";)
 
где-то ошибка (опять ругается). Может "смайлы" коробят?
Можете подсказать, или как код выложить?
 
Понятно, надо было сразу Вам код показывать в файле)
 
Спасибо. Ну, не программист я...
Спасибо большое.
Страницы: 1
Наверх