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

Issues with Index Match Match and Userform in VBA

我正在尝试 运行 代码以使用 sap_a 和 sap_b(用户表单中的两个文本框)来查找变量 'Run'。我编写了代码,以便输入 sap_a 和 sap_b 值的人可以在任一框中输入值,并且会找到 'Run' 变量,这就是 ErrorCheck1 存在的原因。如果 sap_a/b 中的值无法与 'Run' 变量匹配,ErrorCheck2 的存在只是为了提供一条消息。我遇到的问题是,即使 sap_a 或 sap_b 值之一不正确,此代码也会生成 'Run' 值(即 sap_a 是一个值电子表格中存在,sap_b 是电子表格中不存在的假值,仍然会产生 '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

如果您删除 Worksheetfunction 并只使用 Application.Match

,您的代码将更易于管理

如果您包含 worksheetfunction,那么如果没有匹配项(需要棘手的错误处理),则会引发 运行 次错误。如果你放弃它,那么一个不匹配只是 returns 一个 错误值 ,你可以使用 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