Добрый вечер. У меня на листе есть листбокс. Юзер должен щёлкать по пунктам листбокса и пункт, по которому щёлкнули, должен вставляться в ячейку.
Проблема в том, что если пункт в листбоксе уже выделен, то при щелчке по нему, он не вставляется в ячейку. У листбокса я использую событие "Change".
В чём проблема?
Могу предложить такие варианты.
Вариант 1
Используйте у листбокса вместо события "Change" событие "MouseUp". Но в данном случае нужно дополнить код, учитывая, что юзер может щёлкнуть не по пункту, а в пустой области листбокса, а в этот момент может не быть выделенных пунктов.
Вариант 2
Перед отображением листбокса, убирайте выделение у выделенного пункта. Тогда не будет выделенного пункта и событие "Change" сработает.
Но здесь есть подводный камень: при убирании выделения запускается событие "Change", что в данном случае не нужно. Поэтому, чтобы не делать лишнего кода, используйте вместо события "Change", событие "Click".
Событие "Click" не запускается при убирании выделения у выделенных пунктов, а в остальном работает так же, как и "Change", - срабатывает, когда выбирается пункт в листбоксе.
Убирать выделение можно двумя способами.
Способ 1. Если свойство MultiSelect" установлено на выбор одного пункта:
Private Sub CommandButton1_Click()
Me.ListBox1.ListIndex = -1
End Sub
Способ 2. Если свойство MultiSelect" установлено на выбор нескольких пунктов:
Private Sub CommandButton1_Click()
Dim i As Long
For i = 0 To Me.ListBox1.ListCount - 1 Step 1
If Me.ListBox1.Selected(i) = True Then
Me.ListBox1.Selected(i) = False
End If
Next i
End Sub
Большое спасибо. Использовал вариант 2 и всё получилось!