Проблемы с соответствием индекса и пользовательской формой в VBA - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь запустить код для использования sap_a и sap_b (оба текстовых поля в пользовательской форме) для поиска переменной «Выполнить». Я написал код, чтобы человек, вводящий значения sap_a и sap_b, мог ввести значения в любое поле, и переменная Run была бы найдена, поэтому существует ErrorCheck1. ErrorCheck2 существует просто для предоставления сообщения, если значения в sap_a / b не могут быть сопоставлены с переменной «Run». Проблема, с которой я столкнулся, заключается в том, что этот код генерирует значение «Выполнить», даже если одно из значений sap_a или sap_b неверно (т.е. 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

1 Ответ

1 голос
/ 06 мая 2020

Вашим кодом будет легче управлять, если вы отбросите 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
...