因此,我的 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”,所以我猜该事件实际上并未触发......
有什么想法吗?
最佳答案
布鲁德
正如我之前提到的,这是因为两个列表框的 .Listfillrange
都会自动重置。
您已为 .Listfillrange
指定了命名范围,命名范围的公式为
对于FiltroCliente
=IF(CollClientePicker<>1,OFFSET(DatiMaschera!$D$2,0,0,COUNTA(DatiMaschera!$D:$D)-1,1),"")
现在,当您进行任何更改时,Excel 会重新计算命名范围,因此 .Listfillrange
会自动更新。
这是另一种检查方法。
滚动列表框 1 并选择一个项目,然后在列表框 2 中选择一个项目。您会注意到 Listbox1 自动滚动到顶部,因为它的 .Listfillrange
会自动更新。
解决方案
使用.Additem
自动填充列表框,而不是.Listfillrange
中的命名范围
示例代码
'~~> Example : Add values from Cell A1:A10
For i = 1 To 10
ListBox1.AddItem Sheets("Sheet1").Range("A" & i).Value
Next i
HTH
席德
关于events - 每次我执行某项操作时,Excel 工作表上的列表框中的选择都会变成空白,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829798/