程式設計

Excel VBA 程式設計教學:除錯技巧與錯誤處理

錯誤處理(Error Handling)

一個完整的 VBA 應用程式,縱使程式碼本身沒有任何設計上的錯誤,也難免會需要處理程式出錯的狀況,典型常見的問題包含輸入錯誤的資料、要讀取的檔案不存在或是各種使用者操作不當所造成的錯誤。

若要對程式實際執行期間所發生的錯誤進行一些處理,就可以使用錯誤處理(error handling)的機制,自動對不同的錯誤做出對應的動作,並決定程式是否要繼續執行,或是直接終止。

預設的狀況下,只要程式出現任何錯誤,就會跳出錯誤訊息的視窗,並且終止程式的執行(就像之前的範例那樣),我們可以使用 On Error 自訂錯誤的處理方式,以下是一個簡單的範例。

Sub Hello()

  On Error GoTo ErrorHandler   ' 啟用錯誤處理機制
  Dim x, y, z As Integer
  x = 10
  y = 0
  z = x / y   ' 出現除以 0 的錯誤
  MsgBox "z = " & z
  Exit Sub    ' 結束子程序

ErrorHandler:       ' 錯誤處理用的程式碼
  MsgBox "錯誤 " & Err.Number & ":" & Err.Description
  Resume Next       ' 繼續往下執行

End Sub

這裡的程式碼可分為上下兩部分,上半部為正常的程式碼,下半部是專門用來處理錯誤的程式碼。

上半部程式碼的第一行,我們使用 On Error 來設定當錯誤發生時的處理方式,錯誤處理的方式有好幾種,最常用的就是使用 GoTo 設定錯誤處理程式碼的位置(也就是這裡的 ErrorHandler),這樣設定的話,當程式發生錯誤時就會直接跳到下方 ErrorHandler: 的位置來處理錯誤。

VBA 錯誤處理

在這個程式中,我們故意讓程式產生除以零的錯誤,當錯誤發生時就直接跳到下方 ErrorHandler: 的位置,以 MsgBox 輸出錯誤的編號與錯誤的描述。

自訂錯誤訊息

接著再呼叫 Resume Next 繼續回到上方正常的程式碼中,從出錯的下一行繼續執行,也就是輸出 z 的值,但是因為 z 的值在之前計算時出錯了,所以它的值是沒有意義的。

程式輸出訊息

我們可以調整這部分的錯誤處理程式碼,自行決定是否要繼續執行,或是直接終止程式。若要在錯誤處理完之後,直接離開子程序,就把 Resume Next 那一行刪掉即可,這樣程式就會按照正常的方式離開子程序。

忽略錯誤

如果要讓程式忽略任何的錯誤,可以將 On Error 的處理方式指定為 Resume Next

On Error Resume Next   ' 忽略錯誤,繼續執行
Dim x, y, z As Integer
x = 10
y = 0
z = x / y   ' 出現除以 0 的錯誤
MsgBox "z = " & z

這樣程式在執行時,不管出了什麼問題,都不會顯示錯誤訊息,而且會繼續執行直到程式結尾。

忽略錯誤

更多關於 VBA 的教學文章,請參考 VBA 程式設計

參考資料:Excel EasytutorialspointExcelFunctions.net

Page: 1 2

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: ExcelOfficeVBA

Recent Posts

[DIY] 自製凡士林火種

這裡介紹如何利用簡單的凡士林與...

2 年 ago

[DIY] 自製火影木葉、砂忍者村標誌雕刻木牌

本篇記錄我用路邊撿來的樟木與龍...

2 年 ago

收集龍眼木修剪枝幹用於木頭工藝

最近打算帶著阿玄做一些木工作品...

2 年 ago

[DIY] 樟木手工自製迷你手裏劍(忍者武器)

本篇記錄阿玄第一次使用木工工具...

2 年 ago

[DIY] 龍眼木手工自製木槌

本篇記錄我用自己砍的龍眼木還有...

2 年 ago

[DIY] 樟木手工自製苦無(忍者武器)

本篇記錄我自己用樟木的枝幹,以...

2 年 ago