Daftar Isi:
- Melanjutkan setelah kesalahan
- Error handling in a nutshell
- Mengetahui kapan harus mengabaikan kesalahan
Video: Week 8, continued 2024
Bila Anda perlu mengatasi kesalahan dalam Excel VBA, Anda dapat menggunakan pernyataan OnError. Namun, ada beberapa hal yang perlu Anda ketahui terlebih dahulu. Anda dapat menggunakan pernyataan On Error dalam tiga cara.
Sintaks | Apa Itu |
---|---|
Pada Label Kesalahan GoTo | Setelah mengeksekusi pernyataan ini, VBA melanjutkan eksekusi pada pernyataan
setelah label yang ditentukan. Anda harus menyertakan titik dua setelah label sehingga VBA mengenalinya sebagai label. |
Pada Error GoTo 0 | Setelah mengeksekusi pernyataan ini, VBA melanjutkan perilaku pemeriksaan error
yang normal. Gunakan pernyataan ini setelah menggunakan salah satu dari laporan On Error lainnya atau bila Anda ingin menghapus penanganan kesalahan dalam prosedur Anda. |
Pada Error Resume Next | Setelah mengeksekusi pernyataan ini, VBA mengabaikan semua kesalahan
dan melanjutkan eksekusi dengan pernyataan berikutnya. |
Melanjutkan setelah kesalahan
Dalam beberapa kasus, Anda hanya ingin rutinitas berakhir dengan anggun saat terjadi kesalahan. Misalnya, Anda mungkin menampilkan pesan yang menjelaskan kesalahan dan kemudian keluar dari prosedur. (Contoh EnterSquareRoot5 yang ditunjukkan sebelumnya menggunakan teknik ini.) Dalam kasus lain, Anda ingin pulih dari kesalahan, jika memungkinkan.
Untuk pulih dari kesalahan, Anda harus menggunakan pernyataan Resume. Ini membersihkan kondisi kesalahan dan memungkinkan Anda melanjutkan eksekusi di beberapa lokasi. Anda bisa menggunakan pernyataan Resume dengan tiga cara.
Sintaks | Apa Itu |
---|---|
Resume | Eksekusi dilanjutkan dengan pernyataan yang menyebabkan kesalahan tersebut. Gunakan
ini jika kode penanganan kesalahan Anda memperbaiki masalah dan tidak apa-apa untuk melanjutkan. |
Resume Next | Eksekusi dilanjutkan dengan pernyataan segera setelah pernyataan
yang menyebabkan kesalahan. Ini pada dasarnya mengabaikan kesalahan . |
Lanjutkan label | Eksekusi dilanjutkan di label yang Anda tentukan. |
Contoh berikut menggunakan pernyataan Resume setelah terjadi kesalahan:
Sub EnterSquareRoot6 () Dim Num Sebagai Variant Dim Msg Sebagai String Dim Ans Sebagai Integer TryAgain: 'Set up error handling On Error GoTo BadEntry 'Prompt untuk nilai Num = InputBox ("Enter a value") If Num = "" Then Exit Sub' Masukkan akar kuadrat ActiveCell. Nilai = Sqr (Num) Keluar dari Sub BadEntry: Msg = Err. Nomor & ":" & Kesalahan (Nomor Err) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Pastikan kisaran dipilih," Msg = Msg & "lembar tidak terlindungi," Msg = Msg & "dan Anda memasukkan nilai nonnegatif. "Msg = Msg & vbNewLine & vbNewLine &" Coba lagi? "Ans = MsgBox (Msg, vbYesNo + vbCritical) Jika Ans = vbYes Kemudian Lanjutkan TryAgain End Sub
Prosedur ini memiliki label lain: TryAgain.Jika terjadi kesalahan, eksekusi berlanjut ke label BadEntry, dan kode akan menampilkan pesan di bawah ini. Jika pengguna merespons dengan mengklik Yes, maka Resume akan muncul, dan eksekusi kembali ke label TryAgain. Jika pengguna mengklik Tidak, prosedurnya akan berakhir.
Jika terjadi kesalahan, pengguna dapat memutuskan apakah akan mencoba lagi.Perhatikan bahwa pesan kesalahan juga menyertakan nomor kesalahan, beserta deskripsi kesalahan "resmi".
Pernyataan Resume membersihkan kondisi kesalahan sebelum melanjutkan. Untuk melihat ini, coba ganti pernyataan berikut untuk pernyataan kedua sampai terakhir dalam contoh sebelumnya:
If Ans = vbYes Then GoTo TryAgain
Kode tidak bekerja dengan benar jika Anda menggunakan GoTo daripada Lanjutkan. Untuk menunjukkan, masukkan angka negatif. Anda mendapatkan error prompt. Klik Ya untuk mencoba lagi dan kemudian masukkan nomor negatif yang lain. Kesalahan kedua ini tidak terjebak karena kondisi error asli tidak dibersihkan.
Error handling in a nutshell
Untuk membantu Anda menjaga semua bisnis penanganan kesalahan ini lurus, inilah ringkasan cepat dan kotor. Blok kode penanganan kesalahan memiliki karakteristik berikut:
-
Ini dimulai segera setelah label yang ditentukan dalam pernyataan On Error.
-
Itu harus dicapai hanya dengan makro Anda jika terjadi kesalahan. Ini berarti Anda harus menggunakan pernyataan seperti Exit Sub atau Exit Function segera sebelum label.
-
Ini mungkin memerlukan pernyataan Resume. Jika Anda memilih untuk tidak membatalkan prosedur saat terjadi kesalahan, Anda harus menjalankan pernyataan Resume sebelum kembali ke kode utama.
Mengetahui kapan harus mengabaikan kesalahan
Dalam beberapa kasus, tidak masalah mengabaikan kesalahan. Saat itulah On Error Resume Next statement ikut bermain. Contoh berikut loop melalui setiap sel dalam rentang yang dipilih dan mengubah nilai ke akar kuadratnya. Prosedur ini menghasilkan pesan kesalahan jika ada sel dalam seleksi yang berisi angka atau teks negatif:
Sub SelectionSqrt () Dim cell As Range Jika TypeName (Selection) <> "range" Lalu Exit Sub Untuk Setiap Sel Sel Sel Selesai. Value = Sqr (sel Value) Next sel End Sub
Dalam kasus ini, Anda mungkin ingin melewatkan sel yang mengandung nilai yang tidak dapat dikonversi ke akar kuadrat. Anda dapat membuat segala macam kemampuan untuk memeriksa kesalahan dengan menggunakan struktur If-Then, namun Anda dapat merancang solusi yang lebih baik (dan sederhana) dengan hanya mengabaikan kesalahan yang terjadi.
Rutin berikut ini menyelesaikannya dengan menggunakan pernyataan On Error Resume Next:
Sub SelectionSqrt () Dim cell As Range Jika TypeName (Selection) <> "range" Lalu Exit Sub On Error Resume Next Untuk Setiap Sel Dalam Seleksi sel. Value = Sqr (sel Value) Next sel End Sub
Secara umum, Anda dapat menggunakan pernyataan On Error Resume Next jika Anda menganggap kesalahan itu tidak berbahaya atau tidak penting untuk tugas Anda.