Страницы: 1
RSS
Как устранить ошибку 381 при очистке комбо
 
Доброго времени суток.

Имеем таблицу с произвольными датами. При совпадении с текущей датой заполняется комбо. Если требуется проверить другую дату, она вводиться в текстбокс. Нажимаем кнопку Дата. Получаем результат при совпадении даты с табличным значением. При этом активируется кнопка Новый выбор. И, вот когда мы на нее нажимаем, появляется ошибка 381 Сould not get the column property. invalid property array index/

Поясните, в чем проблема? И как с ней бороться?
 
Что это вообще?
Код
Private Sub CB_Object_Change()
Dim Iobject As Range ' Переменная номера строки в Объектах
Dim Iobject_Color As Range ' Переменная цвета строки в Объектах
    Set Iobject = Range(CB_Object.Column(1))
        Lb5.Caption = Iobject.Offset(, 1) ' Ответственный отдел
        Lb6.Caption = Iobject.Offset(, 2) ' Наименование задания
End Sub

Что тут происходит? Какая логика работы "хотелки"?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Да вроде все описал.
Код
Dim Iobject_Color As Range ' Переменная цвета строки в Объектах - виноват, не дочистил.

Lb5.Caption = Iobject.Offset(, 1) ' Ответственный отдел        
Lb6.Caption = Iobject.Offset(, 2) ' Наименование задания

Заполнение текстбоксов на форме значениями из соответствующих ячеек.
 
Адрес любого диапазона - улица, дом. Что-то одно маловато будет.
 
Извините, а Вы пробовали запустить пример?)
Улица, дом:

Код
CB_Object.AddItem (Cells(flag_Row, 2)) ' Заполняем объекты         
CB_Object.Column(1, CB_Object.ListCount - 1) = Cells(flag_Row, 2).Address

+ дома правее на 1 и 2)
 
Цитата
Beginer_78 написал:
Вы пробовали
А вы?
Код
Set Iobject = Range(CB_Object.Column(1))
 
Безусловно. И все работает. За исключением проблемы описанной в топстарте.

ЗЫ: Те, пример у Вас не работает?
Изменено: Beginer_78 - 31.10.2019 16:25:27
 
Что делает кнопка "Новый выбор"? Она должна генерировать ошибку 381? Какова её функциональная роль на форме?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
В данном случае это очистка комбо.

Не дописан код разрешению ввода новой даты. Ну и по кругу следом. Новый ввод - запись данных в комбо - очиска комбо - новый ввод.  
 
Для очистки Combo достаточно прописать
Код
CB_Object.Clear
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Так оно есть.
Код
Private Sub Cmb_NewDate_Old_Click()        
    CB_Object.Clear        
End Sub

Нажимаем и имеем проблему, описанную топстарте.
Изменено: Beginer_78 - 31.10.2019 16:36:16
 
Тогда добавьте одну строчку с проверкой
Код
Private Sub CB_Object_Change()
Dim Iobject As Range ' Переменная номера строки в Объектах
Dim Iobject_Color As Range ' Переменная цвета строки в Объектах
If CB_Object.ListCount = 0 Then Exit Sub 'ВОТ ЭТУ
Set Iobject = Range(CB_Object.Column(1))
Lb5.Caption = Iobject.Offset(, 1) ' Ответственный отдел
Lb6.Caption = Iobject.Offset(, 2) ' Наименование задания
End Sub
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Большое спасибо. Помогло)

Так, а все ж, для понимания, почему выскакивала ошибка?
 
После очистки комбо у вас срабатывало событие Private Sub CB_Object_Change. И далее в нём был только один столбец, а данные вы брали из 2 столбца CB_Object.Column(1). Поэтому и ругалось, что нет второго столбца.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Спасибо.
Страницы: 1
Наверх