excel - Excel(VBA):如何使我的组合框独立以允许用户确定的组合搜索数据库?
问题描述
我有一个带有 7 个组合框的用户表单,允许用户使用他们可能选择的某些标准来搜索数据。我的代码目前仅在用户对所有 7 个组合框进行选择/输入时才有效,但如果用户决定不在其中一个组合框中进行选择则不起作用。如何改进我的代码,以便用户可以选择组合组合框,例如按任意顺序组合 3 或 4 个(可能是组合框 2、4 和 7 等),并且仍然获得精确的数据?
for i=5 to totrows
If Trim(Worksheets("Data").Cells(i, 2)) = Trim(User_search.Cbx_Project_code) And _
Trim(Worksheets("Data").Cells(i, 5)) = Trim(User_search.Cbx_TrueNOC) And _
Trim(Worksheets("Data").Cells(i, 6)) = Trim(User_search.Cbx_DNAmass) And _
Trim(Worksheets("Data").Cells(i, 7)) = Trim(User_search.Cbx_Kit) And _
Trim(Worksheets("Data").Cells(i, 8)) = Trim(User_search.Cbx_QIndex) And _
Trim(Worksheets("Data").Cells(i, 9)) = Trim(User_search.Cbx_Injection_time) And _
Trim(Worksheets("Data").Cells(i, 10)) = Trim(User_search.Cbx_Instrument) Then
Worksheets("Data").Rows(i).EntireRow.Select
Selection.Copy
Workbooks.Open "C:\Users\Desktop\" & Wk_name & (".xlsx")
Worksheets("Results").Activate
Cells(1, 1).Activate
totrows = Worksheets("Results").Cells(Rows.count, 1).End(xlUp).Row
Workbooks("Data.xlsm").Worksheets("Data").Paste Destination:=Worksheets("Results").Cells(totrows + 1, 1)
Workbooks.Open "C:\Users\Desktop\Data.xlsm"
Worksheets("Data").Activate
end if
next i
解决方案
请测试下一个代码。如果我的(最后)理解是正确的,它应该做你想做的事。它不需要任何激活,选择...
Sub selectiveQuery()
Dim sh As Worksheet, i As Long, totRows As Long, totR As Long, Wk_name As String, wb As Workbook, shR As Worksheet
Dim cbPr As MSForms.ComboBox, cbTr As MSForms.ComboBox, cbDn As MSForms.ComboBox, cbK As MSForms.ComboBox
Dim cbQ As MSForms.ComboBox, cbInj As MSForms.ComboBox, cbInstr As MSForms.ComboBox
Set sh = Worksheets("Data")'Workbooks("Data.xlsm") must be activated...
totRows = sh.Range("B" & Rows.count).End(xlUp).row 'last row of "Data" sheet
'combo boxes variable definition, in order to compact and make the code easy to be understood:
Set cbPr = User_search.Cbx_Project_code: Set cbTr = User_search.Cbx_TrueNOC
Set cbDn = User_search.Cbx_DNAmass: Set cbK = User_search.Cbx_Kit
Set cbQ = User_search.Cbx_QIndex: Set cbInj = User_search.Cbx_Injection_time
Set cbInstr = User_search.Cbx_Instrument
Wk_name = "your workbook name" '!!!
Set wb = Workbooks.Open("C:\Users\Desktop\" & Wk_name & ".xlsx")
Set shR = wb.Worksheets("Results")
For i = 5 To totRows
If (Trim(sh.Cells(i, 2)) = Trim(cbPr.Value) Or cbPr.Value = "") And _
(Trim(sh.Cells(i, 5)) = Trim(cbTr.Value) Or cbTr.Value = "") And _
(Trim(sh.Cells(i, 6)) = Trim(cbDn.Value) Or cbDn.Value = "") And _
(Trim(sh.Cells(i, 7)) = Trim(cbK.Value) Or cbK.Value = "") And _
(Trim(sh.Cells(i, 8)) = Trim(cbQ.Value) Or cbQ.Value = "") And _
(Trim(sh.Cells(i, 9)) = Trim(cbInj.Value) Or cbInj.Value = "") And _
(Trim(sh.Cells(i, 10)) = Trim(cbInstr.Value) Or cbInj.Value = "") Then
totR = shR.Cells(Rows.count, 1).End(xlUp).row
sh.Rows(i).EntireRow.Copy Destination:=shR.Cells(totR + 1, 1)
Next i
sh.Activate
End Sub
它也True
为空组合值的情况提供了条件......
当然,代码未经测试。我没有这样的文件,我没有这种带有必要组合框的表格。这是一段代码,理论上应该可以工作。如果出现错误,请检查我是否正确匹配了所涉及的组合和他们的真实姓名......
推荐阅读
- javascript - jQuery .load div id 冲突
- python - codechef问题中的错误,手动检查了测试用例,当时没有显示任何错误
- html - 如何使用 jQuery 在模态中停止音频/视频播放?
- string - 使用 String.Contains() 的问题
- android - 原因:Android Studio 中的 newPosition < 0: (-1 < 0)
- javascript - 在到达 Nest.js 中的 Guards 之前验证/清理输入
- android - Kotlin Redux Any 和 State 的区别
- c# - 如何从横向 PDF 文件中提取文本
- python - how to get callback from inline keyboard telegram
- javascript - Vue 3 - 是否可以在不修改外部类的情况下使外部类的属性具有反应性