在不满足条件的情况下,退出/停止VBscript运行的代码是什么?

在不满足条件的情况下,退出/停止VBscript运行的代码是什么?,vbscript,Vbscript,我看过谷歌,答案不在那里 第一件事。WScript.Quit不起作用!我不知道“WScript”是什么,但它显然与网页的客户端脚本无关。我以前在某个地方见过这个“WScript”东西,它只会产生错误(可能是过时的或其他东西),所以请不要建议它 无论如何。。。我想做的就是在不满足条件的情况下完全停止脚本。显然,我不想要“Exit Sub”,因为如果该Sub被嵌入,代码将继续运行 我知道“stop”命令,但我的印象是它只用于调试 希望是一个非常简单的问题 更新和结论:在我结束这门课之前,我只想对我想

我看过谷歌,答案不在那里

第一件事。WScript.Quit不起作用!我不知道“WScript”是什么,但它显然与网页的客户端脚本无关。我以前在某个地方见过这个“WScript”东西,它只会产生错误(可能是过时的或其他东西),所以请不要建议它

无论如何。。。我想做的就是在不满足条件的情况下完全停止脚本。显然,我不想要“Exit Sub”,因为如果该Sub被嵌入,代码将继续运行

我知道“stop”命令,但我的印象是它只用于调试

希望是一个非常简单的问题

更新和结论:在我结束这门课之前,我只想对我想做的事情做一点扩展

我有许多主要的潜艇,它们是通过点击按钮启动的。为了使它,使我不必编辑每个单独的子我嵌入了一个通用子在每个做了初步检查

初步检查的一部分是在用户输入错误的情况下停止程序。如果检测到错误,我希望从此停止所有进度。“退出子系统”显然会跳过该预备子系统的其余部分,而主子系统将继续执行

最后,它只是一个写入错误标志(在主子程序中检查)或在每个主程序中合并错误条件操作的情况。这样,您就可以退出主sub,问题就解决了


这不是懒惰——我只是想减少代码量。谢谢你的回复

我发现,如果使用WScript.exe或cscript.exe引擎运行.vbs/.vbe/.wsf脚本,WScript始终可用。WScript不可用时,如果使用其他引擎运行,则为。例如,在HTA、网页、VBA或托管COM脚本控件中运行VBScript

要退出未从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

您可以使用以下内容:

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

Function Main
  On Error Resume Next
  MyFunc
  If Err.Number <> 0
  Exit Function
End Function
Sub MyFunc
----------
我的代码
----------
端接头
主要功能
出错时继续下一步
MyFunc
如果错误号为0
退出功能
端函数

当它发现异常或抛出错误时,它将停止执行代码。

您也可以引发错误,例如:
Err.raise 507

此错误将退出当前脚本:
“发生异常”。

只有在Windows脚本主机(Wscript.exe,cscript.exe)中运行时,Wscript对象才可用。不是Internet Explorer(iexplorer.exe,mshta.exe)

一个简单的方法是声明一个全局变量,该变量被设置为false,直到发生错误,如果发生错误,那么该变量将被设置为true,在该变量被检查之后,您可以随时退出sub\function\for\do\which

例如:

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

只要记得为子程序添加
如果发生错误则退出Sub
,或为函数添加
如果发生错误则退出Function

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

如果人们在输入-1之前先阅读问题,这将是公平的。是的,我已经研究过了-如果答案是可用的,那么我就不会在这里了,是吗?好的-它可能有点不知道我没有发现什么是“WScript”(我现在知道它是指windows脚本),但无论哪种方式它都不起作用。它只会给出一个错误,说明该对象(wscript)不存在。这可能取决于脚本代码实际执行的操作。在许多情况下,您可能需要使用“错误恢复下一步”,以避免未捕获的错误破坏代码。但是,您必须在每个有错误的语句后面进行检查,例如“If err.Number 0 then…”,然后您可以用自己的方式“引发”错误并使用Wscript.Quit(n)(其中“n”是一个数字)退出。我可能从一开始就用了错误的方法。这并不是说我无法执行我打算做的事情,只是我觉得一定有办法阻止脚本完全激活(以防止在每个单独的发起过程中放置“退出子节点”)。我想可能是由于缺乏编程经验,我认为我可以从一个地方停止一切。我现在已经将停止条件写入了每个主要过程中。我可能会加入一个错误标志。