繁体   English   中英

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

[英]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秒钟,然后在另一张纸上运行以获取紧密匹配。 这样,它在键入时不会在数据库中运行。

等待用户停止键入ComboBox来运行宏(VBA)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM