如果条件不满足,如何退出/停止VBScript运行的代码是什么?

9
我在谷歌上搜索了,但没有找到答案!
首先需要说明的是,WScript.Quit 是不起作用的!我不知道 "WScript" 是什么,但它显然与网页客户端脚本无关。我以前在某个地方看到过这个 "WScript",它只会产生错误(可能已经过时或者其他原因),所以请不要建议使用它...
无论如何...我只想在不满足条件的情况下完全停止脚本。显然,我不想使用 "Exit Sub",因为如果嵌入了该子程序,代码将继续运行!
我知道有 "stop" 命令,但我认为它只用于调试。
希望这是一个非常简单的问题。
更新和结论:在我关闭这个主题之前,我只想稍微扩展一下我想做的事情...
我有许多由按钮点击启动的主要子程序。为了使我不必编辑每个单独的子程序,我在每个子程序中嵌入了一个通用子程序,该子程序进行了初步检查。
其中的一部分预检查是在发现不正确的用户输入时停止程序。如果检测到错误,我希望从那一点开始停止所有进度。 "Exit sub" 明显只会跳过该预处理子程序的其余部分,而主要子程序将继续执行。
最后的解决办法是编写一个错误标志(在主子程序中进行检查)或在每个主过程中合并错误条件操作。这样,您就可以退出主子程序并解决问题。
这不是懒惰 - 我只想减少代码量。无论如何,感谢各位的回复。

3
在投负分之前,如果人们先阅读问题,这将是公平的。是的,我进行了研究 - 如果答案已经存在,那么我也不需要来这里了,不是吗? - Cheesus Toast
1
好的 - 我可能有点无知,没有找出"WScript"是什么(我现在知道它意味着Windows脚本),但无论如何它都不起作用。它只会给出一个错误,说该对象(wscript)不存在。 - Cheesus Toast
这可能取决于你的脚本代码实际在做什么。在许多情况下,您可能需要使用"On Error Resume Next"来避免未捕获的错误导致代码崩溃。但是,您必须对每个可出错语句进行后续检查,比如"If err.Number <> 0 Then..."。然后,您可以按照自己的方式"raise"错误并使用Wscript.Quit(n)(其中'n'是一个数字)退出。 - Skatterbrainz
5个回答

11

我发现,只要使用wscript.exe或cscript.exe引擎运行.vbs/.vbe/.wsf脚本,WScript始终可用。如果使用不同的引擎运行,则无法使用WScript。例如,在HTA中运行VBScript,在网页、VBA中运行,在托管的COM脚本控件中运行。

如果想要退出一个没有从wscript.exe或cscript.exe运行的脚本,可以像下面这样做:

main

Sub main
    ' execute code here

    ' oops a confition is not met:
    If Not condition then Exit Sub

    ' more code to execute if condition was met
End Sub

我可能一开始就走错了方向。并不是说我不能实现我打算做的事情,只是我有一种印象,认为必须有一种方法可以完全阻止脚本的激活(以避免在每个单独的起始过程中放置“exit sub”)。我觉得可能只是由于缺乏编程经验而导致我认为我可以从一个地方停止所有操作。现在我已将停止条件编写到每个主要过程中。我可能可以代之以加入错误标志。 - Cheesus Toast

7
您可以使用类似这样的内容:

您可以采用以下方法:

Sub MyFunc
    ----------
    My Code
    ----------
End Sub

Function Main
  On Error Resume Next
  MyFunc
  If Err.Number <> 0
  Exit Function
End Function

当程序找到异常或抛出错误时,它将停止执行代码。


7
我发现最简单的方法是:WScript.Quit

3

如果您正在运行Windows脚本宿主(wscript.exe,cscript.exe),则可以使用Wscript对象。但是在Internet Explorer(iexplorer.exe,mshta.exe)中不可用。

一个简单的方法是声明一个全局变量,并将其设置为false,直到发生错误,如果发生错误,则该变量将被设置为true,之后每次检查该变量时,您可以退出子函数/循环等。

示例:

Dim ErrorOccured
On Error Resume Next
ErrorOccured=False


Sub Main()
    If ErrorOccured Then Exit Sub
    'some code
    MsgBox "Main has run"
End Sub


Sub MakeAnError
    If ErrorOccured Then Exit Sub
    'some code
    Err.Raise 2
    If Err Then ErrorOccured=True
End Sub


Function TellMeRandom
    If ErrorOccured Then Exit Function
    'some code
    Randomize
    TellMeRandom =Int((100- 1+ 1) * Rnd + 1)*1
End Function


Function ResetError
    ErrorOccured=False
End Function



Call Main                 'Main will run because an error has not occured (ErrorOccured is False)

MsgBox TellMeRandom       'This will return a random number 1-100

Call MakeAnError          'This will set the Global ErrorOccured to true

MsgBox TellMeRandom       'This will be blank because the ErrorOccured prevented it from running

Call Main                 'This will not run because the ErrorOccured prevented it from running

Call ResetError           'This will set the Global ErrorOccured to false

Call Main                 'This will run because ErrorOccured is back to False

MsgBox TellMeRandom       'This will return a random number 1-100 because ErrorOccured is back to false

请记住,在子程序中添加If ErrorOccured then Exit Sub,在函数中添加If ErrorOccured then Exit Function


0

你也可以引发一个错误,例如:Err.Raise 507

这个错误会退出你当前的脚本:"发生了异常"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接