Excel(VBA):如何使我的组合框独立以允许用户确定的组合来搜索数据库?

Excel(VBA): How can I make my Comboboxes independent to allow user determined combinations to search database?

我有一个带有 7 个组合框的用户表单,允许用户使用他们可能选择的某些标准搜索数据。我的代码目前仅在用户对所有 7 组合框进行 selection/input 时才有效,但如果用户决定不在其中一个组合框中进行选择,则代码不起作用。我怎样才能改进我的代码,以便用户可以选择按任意顺序组合组合框,例如 3 或 4 ans(可能是组合框 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...

代码当然没有经过测试。我没有这样的文件,我没有带有必要组合框的表格。这是一段代码,理论上应该可以工作。如果出现错误,请检查我是否正确匹配了涉及的组合与他们的真实姓名...