因此,我在Excel工作簿的Sheet1上有一个名为ListBox1的ActiveX ListBox控件。我在其上启用了多项选择。
我还在Sheet1对象中添加了一些代码:
Private Sub ListBox1_Change()
Debug.Print "hello world"
End Sub
现在,如果我在列表框中选择三个值,我会在我的即时窗口中看到“Hello world”三次。所以我想Change事件会正确触发。
当我在列表框所在的同一张纸上选择任何单元格时,我会对其执行某些操作(例如,我在其中键入“ABCDE”,或者我按删除)我所做的选择列表框变成空白。
因此,如果我在列表中选择了第一个值,然后单击单元格“A1”,在其中键入“Hello”并按 Enter ,就在我按下第一个键的那一刻从列表框中取消选择值。
为什么会这样?这真让我抓狂。 Listbox1_Change事件无法正常工作吗?
虽然很有趣,因为我没有在即时窗口看到额外的“Hello world”,所以我猜这个事件实际上没有触发......
有什么想法吗?
答案 0 :(得分:2)
布鲁德
正如我之前提到的,这是因为ListBox的.Listfillrange
会自动重置。
您已为.Listfillrange
指定了命名范围,并且指定范围的公式为
FiltroCliente
=IF(CollClientePicker<>1,OFFSET(DatiMaschera!$D$2,0,0,COUNTA(DatiMaschera!$D:$D)-1,1),"")
现在,当您进行任何更改时,Excel会重新计算命名范围,因此.Listfillrange
会自动更新。
这是检查它的另一种方法。
滚动Listbox1并选择一个项目,然后在Listbox2中选择一个项目。您会注意到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
HTH
西特