Выбор в ListBox на листе Excel становится пустым каждый раз, когда я что-то делаю, почему? - PullRequest
2 голосов
/ 23 марта 2012

Итак, у меня есть элемент управления ActiveX ListBox с именем ListBox1 на листе 1 моей книги Excel.Я включил несколько вариантов выбора.

Я также поместил некоторый код в объект Sheet1:

Private Sub ListBox1_Change()
    Debug.Print "hello world"
End Sub

Теперь, если я выберу три значения в моем списке, я вижу "Hello world" трираз в моем ближайшем окне.Поэтому я предполагаю, что событие Change срабатывает правильно.

Когда я выбираю любую ячейку на том же листе, где находится мой список, и я что-то с ней делаю (например, я набираю «ABCDE» или нажимаю * 1008).* Удалить ) выбор, который я сделал в списке, становится пустым.

Так что, если у меня было выбрано первое значение в списке, а затем я нажимаю на ячейку "A1", введите "Hello" в нем инажмите Введите , в тот самый момент, когда я нажимаю клавишу, первое значение не выбирается из списка.

Какого черта это?Это сводит меня с ума.Событие Listbox1_Change не работает должным образом?

Это забавно, потому что я не вижу лишнего «Hello world» в ближайшем окне, поэтому я предполагаю, что событие на самом деле не сработало ...

Есть мысли?

1 Ответ

2 голосов
/ 23 марта 2012

Bruder

Как я упоминал ранее, это потому, что .Listfillrange для обоих ListBox сбрасывается автоматически.

Вы указали именованный диапазон для .Listfillrange, а формула для именованного диапазона:

Для FiltroCliente

=IF(CollClientePicker<>1,OFFSET(DatiMaschera!$D$2,0,0,COUNTA(DatiMaschera!$D:$D)-1,1),"")

Теперь, когда вы делаете какие-либо изменения, Excel пересчитывает именованный диапазон, из-за чего .Listfillrange автоматически обновляется.

Вот еще один способ проверить это.

Прокрутите список List1 и выберите элемент, а затем выберите элемент в списке 2. Вы заметите, что Listbox1 автоматически прокручивается вверх, потому что он .Listfillrange автоматически обновляется.

РЕШЕНИЕ

Вместо именованного диапазона в .Listfillrange, автоматически заполните список, используя .Additem

ОБРАЗЕЦ КОДА

'~~> Example : Add values from Cell A1:A10
For i = 1 To 10
    ListBox1.AddItem Sheets("Sheet1").Range("A" & i).Value
Next i

НТН

Sid

...