tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルTry/Catch/Finally
記事No4149
投稿日: 2006/08/28(Mon) 17:02
投稿者すっぱまん
Try 内でエラーが発生した際、 Catch に飛び
エラー処理をした後、再度 Try 内のコードを実行したい場合
どのように記述すれば良いでしょうか?

雰囲気的には、下記の処理を On Error GoTo を使用せず、
Try/Catch/Finally を使用して実現したいです。

Sub Main()
On Error GoTo L_ERR
    処理
    Exit Sub
L_ERR:     '* 処理でエラーが発生した場合は
    Sleep 1000 '* 1秒間待ち
    Resume     '* エラーが発生した処理を再度実行
End Sub


あと

Sub Main()
    Try
        処理1
    Catch (...)
        処理2
    Finally
        処理3
    End Try
End Sub



Sub Main()
    Try
        処理1
    Catch (...)
        処理2
    End Try
    処理3
End Sub

の違いって何ですか?

[ツリー表示へ]
タイトルRe: Try/Catch/Finally
記事No4151
投稿日: 2006/08/28(Mon) 23:05
投稿者魔界の仮面弁士
> Try 内でエラーが発生した際、 Catch に飛び
> エラー処理をした後、再度 Try 内のコードを実行したい場合
> どのように記述すれば良いでしょうか?

たとえば、こういう感じで如何でしょう。

====== 3 回までリトライ ======
For I As Integer = 1 To 3
  Try
    メイン処理
    Exit For
  Catch
    エラー処理
  End Try
Next

====== 成功するまでリトライ ======
Do
  Try
    メイン処理
    Exit Do
  Catch
    エラー処理
  End Try
Loop



> あと
(中略)
> の違いって何ですか?

『Finally は、何があっても実行される』コードです。

『処理1』や『処理2』で Exit Sub してみた場合の
『処理3』の動作をチェックしてみましょう。
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet16/vb6tonet16_03.html

[ツリー表示へ]
タイトルRe^2: Try/Catch/Finally
記事No4154
投稿日: 2006/08/29(Tue) 09:10
投稿者すっぱまん
> たとえば、こういう感じで如何でしょう。

なるほど。
その方法で実現できそうです。

> 『Finally は、何があっても実行される』コードです。

Exit Sub しても、 Finally は実行されるのですね。
初めて知りました。
逆に言うと、 Exit Sub したからといって、
すぐにプロシージャを抜けるとは限らない訳ですね。

Try/Catch/Finally について
良く理解できました。

ありがとうございました。

[ツリー表示へ]