HOW TO:發生錯誤時保留控制權
更新:2007 年 11 月
可使用「結構化例外處理」(Structured Exception Handling) 的 Try...Catch...Finally 陳述式 (Visual Basic) 建構函式。如果在程式碼執行時發生特定例外狀況 (Exception),這可讓您執行陳述式 (Statement) 的特定區塊。發生這種情況時,程式碼會「擲回」(Throw) 例外狀況,而您可使用適當的 Catch 陳述式來「攔截」(Catch) 它。
若要在程式碼造成例外狀況時執行一組陳述式
使用 Try...Catch...Finally 建構函式來封入可能造成例外狀況的程式碼。然後,指定發生例外狀況時所要執行的程式碼,並選擇性地提供一組在控制權離開 Try...Catch...Finally 建構函式之前要執行的陳述式。
下列範例嘗試計算 Object 變數 givenDate 中所提供值之後的日期和時間 (剛好 100 年)。
Dim givenDate As Object Dim nextCentury As Date Try nextCentury = Microsoft.VisualBasic.DateAdd("yyyy", 100, givenDate) Catch thisExcep As System.ArgumentOutOfRangeException ' The resulting date/time is later than December 31, 9999. Catch thisExcep As System.ArgumentException ' At least one argument has an invalid value. Catch thisExcep As System.InvalidCastException ' The value in givenDate cannot be interpreted as a date/time. Catch ' An unforeseen exception has occurred. Finally ' This block is always run before leaving the Try structure. End Try
前三個 Catch 區塊處理預期來自 DateAdd 函式 (Visual Basic) 的例外狀況。您可處理最後一個 Catch 區塊中的任何未預期例外狀況。
不論發生什麼情況,在離開 Try...Catch...Finally 建構函式之前,Finally 區塊永遠是最後執行的程式碼。如果在 Try 或 Catch 區塊中建立或開啟資源 (例如物件或資料庫連接),則可使用 Finally 區塊來關閉它們,並處置 (Dispose) 它們 (如果適當)。
如果例外狀況變數 thisExcep 未出現在宣告陳述式 (Declaration Statement),例如 Dim,則具有 As 子句的 Catch 陳述式就是宣告。