Vba 在QTP中,基于被调用函数的结果,调用函数是否有任何可能

Vba 在QTP中,基于被调用函数的结果,调用函数是否有任何可能,vba,vbscript,qtp,Vba,Vbscript,Qtp,我正在从我的操作调用一个函数算术,该函数正在执行。从这个函数中,我调用另一个函数来处理精确的数据。这里,如果我得到一个错误,意味着我不想执行function1中的其余代码。我曾尝试在两个函数中使用on error resume next,一个是function1,一个是function2,但在该场景中没有成功。下面是一个示例代码。这将从我的行动中调用。此外,我不希望每次都从function2传递一个变量来验证err.number并继续function1中的步骤 Function arithmet

我正在从我的操作调用一个函数算术,该函数正在执行。从这个函数中,我调用另一个函数来处理精确的数据。这里,如果我得到一个错误,意味着我不想执行function1中的其余代码。我曾尝试在两个函数中使用on error resume next,一个是function1,一个是function2,但在该场景中没有成功。下面是一个示例代码。这将从我的行动中调用。此外,我不希望每次都从function2传递一个变量来验证err.number并继续function1中的步骤

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