[英]Performance issue in Dynamic Dropdown Search list in excel
我创建了一个下拉列表,它从现有数据(例如Google搜索)中提供建议。 我已经按照链接中提到的步骤进行操作以获得预期的结果。 我已将过程更改为VBA代码,因为具有数据的列范围会随时间增加(添加新条目时将动态为范围插入公式)。 现在的问题是,由于该列有2万多行,所以在按下某个键时,要花更多的时间显示建议。
我需要以某种形式从用户那里获取数据并将其存储在Excel工作表中。 表单将主要包含下拉搜索列表,搜索列表的值将近100k。 搜索列表保存在其他Excel工作表中,并且列表的大小每周都会增加。 是否可以使用Excel VBA实现此目的? 如果是这样,如何提高Excel性能?
我在Windows Server 2008 OS中使用Excel 2010。 我可以将数据加载到SQL Server表中。 如果在Excel中无法做到这一点,有什么方法可以使用SQL Server来实现?
我不了解性能,但是请尝试以下方法。 从第2行开始,您的数据应该在表格“ db”中。 在组合框的引导下,我在UserForm中放置了一个文本框( TextBox1
)和一个列表( ListBox1
)。
Private Sub TextBox1_Change()
Dim v As String
Dim YourInput As String
Dim iIdx As Long
Dim CharNumber As Integer
YourInput = TextBox1.Text
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ListBox1.Clear
lLastRow = Worksheets("db").Cells(3, 1).End(xlDown).Row
CharNumber = Len(YourInput)
For iIdx = 2 To lLastRow
v = Worksheets("db").Cells(iIdx, 1).Text
If LCase(Left(v, CharNumber)) = LCase(YourInput) Then
ListBox1.AddItem v
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
Private Sub ListBox1_Click()
MsgBox ("Your selection: " & ListBox1.Text)
'do your stuff
End Sub
我无法解决你的假装。 我能够根据输入快速填充列表。 但是,代码会在字符串中的任何位置(而不是开头)找到您的输入。 根据您的数据,以下代码可能会对您有所帮助,或者您可以重新构造它以适合您的需求。 同样,数据应该从第2行开始位于工作表“ db”中,并且UserForm中有一个文本框( TextBox1
)和一个列表( ListBox1
)。
Private Sub UserForm_initialize()
Dim lLastRow As Long
'Get last row of data
lLastRow = Worksheets("db").Cells(3, 1).End(xlDown).Row
ReDim DirArray(1 To 1)
j = 1
'Add all the data to an Array (DirArray)
For i = 3 To lLastRow
ReDim Preserve DirArray(1 To j)
DirArray(UBound(DirArray)) = Worksheets("db").Cells(i, 1).Value
j = j + 1
Next
End Sub
Private Sub TextBox1_Change()
Dim YourInput As String
YourInput = TextBox1.Text
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ListBox1.Clear
LArray = Array()
LArray = Filter(DirArray, YourInput, True, vbTextCompare)
ListBox1.List = LArray
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
Private Sub ListBox1_Click()
MsgBox ("Your selection: " & ListBox1.Text)
'do your stuff
End Sub
我在我的Excel应用程序中做了类似于Google搜索的操作。 我的代码在最后一次击键后等待2秒钟,然后在另一张纸上运行以获取紧密匹配。 这样,它在键入时不会在数据库中运行。
有人建议我实际上看一下这篇文章,但这对我的特殊挑战没有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.