events - 每次我执行某项操作时,Excel 工作表上的列表框中的选择都会变成空白,为什么?

标签 events excel listbox vba

因此,我的 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/

相关文章:

events - Symfony2 : PrePersist/PreUpdate lifecycle-event not fired

java - 为什么 JMenuItem 上的这个 Actionlistener 没有执行?

使用 R 中的 readxl 包从 excel 文件中的某些行开始读取特定列

wpf - WPF列表框在MouseOver上的ItemTemplate中显示按钮

javascript - document.addEventListener ("deviceready",OnDeviceReady,false); 中第三个参数(false)表示什么?

html - 如何在IE9中访问Event.target?

excel - 遍历文件夹中的多个文件从特定工作表复制并粘贴到 MASTER 文件中

excel - 复制整行(值不是公式)VBA

c# - 如何防止 SelectedIndexChanged 事件在从列表框中删除项目后在列表框中触发

c# - 如何在 Silverlight/C# 中访问 ListBox 控件的 ScrollViewer 元素?