vba - VBA,需要帮助我的代码输出需要很长时间才能生成
问题描述
我在 a 中有一个数据列表sheet("DATA")
,在 BI 列中有 ID 号列表,在 CI 列中有名称列表,现在在我的 UserForm 中,当我输入一个 ID 号时textbox1
,combobox2
将填充所有具有相同 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 个或多个名称使用。
解决方案
这应该快一点。您是否缺少从列表中清除先前值的代码?
编辑:修复和测试
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
推荐阅读
- android - Android - Kotlin - 找不到符号 DataBindingComponent
- python - 如何检查 bcrypt 密码
- windows - FASM 的天堂之门(无法调用 64 位代码)
- java - 在java中检查对象数组中的对象是否为空
- html - 自定义 CSS 删除线
- email - 后缀:550 5.7.1 您不在允许向此域发送电子邮件的用户列表中 - 远离
- laravel - 使用 SSR 和 Laravel 在 Vue 上进行路由
- zsh - zsh:`declare -p` 关联数组不打印值
- firebase - 对要写入的参数数量的 Firestore 数据验证
- java - Spring Boot 如何从两个独立的表中获取数据