Vba 在QTP中,基于被调用函数的结果,调用函数是否有任何可能
我正在从我的操作调用一个函数算术,该函数正在执行。从这个函数中,我调用另一个函数来处理精确的数据。这里,如果我得到一个错误,意味着我不想执行function1中的其余代码。我曾尝试在两个函数中使用on error resume next,一个是function1,一个是function2,但在该场景中没有成功。下面是一个示例代码。这将从我的行动中调用。此外,我不希望每次都从function2传递一个变量来验证err.number并继续function1中的步骤Vba 在QTP中,基于被调用函数的结果,调用函数是否有任何可能,vba,vbscript,qtp,Vba,Vbscript,Qtp,我正在从我的操作调用一个函数算术,该函数正在执行。从这个函数中,我调用另一个函数来处理精确的数据。这里,如果我得到一个错误,意味着我不想执行function1中的其余代码。我曾尝试在两个函数中使用on error resume next,一个是function1,一个是function2,但在该场景中没有成功。下面是一个示例代码。这将从我的行动中调用。此外,我不希望每次都从function2传递一个变量来验证err.number并继续function1中的步骤 Function arithmet
Function arithmetic()
Call div (21,0)
Call add (21,0)
Call sub(21,0)
End function
Function div(a,b)
A=a/b
End function
在这种情况下,我将得到一个错误。因此,我不希望代码的其余部分直接在函数add和sub中执行。我必须返回操作,并且必须验证另一组数据 若要对一系列不应继续执行的相关操作实施适当的VBScript错误处理,请遵循以下规则: 将操作顺序放入子/功能中 在OERN中调用此子/函数 OERN范围内只有一条风险线 用于读取、计算/保存和清除旧数据的脚本的演示:
Option Explicit
Dim iRet
Dim aErr
On Error Resume Next ' disable while development to see error line
iRet = main() ' just *one* risky line in OERN scope
aErr = Array(Err.Number, Err.Description, Err.Source)
On Error GoTo 0
If 0 <> aErr(0) Then
WScript.Echo "fatal error", aErr(0), "-", aErr(1), "in", aErr(2)
iRet = 1
Else
WScript.Echo "success"
End If
WScript.Quit iRet
Function main()
main = 2
ReadData
CalcAndSave
ZapOld
main = 0
End Function
Sub ReadData()
If WScript.Arguments.Named.Exists("read") Then Err.Raise 123, "ReadData()", "can't read"
WScript.Echo "reading data"
End Sub
Sub CalcAndSave()
If WScript.Arguments.Named.Exists("calc") Then Err.Raise 124, "CalcAndSave()", "can't calc and save"
WScript.Echo "calc and save data"
End Sub
Sub ZapOld()
If WScript.Arguments.Named.Exists("zap") Then Err.Raise 125, "ZapOld()", "can't zap"
WScript.Echo "zap old data"
If WScript.Arguments.Named.Exists("surprise") Then
Dim i : i = 1 / 0
End If
End Sub
禁用一个且唯一的严格本地OERN,以确保您没有隐藏任何错误,并在开发时获取行号信息:
cscript 25309137.vbs /surprise
reading data
calc and save data
zap old data
E:\trials\SoTrials\answers\25301708\vbs\25309137.vbs(39, 14) Microsoft VBScript runtime er
o
在您的例子中,风险序列是在循环中完成的。根据规则,演示代码应该如下所示:
Option Explicit
WScript.Quit main()
Function main()
Dim aErr, n
For Each n In Array(1, 2, 0, 4)
On Error Resume Next ' disable while development to see error line
arithmetic n ' just *one* risky line in OERN scope
aErr = Array(Err.Number, Err.Description, Err.Source)
On Error GoTo 0
If 0 <> aErr(0) Then
WScript.Echo "fatal error", aErr(0), "-", aErr(1), "in", aErr(2)
End If
Next
main = 0
End Function
Sub arithmetic(n)
divide n
add n
mult n
End Sub
Sub divide(n)
WScript.Echo n, 1 / n
End Sub
Sub add(n)
WScript.Echo n, 1 + n
End Sub
Sub mult(n)
WScript.Echo n, 1 * n
End Sub
Option Explicit
WScript.Quit main()
Function main()
Dim aErr, n
For Each n In Array(1, 2, 0, 4)
On Error Resume Next ' disable while development to see error line
arithmetic n ' just *one* risky line in OERN scope
aErr = Array(Err.Number, Err.Description, Err.Source)
On Error GoTo 0
If 0 <> aErr(0) Then
WScript.Echo "fatal error", aErr(0), "-", aErr(1), "in", aErr(2)
End If
Next
main = 0
End Function
Sub arithmetic(n)
divide n
add n
mult n
End Sub
Sub divide(n)
WScript.Echo n, 1 / n
End Sub
Sub add(n)
WScript.Echo n, 1 + n
End Sub
Sub mult(n)
WScript.Echo n, 1 * n
End Sub
cscript 25309137-2.vbs
1 1
1 2
1 1
2 0,5
2 3
2 2
fatal error 11 - Division by zero in Microsoft VBScript runtime error
4 0,25
4 5
4 4