我创建了下拉列表,该列表提供了现有数据(如谷歌搜索)的建议。我已按照link中提到的步骤获得预期结果。我已将进程更改为VBA代码,因为具有数据的列范围可能会随时间增加(添加新条目时将动态插入范围)。现在的问题是,由于列有超过20 000行,因此在按下键时需要更多时间来显示建议。
我需要从表单中的用户获取数据并将其存储在Excel工作表中。表单主要包含下拉搜索列表,搜索列表的值几乎为100k。搜索列表保存在不同的Excel表格中,列表的大小每周都会增加。可以使用Excel VBA来实现这一目标吗?如果是这样如何提高excel性能?
我在Windows Server 2008操作系统中使用Excel 2010。我可以将数据加载到SQL Server表。如果在Excel中无法实现这一点,那么我有什么方法可以使用SQL Server来实现这一目标吗?
答案 0 :(得分:0)
我不了解性能,但请尝试以下方法。从第2行开始,您的数据应该位于工作表“db”中。在组合框中,我在用户窗体中放置了一个文本框(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
答案 1 :(得分:0)
我无法解决你假装的问题。我能够根据输入快速填写列表。但是,代码会在字符串中的任何位置找到您的输入,而不是在开头。根据您的数据,以下代码可能对您有所帮助,或者您可以根据自己的需要重新制定它。同样,数据应该在第2行以后的表格中,并且在UserForm中有一个文本框(limits.h
)和一个列表([page|doktype = 4,5]
TCEFORM.pages.categories.disabled = 1
[global]
)。 / p>
TextBox1
答案 2 :(得分:0)
我在excel应用程序中做了类似谷歌搜索的操作。我的代码在最后一次击键后等待2秒钟,然后在另一张纸上运行以获得近似匹配。通过这种方式,在打字时它没有通过数据库运行..
Wait until user has stopped typing in ComboBox to run macro (VBA)
有人建议我实际看一下这篇文章,但这对我的特殊挑战没有帮助。