Здравствуйте! Ребята, при удалении строк с наименованиями, загруженных в комбобокс с таблицы, в комбобоксе отображаются два конечных наименования хотя в таблицы они удалены. В чем причина, что необходимо поправить?
Здравствуйте! Ребята, при удалении строк с наименованиями, загруженных в комбобокс с таблицы, в комбобоксе отображаются два конечных наименования хотя в таблицы они удалены. В чем причина, что необходимо поправить?Сергей13
RAN, если правильно понял, то назначить свойству, в тоже время если вписать непосредственно в свойствах то при удалении остаются пустые строки. Если же через код
[vba]
Код
FormBD.Cmb_fio.RowSource = "tabl_fio"
[/vba] то пустые строки при удалении не проявляются. Сколько же нюансов… Спасибо!
RAN, если правильно понял, то назначить свойству, в тоже время если вписать непосредственно в свойствах то при удалении остаются пустые строки. Если же через код
[vba]
Код
FormBD.Cmb_fio.RowSource = "tabl_fio"
[/vba] то пустые строки при удалении не проявляются. Сколько же нюансов… Спасибо!Сергей13
Сообщение отредактировал Сергей13 - Понедельник, 06.05.2019, 20:13
[/vba] Вчера немного сбило с толку использование в одном коде 2 различных способов обращения к таблице. Именованный диапазон, действительно, здесь не нужен. Вы можете использовать любой способ обращения, но не смешивайте их, поскольку они требуют разного кода [vba]
Код
Private Sub But_fio_delete_Click() 'Удаление строки наименования в таблице tabl_fio
Dim CellFio As Range '''''''''''''''''''''''''''''''''' ИЛИ ''''''''''''''''''''''''''''''''''' With ThisWorkbook.Worksheets("fio").ListObjects("tabl_fio") If Not .DataBodyRange Is Nothing Then With .DataBodyRange Set CellFio = .Find(FormBD.Cmb_fio.Value, LookAt:=xlWhole) 'Поиск наименования в таблице tabl_fio If Not CellFio Is Nothing Then 'Если найдено наименование в таблице tabl_fio идентичное с наименованием комбобокса CellFio.EntireRow.Delete 'Удалить строку с найденным наименованием в таблице tabl_fio End If FormBD.Cmb_fio.Value = "" 'Очистка комбобокса If Not IsArray(.Value) Then FormBD.Cmb_fio.List = Array(.Value) Else FormBD.Cmb_fio.List = .Value End If End With End If End With '''''''''''''''''''''''''''''''''' ИЛИ ''''''''''''''''''''''''''''''''''' ' If Not Range("tabl_fio") Is Nothing Then ' Set CellFio = Range("tabl_fio").Find(FormBD.Cmb_fio.Value, LookAt:=xlWhole) 'Поиск наименования в таблице tabl_fio ' If Not CellFio Is Nothing Then 'Если найдено наименование в таблице tabl_fio идентичное с наименованием комбобокса ' On Error Resume Next ' CellFio.EntireRow.Delete 'Удалить строку с найденным наименованием в таблице tabl_fio ' End If ' FormBD.Cmb_fio.Value = "" 'Очистка комбобокса ' If Not IsArray(Range("tabl_fio").Value) Then ' FormBD.Cmb_fio.List = Array(Range("tabl_fio").Value) ' Else ' FormBD.Cmb_fio.List = Range("tabl_fio").Value ' End If ' End If End Sub
[/vba]
Ошибка в неправильном использовании [vba]
Код
On Error Resume Next
[/vba] Вчера немного сбило с толку использование в одном коде 2 различных способов обращения к таблице. Именованный диапазон, действительно, здесь не нужен. Вы можете использовать любой способ обращения, но не смешивайте их, поскольку они требуют разного кода [vba]
Код
Private Sub But_fio_delete_Click() 'Удаление строки наименования в таблице tabl_fio
Dim CellFio As Range '''''''''''''''''''''''''''''''''' ИЛИ ''''''''''''''''''''''''''''''''''' With ThisWorkbook.Worksheets("fio").ListObjects("tabl_fio") If Not .DataBodyRange Is Nothing Then With .DataBodyRange Set CellFio = .Find(FormBD.Cmb_fio.Value, LookAt:=xlWhole) 'Поиск наименования в таблице tabl_fio If Not CellFio Is Nothing Then 'Если найдено наименование в таблице tabl_fio идентичное с наименованием комбобокса CellFio.EntireRow.Delete 'Удалить строку с найденным наименованием в таблице tabl_fio End If FormBD.Cmb_fio.Value = "" 'Очистка комбобокса If Not IsArray(.Value) Then FormBD.Cmb_fio.List = Array(.Value) Else FormBD.Cmb_fio.List = .Value End If End With End If End With '''''''''''''''''''''''''''''''''' ИЛИ ''''''''''''''''''''''''''''''''''' ' If Not Range("tabl_fio") Is Nothing Then ' Set CellFio = Range("tabl_fio").Find(FormBD.Cmb_fio.Value, LookAt:=xlWhole) 'Поиск наименования в таблице tabl_fio ' If Not CellFio Is Nothing Then 'Если найдено наименование в таблице tabl_fio идентичное с наименованием комбобокса ' On Error Resume Next ' CellFio.EntireRow.Delete 'Удалить строку с найденным наименованием в таблице tabl_fio ' End If ' FormBD.Cmb_fio.Value = "" 'Очистка комбобокса ' If Not IsArray(Range("tabl_fio").Value) Then ' FormBD.Cmb_fio.List = Array(Range("tabl_fio").Value) ' Else ' FormBD.Cmb_fio.List = Range("tabl_fio").Value ' End If ' End If End Sub
Все-таки, хотелось бы уточнить. Так как таблица это одна колонка (изменяющаяся по строкам), а список комбобокса данной таблицы не имеет взаимосвязей со списками комбобоксов иных таблиц, то почему более упрощенный вариант со свойством RowSource без условий или обработок ошибок не может тоже быть вариантом? Потому как применяя данную строку кода,
[vba]
Код
FormBD.Cmb_fio.RowSource = "tabl_fio"
[/vba] при активации формы (как загрузка списка), а в дальнейшем в конце процедуры при выполнении основного кода (как обновление списка при изменении строк таблицы) каких-то искажений и сбоев не обнаружил.
RAN, Здравствуйте.
Все-таки, хотелось бы уточнить. Так как таблица это одна колонка (изменяющаяся по строкам), а список комбобокса данной таблицы не имеет взаимосвязей со списками комбобоксов иных таблиц, то почему более упрощенный вариант со свойством RowSource без условий или обработок ошибок не может тоже быть вариантом? Потому как применяя данную строку кода,
[vba]
Код
FormBD.Cmb_fio.RowSource = "tabl_fio"
[/vba] при активации формы (как загрузка списка), а в дальнейшем в конце процедуры при выполнении основного кода (как обновление списка при изменении строк таблицы) каких-то искажений и сбоев не обнаружил.Сергей13
Сообщение отредактировал Сергей13 - Вторник, 07.05.2019, 22:03
RAN, При вставке строк тоже необходимо использовать один из вариантов? В данном случае, правильна ли расстановка второго варианта обновления списка при добавлении строки с данными? [vba]
Код
Sub row_tabl_fio() 'Ввод данных в строку таблицы tabl_fio 'Поиск наменования в таблице tabl_fio If Not 'Если найдено похожее наименование в таблице tabl_fio Is Nothing Then 'Сообщение Else On Error Resume Next 'Ссылка на переменную добавленя строк в таблице tabl_fio 'Данные комбобокса вводятся в строку таблицы tabl_fio 'Сортировка таблицы tabl_fio If Not IsArray(Range("tabl_fio").Value) Then FormBD.Cmb_fio.List = Array(Range("tabl_fio").Value) Else FormBD.Cmb_fio.List = Range("tabl_fio").Value End If End If End Sub
[/vba]
RAN, При вставке строк тоже необходимо использовать один из вариантов? В данном случае, правильна ли расстановка второго варианта обновления списка при добавлении строки с данными? [vba]
Код
Sub row_tabl_fio() 'Ввод данных в строку таблицы tabl_fio 'Поиск наменования в таблице tabl_fio If Not 'Если найдено похожее наименование в таблице tabl_fio Is Nothing Then 'Сообщение Else On Error Resume Next 'Ссылка на переменную добавленя строк в таблице tabl_fio 'Данные комбобокса вводятся в строку таблицы tabl_fio 'Сортировка таблицы tabl_fio If Not IsArray(Range("tabl_fio").Value) Then FormBD.Cmb_fio.List = Array(Range("tabl_fio").Value) Else FormBD.Cmb_fio.List = Range("tabl_fio").Value End If End If End Sub