Performance issue in Dynamic Dropdown Search list in excel

谁说胖子不能爱 提交于 2020-01-07 04:34:08

问题


I have created dropdown list which gives suggestions from existing data (like google search). I have followed the steps mentioned in the link to get the expected result. I have changed the process to VBA Code since the column range that has data can increase in time (Formula will be inserted for a range dynamically when a new entry is added). Now the problem is since the column have more than 20 000 rows it takes more time to display the suggestions when a key is pressed.

I need to get data from users in a form and store it in an excel sheet. Form will mostly contain dropdown search lists with search list having almost 100k values. Search list is maintained in a different excel sheet and the size of the list will increase every week. Is it ok to use Excel VBA to achieve this? If so how to improve excel performance?

I am using Excel 2010 in Windows Server 2008 OS. I can load the data to SQL Server Table. If this is not possible in Excel is there any way that I can use SQL Server to achieve this?


回答1:


I don't know about performance, but give the following a try. Your data is supposed to be in sheet "db", from row 2 onwards. Insted of a combobox, I place a textbox (TextBox1) and a list (ListBox1) in a UserForm.

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:


I can't solve what you pretend. I was able to fill a list according to input rather fast. However, code finds your input anywhere in the string, not in the beginning. Depending on your data, the following code might help you, or may be you can reformulate it to fit your needs. Again, data is supposed to be in sheet "db", from row 2 onwards, and there is a textbox (TextBox1) and a list (ListBox1) in a UserForm.

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



回答3:


I did something similar to a google search in my excel app. My code waits 2 seconds after the last keystroke, then runs through another sheet to get close matches. This way it wasn't running through the DB whilst typing..

Wait until user has stopped typing in ComboBox to run macro (VBA)

Someone had suggested I actually look at this post but it was not helpful to my particular challenge.



来源:https://stackoverflow.com/questions/46343731/performance-issue-in-dynamic-dropdown-search-list-in-excel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!