簡體   English   中英

如何從excel vba表單中的文本框文本填充組合框值

[英]How to populate combobox values from textbox text in excel vba form

我在 Excel 中的 VBA 表單中遇到問題,我正在嘗試使用VLOOKUP從我在文本框中鍵入的任何內容過濾組合框的值。 我如何實現這一目標?

我的代碼是:

Private Sub btnTemplateSearch_Click()
Dim filterInfo As Range
Set filterInfo = Worksheets("InfoDump").Range("E2:F46")
txtTemplateFilter.Text = filterInfo.Columns(2).Value

Me.cboTemplateType.List = Application.WorksheetFunction.VLookup(Me.txtTemplateFilter.Text, filterInfo,2,True)

下面是可用於過濾ComboBox條目列表的代碼塊示例。 我決定在模塊級別對數組變量ListForComboBox進行Dim ,以便模塊中的所有過程都可以訪問它。 它通過調用LoadListForComboboxArray在表單的 init 事件中LoadListForComboboxArray 您可以更改此過程以更新輸入值的范圍或任何其他更改。 組合框的列表屬性設置為此數組。

這是警告:您可能需要考慮調整以下性能。 我包含了一個文本框,在更改事件中,我根據文本框值調用將全局數組設置為原始數組的過濾版本。 這意味着代碼將在您每次鍵入字母時過濾數組(因此,如果您鍵入“ABC”,它將過濾 3 次,每次創建一個新數組)。 您可能希望將該函數分配給不同的事件(可能是文本框退出),以便代碼僅在您離開文本框時觸發,並且僅觸發一次。

如果您在調整代碼時遇到問題,請告訴我:

Dim ListForCombobox() As String

Private Sub TextBox1_Change()
    Me.ComboBox1.List = Filter(ListForCombobox, Me.TextBox1.Value)
    Debug.Print "CALLED"
End Sub

Private Sub UserForm_Initialize()
    LoadListForComboboxArray
    
    Me.ComboBox1.List = ListForCombobox
End Sub

Private Sub LoadListForComboboxArray()
    Dim rng As Range
    
    Set rng = Sheets("Sheet1").Range("A1:A11")
    
    ReDim ListForCombobox(1 To rng.Rows.Count)
    
    For i = 1 To rng.Rows.Count
        ListForCombobox(i) = rng(i).Value
    Next i
    
    Debug.Print ListForCombobox(1)
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM