VBA中索引匹配匹配和Userform的问题

问题描述 投票:0回答:1

我试图运行代码来使用sap_a和sap_b(用户表单中的两个文本框)来查找变量 "Run"。我写的代码是为了让输入sap_a和sap_b值的人可以在其中一个框中输入值,然后'Run'变量就会被找到,这就是ErrorCheck1存在的原因。ErrorCheck2的存在只是为了在sap_ab中的值无法与'Run'变量匹配时提供一条消息。我遇到的问题是,即使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
excel vba userform
1个回答
1
投票

你的代码将更容易管理,如果你放弃使用 Worksheetfunction 而只用 Application.Match

如果你包括 worksheetfunction 那么如果没有匹配,就会引发运行时错误(需要棘手的错误处理)。 如果你放弃它,那么没有匹配的情况下,只会返回一个 错误值 您可以使用 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
© www.soinside.com 2019 - 2024. All rights reserved.