每次我做某事时Excel工作表上的ListBox中的选择都是空白的,为什么?

时间:2012-03-22 20:14:49

标签: events excel-vba listbox vba excel

因此,我在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”,所以我猜这个事件实际上没有触发......

有什么想法吗?

1 个答案:

答案 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

西特