更新:看起来它实际上是.clear使得事情变得如此缓慢
所以我有三张三个组合框(每个组合一个),当我更新或刷新组合框时,这个过程大约需要15秒才能完成5个项目。当输入实际数据时,可能有超过50个项目,因此这种性能是不可接受的。
数据源是连接到访问查询的表。
我不确定这是否是Excel中的错误或者我的代码是否那么糟糕。也许我应该考虑数据验证列表而不是组合框。
这是我的代码
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
答案 0 :(得分:1)
除非你真的需要,否则永远不要遍历细胞。您可以使用以下方法从范围中获取值:
Dim vValues
vValues = ThisWorkbook.Names("Customers[Customer]").Value
vValues现在将包含您范围内的值的数组,您可以直接迭代它们而不是将它们加载到Dictionary对象中 - Dictionary对象也非常昂贵,所以只有在您真正需要它们时才应该使用它们。