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
我正在尝试 运行 代码以使用 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