2016-04-25 30 views
2

以下のコードを使用しています。入力ボックスのキャンセルボタンをクリックすると、エラーハンドラがエラーを処理しています。エラーハンドラでのエラー処理

エラーハンドラでエラーが再度発生した場合、そのエラーはエラーハンドラによって処理されません。

Sub calculateroot() 

    Dim msg As String, t as Integer 
    On Error GoTo myhandle 
    Dim inp As Integer, sql As Single 
    inp = InputBox("Enter the number to find the square root") 
    sql = Sqr(inp) 
    Exit Sub 
myhandle: 
    t = InputBox("Is this recursive ?") 
End Sub 

エラーハンドラで生成されたエラーを処理するには、どのような変更を行う必要がありますか?

+0

'使われた?なぜ整数は "この再帰的なのですか?"という質問に対する有益な答えでしょうか? – jsheeran

+0

現在の例外をリセットするために、何らかの種類の 'Resume'ステートメントが必要です(スパゲッティを楽しんでいる場合は' On Error Goto -1')が必要です。 – Rory

+0

@jsheeranまあ、私はこれらの変数を使用していないし、このコードスニペットも素晴らしい何かをやっていません。私はエラーハンドラでエラーを処理する方法として学習目的と好奇心からの質問を投稿しました –

答えて

1

あなたがエラーハンドラをリセットする必要があり、その後、新しいものを設定します。

Sub calculateroot() 

    Dim msg As String, t As Integer 
    On Error GoTo myhandle 
    Dim inp As Integer, sql As Single 
    inp = inputbox("Enter the number to find the square root") 
    sql = Sqr(inp) 
    Exit Sub 
myhandle: 
    On Error GoTo -1 
    On Error GoTo myhandle2 
    t = inputbox("Is this recursive ?") 
    MsgBox t 
    Exit Sub 
myhandle2: 
    MsgBox "myhandle2" 
End Sub 
+0

On Error Goto -1は何をしますか? –

+0

@RohitSaluja: 'On Error Goto -1'または' Resume Next'についてもっと知りたい場合は、対応するMSDN投稿を読んでください:https://msdn.microsoft.com/en-us/library/5hsw66as.aspx – Ralph

+1

IMO if OEG-1を使用して自分自身があなたのコードを本当に考え直すべきであることが分かります。 – Rory

0

あなたが再開する必要がある場合は、この嫌なコードは動作します:

`sql`と`トンです
On Error Resume Next 
parm = "bla" 
DoSomething(parm) 
If Err.Number > 0 Then 
    Err.Clear 
    parm = "oldbla" 
    DoSomething(parm) 
End If 
If Err.Number > 0 Then 
    Err.Clear 
    parm = "evenolderbla" 
    DoSomething(parm) 
End If 
関連する問題