清除Excelcombobox需要太长时间

更新:它看起来像它实际上是使得事情如此缓慢的.clear

所以我有三张三张combobox(每张一张),当我更新或刷新combobox时,整个过程大约需要15秒才能完成5个项目。 当input实际数据时,可能有超过50个项目,所以这个性能是不可接受的。

数据源是连接到访问查询的表。

我不确定这是Excel中的错误,还是我的代码很糟糕。 也许我应该考虑数据validation列表,而不是一个combobox。

这是我的代码

Public Sub Workbook_Open() Sheet1.PGcustomer.Clear Sheet3.PGcustomer.Clear Sheet4.PGcustomer.Clear Dim dataSet As Range Set dataSet = Sheet2.Range("Customers[Customer]") Dim data() As String Dim dataSize As Integer Dim dictionary As Object Dim i As Long dataSize = dataSet.Rows.Count Set dictionary = CreateObject("Scripting.Dictionary") ReDim data(dataSize) For i = 1 To UBound(data) data(i) = dataSet.Cells(i, 1).Value '<<< using Cells dictionary(data(i)) = 1 Next i Dim v As Variant For Each v In dictionary.Keys() Sheet1.PGcustomer.AddItem v Sheet3.PGcustomer.AddItem v Sheet4.PGcustomer.AddItem v Next v Sheet1.PGcustomer.ListIndex = 0 Sheet3.PGcustomer.ListIndex = 0 Sheet4.PGcustomer.ListIndex = 0 End Sub 

永远不要遍历单元格,除非你真的必须。 你可以使用这个从范围中获取值:

 Dim vValues vValues = ThisWorkbook.Names("Customers[Customer]").Value 

vValues现在将包含您的范围内的值的数组,您可以直接迭代,而不是将它们加载到Dictionary对象中 – Dictionary对象的成本也相当高,所以只能在真正需要时使用它们。