2017-09-21 20 views
0

我創建了一個下拉列表,它提供了來自現有數據(如谷歌搜索)的建議。我已按照link中提到的步驟獲得預期結果。我已經將流程更改爲VBA代碼,因爲具有數據的列範圍可能會隨時間增加(添加新條目時,公式將動態插入一個範圍)。現在的問題是,由於該列有超過20000行,因此按下按鍵時需要更多時間來顯示建議。Excel中的動態下拉搜索列表中的性能問題

我需要從用戶的表單中獲取數據並將其存儲在Excel表格中。表單將主要包含具有接近100k值的搜索列表的下拉搜索列表。搜索列表保存在不同的Excel表格中,並且列表的大小將每週增加。使用Excel VBA實現這一點可以嗎?如果是的話如何提高excel性能?

我在Windows Server 2008操作系統中使用Excel 2010。我可以將數據加載到SQL Server表。如果這在Excel中是不可能的,我有什麼方法可以使用SQL Server來實現這一點?

回答

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 
+0

感謝您的答案:)但我仍然看到性能問題。按下鍵時,列表框需要至少5到10秒才能更新。 – Vijay

+0

我明白了....看看新的答案。 – CMArg

0

我無法解決你假裝的東西。我能夠根據輸入很快地填寫一個列表。但是,代碼會在字符串中的任何位置找到您的輸入,而不是在開始處。根據您的數據,以下代碼可能對您有所幫助,或者您可能會重新配置它以適應您的需求。同樣,數據應該位於第2行以後的表「db」中,並且在用戶窗體中有一個文本框(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 
0

我在我的Excel應用程序中做了類似於谷歌搜索的操作。我的代碼在最後一次擊鍵之後等待2秒鐘,然後通過另一張表進行近距離匹配。這樣,它不是通過數據庫,同時輸入運行..

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

有人曾建議我其實看這個帖子,但它不利於我的特殊挑戰。