Excel VBA中的索引匹配和用户表单问题

Excel VBA中的索引匹配和用户表单问题,excel,vba,userform,Excel,Vba,Userform,我试图运行代码来使用sap_a和sap_b(userform中的两个文本框)查找变量“run”。我编写代码是为了让输入sap_a和sap_b值的人可以在任一框中输入值,并找到“Run”变量,这就是为什么存在ErrorCheck1。ErrorCheck2的存在只是为了在sap_a/b中的值无法与“Run”变量匹配时提供消息。我遇到的问题是,即使其中一个sap_a或sap_b值不正确(即sap_a是电子表格中确实存在的值,sap_b是电子表格中不存在的假值,并且仍然生成“Run”变量),此代码也会生

我试图运行代码来使用sap_a和sap_b(userform中的两个文本框)查找变量“run”。我编写代码是为了让输入sap_a和sap_b值的人可以在任一框中输入值,并找到“Run”变量,这就是为什么存在ErrorCheck1。ErrorCheck2的存在只是为了在sap_a/b中的值无法与“Run”变量匹配时提供消息。我遇到的问题是,即使其中一个sap_a或sap_b值不正确(即sap_a是电子表格中确实存在的值,sap_b是电子表格中不存在的假值,并且仍然生成“Run”变量),此代码也会生成“Run”值。您是否有任何关于我的代码问题或您看到的任何问题的意见?代码见附件

谢谢大家!

Private Sub SearchButtonTEST_Click()
Dim sap_a As Variant
Dim sap_b As Variant
Dim Run_ As Variant

Sheets("R_Database Sheet").Activate

sap_a = textbox5.Value
sap_b = textbox8.Value

If sap_a = "" And sap_b = "" Then
    Run_ = ""
        Let textbox1.Text = Run_
  Msgbox "Must enter SAP Codes in SAP # A and SAP # B to search."

Exit Sub

Else

Check1:
On Error GoTo ErrorCheck1

    Run_ = Application.WorksheetFunction.Index(Sheets("R_Database Sheet").Range("A:A"), Application.WorksheetFunction.Match(CLng((sap_a)), Sheets("R_Database Sheet").Range("E:E"), Application.WorksheetFunction.Match(CLng((sap_b)), Sheets("R_database sheet").Range("H:H"), 0)))
    Let textbox1.Text = Run_

Check2:

On Error GoTo ErrorCheck2

    Run_ = Application.WorksheetFunction.Index(Sheets("R_Database Sheet").Range("A:A"), Application.WorksheetFunction.Match(CLng((sap_b)), Sheets("R_Database Sheet").Range("E:E"), Application.WorksheetFunction.Match(CLng((sap_a)), Sheets("R_database sheet").Range("H:H"), 0)))
    Let textbox1.Text = Run_

Exit Sub

Check3:
Msgbox "No data found for specified SAP #'s."

End If

Exit Sub

ErrorCheck1:
Resume Check2

ErrorCheck2:
Resume Check3

End Sub

如果您放弃
工作表功能
,只需使用
应用程序。匹配

如果包含
工作表函数
,则如果不匹配(需要复杂的错误处理),将引发运行时错误。如果删除它,则不匹配只会返回一个错误值,您可以使用
IsError()
测试该值。就我个人而言,我觉得这更容易管理

Private Sub SearchButtonTEST_Click()

    Dim sap_a As Variant, sap_b As Variant
    Dim ws As Worksheet, mA, mB

    Set ws = Sheets("R_Database Sheet")

    sap_a = Trim(textbox5.Value)
    sap_b = Trim(textbox8.Value)

    If sap_a = "" And sap_b = "" Then
        textbox1.Text = ""
        MsgBox "Must enter SAP Codes in SAP # A and SAP # B to search."
        Exit Sub
    Else

        mA = Application.Match(CLng(sap_a), ws.Range("E:E"), 0)
        mB = Application.Match(CLng(sap_b), ws.Range("H:H"), 0)

        If Not IsError(mA) Then
            textbox1.Text = ws.Cells(mA, "A")
        ElseIf Not IsError(mB) Then
            textbox1.Text = ws.Cells(mB, "A")
        Else
            textbox1.Text = "Not found!"
        End If

    End If
End Sub

Match最多需要3个参数-您似乎提供了更多参数。这非常有效。谢谢你花时间帮忙@rdtg如果这回答了您的问题,请投票/将其标记为已解决: