Страницы: 1
RSS
Удаление значений из ListBox
 
Добрый день!
Перерыл весь интернет, так и не нашел ответа на свой вопрос.
Проблема в следующем.
Есть форма в которой один ListBox и две CommandButton (одна для добавления значений в ListBox, вторая для удаления)
Значения в ListBox берутся из динамической таблицы и в свойствах ListBox в RowSource прописан путь =Лист!Список1[Значение]  ("Список1[Значение]" - наименование таблицы)
Так вот, проблем с добавлением значений нет, а вот с удалением не получается (
Нашел лишь только то, что если в свойствах ListBox прописан путь для RowSource, то удаление при помощи кода:
Код
 For i = ListBox.ListCount - 1 To 0 Step -1
    If ListBox.Selected(i) Then
       ListBox.RemoveItem (i)
 End If
не подойдет. А решения проблемы так и не нашел.
Посоветуйте, пожалуйста, как решить данную проблему(
 
Заполняйте ListBox с помощью AddItem или List. Думаю, что в интернете можно найти информацию.
 
Посмотрите пример.
 
Цитата
Logistic написал:
Посмотрите пример.
Добрый вечер!
Вроде разобрался с предложенным Вами кодом, но что то у меня не получается.
Не могли бы Вы посмотреть мой пример. Что я делаю не так ?
 
Файл не смотрел... Но, если используете RowSource, то и удалять значение нужно на листе из этого диапазона.
 
А что такое ListWorkers?
Согласие есть продукт при полном непротивлении сторон
 
Ну а пока разбираетесь...
Код
Private Sub del_Click()
Dim i As Integer
On Error Resume Next
    With Me.NameOrganization
        For i = 1 To .ListCount
            If .Selected(i) = True Then
                .RemoveItem i
                Worksheets("Справочник").Cells(i, 1).Delete
                Exit For
            End If
        Next
    End With
End Sub
Изменено: Sanja - 13.02.2017 23:32:05
Согласие есть продукт при полном непротивлении сторон
 
Nickname_82 как вам такой вариант?
 
Код
Private Sub del_Click()
    Dim i As Integer
    For i = 0 To Me.NameOrganization.ListCount - 1
        If NameOrganization.Selected(i) = True Then
            NameOrganization.RemoveItem i
            Range("Workers").ListObject.ListRows(i + 1).Delete
            Exit For
        End If
    Next
End Sub

Private Sub UserForm_Initialize()
    NameOrganization.List = Range("Workers").Value
End Sub
Изменено: RAN - 14.02.2017 00:11:14
 
Sanja,Ваш код выдает ошибку :"Application-defined or object-defined error"
Я переписал свой код с предыдущего файла  работает и прописал вместо очистки строки -удалить.
Может не по "феншую" ,но работает. Если есть  другие варианты  не откажусь для своей копилки с примерами
Изменено: Logistic - 13.02.2017 23:57:20 (редактирования текста)
 
Проблема не в удалении значения из списка. Logistic здорово помог. Удаляется только значение, а не строка целиком. Как и это и есть в примере  
Дело в том, что в ListBox не отображается наименование организаций, а только лишь индекс строки
Изменено: Nickname_82 - 14.02.2017 11:59:30
 
Цитата
Nickname_82 написал:
Дело в том, что в ListBox не отображается наименование организаций, а только лишь индекс строки
в листбокса есть свойство ColumnCount, которое отвечает за количество отображаемых столбцов.
в моем примере как раз это и использовано.

а на счет
Цитата
Удаляется только значение, а не строка целиком
достаточно изменить строку

     
Код
  If .ListIndex > -1 Then Sheets("Справочник").Range("Workers").Rows(.ListIndex + 1).Delete

на
     
Код
  If .ListIndex > -1 Then Sheets("Справочник").Range("Workers[[Организация ]]").Rows(.ListIndex + 1).ClearContents
 
Dima S Спасибо Вам большое за Ваше активное участие в написании кода, а также за то, что помогли с отображением значений в ListBox.
Но с точки зрения пользователя Logistic предложил лучше код, т.к. после удаления значения из списка отсутствие пустых строк больше радует глаз.
Еще раз ОГРОМНОЕ человеческое спасибо!
Вопрос закрыт!
Страницы: 1
Читают тему
Наверх