今日的內容是“VBA之EXCEL應用”的第八章“VBA程式碼的除錯及簡單錯誤的排除”。這講是第六節“程式碼的錯誤處理(Error Handling)方式之四”。這套教程從簡單的錄製宏開始講解,一直到窗體的搭建,內容豐富,案例眾多。大家可以非常容易的掌握相關的知識,這套教程面向初學人員,共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。
第六節 程式碼的錯誤處理(Error Handling)方式之四大家好,我們繼續講解程式碼的錯誤處理(Error Handling)方式之四,用Err物件屬性及Select Case語句來反饋錯誤的資訊。這講的內容是前幾講內容的延續,透過這講內容的學習,大家更能清楚地理解“錯誤”。
1 Err物件及Err物件的Number屬性Err物件包含執行時錯誤的資訊。Err物件的預設屬性為Number,這個屬性返回或設定指定錯誤的數值。當發生執行時錯誤時,Err物件的屬性將由唯一標識該錯誤的資訊以及可用於處理該錯誤的資訊填充。例如:除零(錯誤 11),溢位(錯誤 6)等等
若要在程式碼中生成執行時錯誤, 可以使用Raise方法。使用Clear方法可用於顯式重置Err。Err物件是具有全域性範圍的固有物件。無需在程式碼中建立它的例項。
2 識別錯誤並處理我們來看下面的程式碼,這處的程式碼將利用Err.Number來識別錯誤,然後進行處理。如下程式碼執行中會遇到除數為零的錯誤,這個時候會產生一個錯誤,錯誤程式碼是11,我們首先要捕獲程式碼為11的錯誤,表示這時的錯誤是除數為零,然後我們對這個錯誤進行彌補後返回程式碼。
Sub mynzE() '識別錯誤並處理
On Error GoTo myOut
x = 1 / y ' 設定除數為0的錯誤
Exit Sub
myOut:
MsgBox Err.Number
MsgBox Err.Description
' 設定處理辦法
If Err.Number = 11 Then
y = y + 1
End If
Resume
End Sub
程式碼截圖:
程式碼講解: 上述程式碼的過程我們只講解一下錯誤的處理辦法,
1)MsgBox Err.Number
首選提示給使用者錯誤的程式碼。
2)MsgBox Err.Description
然後提示給使用者錯誤的描述
3) If Err.Number = 11 Then
y = y + 1
End If
以上為對錯誤型別11,除數為零的處理,將除數變成1。
4) Resume
返回
程式碼的執行:
3 利用Err.Raise的方法顯示錯誤我們還可以利用Err.Raise的方法顯示錯誤,我們看下面的程式碼:
Sub mynzF() 'Err.Raise的方法的利用
Dim myMsg
On Error Resume Next
Err.Clear
Err.Raise 6 ' 設定一個錯誤型別
'反饋錯誤資訊
If Err.Number <> 0 Then
myMsg = "錯誤序號 # " & Str(Err.Number) & " 是指: " & Err.Description
MsgBox myMsg
End If
End Sub
程式碼截圖:
程式碼解讀:上述程式碼首選投放一個代號為6的錯誤,然後提示給使用者錯誤的描述。
下面我們看程式碼的執行:
4 利用Select Case語句對 Err.Number進行分別處理在實際程式碼中,我們可以利用Select Case語句對 Err.Number進行分別解釋,我們看下面的程式碼:
Sub mynzG() ' Err.Number 資訊
Dim myRng, myCell As Range
Sheets("Sheet6").Select
Columns("B").Clear
Set myRng = Range("A1:A" & Range("A1").End(xlDown).Row)
For Each myCell In myRng
On Error GoTo myERR
myCell.Offset(0, 1).Value = Sqr(myCell.Value)
Next
Exit Sub
myERR:
Select Case Err.Number
Case Is = 5
MsgBox "單元格" & myCell.Address & "不能計算,原因是: " & Err.Description
Case Is = 13
MsgBox "單元格" & myCell.Address & "不能計算,原因是: " & Err.Description
End Select
Resume Next
End Sub
程式碼截圖:
程式碼解讀:上述程式碼中利用了 Select Case Err.Number 語句對計算單元格平方根出現錯誤時進行分類處理,並分別提示原因。
程式碼的執行:
以上分別提示了不能求平方根的單元格的原因。
今日內容迴向:
1) Err物件的Number屬性的意義是什麼?
2) Err.Raise方法的作用是什麼?
3) 利用Select Case語句最大的特點是什麼?
本講內容參考程式檔案:工作簿08.xlsm
分享成果,隨喜正能量
VBA的應用及學習方法:VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在資料處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!
我記得20年前自己初學VBA時,那時的資料甚少,只能看原始碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了七部VBA專門教程。
第一套:VBA程式碼解決方案 是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程式檔案更是一座不可多得的程式碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程式檔案透過32位和64位兩種OFFICE系統測試。
第二套:VBA資料庫解決方案 資料庫是資料處理的專業利器,教程中詳細介紹了利用ADO連線ACCDB和EXCEL的方法和例項操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程式檔案透過32位和64位兩種OFFICE系統測試。
第三套:VBA陣列與字典解決方案 陣列和字典是VBA的精華,字典是VBA程式碼水平提高的有效手段,值得深入的學習,是初級及中級人員程式碼精進的手段。目前這套教程提供的版本是修訂第一版,程式檔案透過32位和64位兩種OFFICE系統測試。
第四套:VBA程式碼解決方案之影片 是專門面向初學者的影片講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的影片講解,影片更易接受。
第五套:VBA中類的解讀和利用 這是一部高階教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,程式檔案透過32位和64位兩種OFFICE系統測試。
第六套教程:VBA資訊獲取與處理,這是一部高階教程,涉及範圍更廣,實用性更強,面向中高階人員。教程共二十個專題,包括:跨應用程式資訊獲得、隨機資訊的利用、電子郵件的傳送、VBA網際網路資料抓取、VBA延時操作,剪下板應用、Split函式擴充套件、工作表資訊與其他應用互動,FSO物件的利用、工作表及資料夾資訊的獲取、圖形資訊的獲取以及定製工作表資訊函式等等內容。程式檔案透過32位和64位兩種OFFICE系統測試。
第七套教程:VBA之EXCEL應用 這是一部初級教程這部教程共三冊,從從建立宏、對話方塊、工作簿和工作表物件、單元格物件等基礎內容講起,到迴圈結構、錯誤處理、字串操作、日期和時間、事件、陣列應用,函式過程等方面,一直講解到控制元件和窗體物件的應用都是我們提高自己EXCEL水平的必須。
以上各教程學習順序:7→1(或者4)→3→2→6→5。其中第四套是對第一套的影片講解,所以第一和第四隻選其一即可。