2012-11-21 50 views
5

我在Google上看過,答案不在那裏!什麼是代碼退出/停止運行時VBscript遇到不符合條件?

第一件事第一件事。 WScript.Quit不起作用!我不知道「WScript」是什麼,但顯然與網頁的客戶端腳本無關。我之前在某處看過這個「WScript」的東西,它只是產生錯誤(可能是過時的或某事),所以請不要暗示它...

無論如何...我想要做的就是完全停止腳本未滿足條件的事件。顯然,我不想要「Exit Sub」,因爲如果嵌入子代碼,代碼將繼續運行!

我知道「停止」命令,但我的印象是它只用於調試。

希望得到一個非常簡單的問題。

UPDATE和結論:在我關閉這個問題,我只想擴大我試圖做一個小...

我有一個數字,正由一個按鈕,點擊開始主要的潛艇。爲了使我不必編輯每個單獨的子項目,我在每個子項目中都嵌入了一個通用子項目,以便進行初步檢查。

該初步檢查的一部分是在用戶輸入不正確的情況下停止程序。如果檢測到錯誤,我想暫停所有進度。一個「退出子」顯然會跳過其餘的初始子,而主子將繼續執行。最後,它只是寫入錯誤標誌(在主要子目錄中檢查)或在每個主要過程中包含錯誤條件操作的情況。這樣你退出主分支,問題就解決了。

這不是懶惰 - 我只是想減少代碼量。無論如何,謝謝你的回覆。

+1

如果人們在放置-1之前先閱讀該問題,那將是公平的。是的,我研究過 - 如果答案是可用的,那麼我會不會在這裏? –

+0

好的 - 它可能對我沒有找到什麼「WScript」(我現在知道這意味着Windows腳本),但是無論如何都不起作用。它只會給出一個錯誤,說該對象(wscript)不存在。 –

+0

它可能取決於你的腳本代碼實際在做什麼。在很多情況下,您可能需要使用「On Error Resume Next」來避免無法解決的錯誤炸燬您的代碼。但是,你必須通過檢查來跟蹤每個具有錯誤能力的語句,比如「If err.Number <> 0 Then ...」然後你可以用你自己的方式「引發」錯誤並使用Wscript.Quit退出n)(其中'n'是一個數字)。 – Skatterbrainz

回答

7

您可以使用這樣的事情:

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

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

它會停止執行代碼,它會發現異常或拋出錯誤。

8

我發現如果使用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 
+0

我可能一直在繞錯誤的方式開始。這並不是我無法實現我想要做的事情,而只是我的印象是,必須有一種方法來阻止腳本完全激活(以防止需要將「exit sub」 「在每個獨立的發起程序中)。我認爲這可能只是缺乏編程經驗,導致我認爲我可以從一個地方停止一切。現在我已經將停止條件寫入每個主要程序中。我可能會加入一個錯誤標誌。 –

0

你也可以引發一個錯誤,如: Err.Raise 507

這將退出當前的腳本:「發生異常」

2

WScript對象僅適用,如果你正在運行在Windows腳本宿主(wscript.exe,cscript.exe)中。不是Internet Explorer(iexplorer.exe,mshta。exe)

一個簡單的方法來做到這一點是聲明一個全局變量設置爲false,直到發生錯誤,如果錯誤發生然後該變量將設置爲true,之後,該變量獲取任何時候檢查你可以退出sub \ function \ for \ do \ whatever。

例子:

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的功能。

相關問題