首页 > 解决方案 > VBA,需要帮助我的代码输出需要很长时间才能生成

问题描述

我在 a 中有一个数据列表sheet("DATA"),在 BI 列中有 ID 号列表,在 CI 列中有名称列表,现在在我的 UserForm 中,当我输入一个 ID 号时textbox1combobox2将填充所有具有相同 ID 的名称数字。

我的代码运行良好,但我的问题是生成combobox2列表的时间。我需要一种让它更快的方法。

这是我的代码:

Sub cmbo2()
    Dim i as long, lastrow as long
    lastrow = Sheets("DATA").Range("B" & Rows.Count).End(xlUp).Row

    For i = 2 to lastrow
        If Sheets("DATA").Cells(i,"B").Value=(Textbox1) Or Sheets("DATA").Cells(i,"B"),Value=Val(Texbox1) Then
            ComboBox2.AddItem Sheets("DATA").Cells(i,"C").Value
        End if
    Next
End sub

我正在使用keycode = 13输入

Private Sub Textbox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        ComboBox2.Clear
        Call cmbo2
        ComboBox2.DropDown
        ComboBox2.SetFocus
    End If
End Sub

新的子 cmbo2 代码

Sub cmbo2()
    Dim i as variant

    With worksheets("DATA")
        i = application.Match(CStr(TextBox1),.Columns(2),0)

        If IsError(i) Then _
          i = Application.Match(CLng(TextBox1),.Column(2),0)

        If Not IsError(i) Then _
          ComboBox2.AddItem.Sheets("DATA").Cells(i,"C").Value
    End With
End Sub

但是还是有问题。combobox2仅填充一个名称,即使该 id 中有很多名称我想combobox2用具有相同 id 的所有名称填充我使用的 id 不是唯一的。每个 id 都由 2 个或多个名称使用。

标签: vbaexcelcombobox

解决方案


这应该快一点。您是否缺少从列表中清除先前值的代码?

编辑:修复和测试

Sub cmbo2()
    Dim i As Long, arr

    With ThisWorkbook.Sheets("DATA")
        arr = .Range(.Range("B2"), .Cells(Rows.Count, 2).End(xlUp).Offset(0, 1)).Value
    End With

    For i = 1 To UBound(arr, 1)
        If arr(i, 1) = Me.TextBox1.Text Or _
           arr(i, 1) = Val(Me.TextBox1.Text) Then
            ComboBox2.AddItem arr(i, 2)
        End If
    Next

End Sub

推荐阅读