在Excel中的动态下拉列表搜索列表中的性能问题

时间:2017-09-21 12:17:14

标签: excel performance excel-vba sql-server-2012 frontend vba

我创建了下拉列表,该列表提供了现有数据(如谷歌搜索)的建议。我已按照link中提到的步骤获得预期结果。我已将进程更改为VBA代码,因为具有数据的列范围可能会随时间增加(添加新条目时将动态插入范围)。现在的问题是,由于列有超过20 000行,因此在按下键时需要更多时间来显示建议。

我需要从表单中的用户获取数据并将其存储在Excel工作表中。表单主要包含下拉搜索列表,搜索列表的值几乎为100k。搜索列表保存在不同的Excel表格中,列表的大小每周都会增加。可以使用Excel VBA来实现这一目标吗?如果是这样如何提高excel性能?

我在Windows Server 2008操作系统中使用Excel 2010。我可以将数据加载到SQL Server表。如果在Excel中无法实现这一点,那么我有什么方法可以使用SQL Server来实现这一目标吗?

3 个答案:

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

有人建议我实际看一下这篇文章,但这对我的特殊挑战没有帮助。