Pernah Merasa Program Berjalan Normal, Padahal Ada yang Salah?
Bayangkan menjalankan sebuah prosedur untuk membuka worksheet, menyimpan file, atau menghapus data. Program selesai dijalankan tanpa muncul pesan error, sehingga Anda menganggap semuanya berhasil.
Namun, setelah diperiksa lebih lanjut, ternyata worksheet tidak pernah terbuka, file tidak tersimpan, atau data yang seharusnya terhapus masih tetap ada.
Mengapa hal ini bisa terjadi?
Salah satu penyebabnya adalah penggunaan On Error Resume Next yang kurang tepat. Perintah ini memang dapat mencegah program berhenti ketika terjadi Runtime Error, tetapi di sisi lain juga dapat membuat kesalahan tersembunyi tanpa disadari.
Oleh karena itu, memahami cara kerja On Error Resume Next menjadi hal yang penting sebelum Anda menggunakannya dalam project VBA.
Apa yang Dilakukan On Error Resume Next?
Secara sederhana, On Error Resume Next memberi instruksi kepada VBA:
"Jika terjadi Runtime Error, abaikan kesalahan tersebut dan lanjutkan menjalankan baris kode berikutnya."
Sintaksnya sangat sederhana.
On Error Resume Next
Meskipun hanya terdiri dari satu baris, pengaruhnya terhadap alur program cukup besar.
Cara Kerja On Error Resume Next
Perhatikan ilustrasi berikut.
Program Berjalan
│
▼
Terjadi Runtime Error
│
▼
Error Diabaikan
│
▼
Program Melanjutkan Baris Berikutnya
Tanpa perintah tersebut, VBA akan langsung menghentikan program ketika menemukan Runtime Error. Sebaliknya, dengan On Error Resume Next, program tetap berjalan meskipun terjadi kesalahan.
Contoh Tanpa On Error Resume Next
Sub Contoh()
Worksheets("Data").Activate
MsgBox "Proses selesai."
End Sub
Jika worksheet Data tidak tersedia, VBA akan menghentikan program dan pesan "Proses selesai." tidak akan muncul.
Contoh Menggunakan On Error Resume Next
Sub Contoh()
On Error Resume Next
Worksheets("Data").Activate
MsgBox "Proses selesai."
End Sub
Jika worksheet Data tidak ditemukan, program tetap menampilkan pesan bahwa proses telah selesai.
Padahal, sebenarnya proses aktivasi worksheet gagal.
Inilah alasan mengapa penggunaan On Error Resume Next perlu dilakukan dengan hati-hati.
Kapan Sebaiknya Digunakan?
On Error Resume Next bukanlah perintah yang harus dihindari. Sebaliknya, perintah ini sangat berguna jika digunakan pada situasi yang tepat.
Beberapa contoh penggunaannya antara lain:
-
Menghapus worksheet yang mungkin tidak ada.
-
Menutup workbook yang mungkin sudah ditutup.
-
Memeriksa keberadaan worksheet.
-
Menghapus objek sementara.
-
Mengakses objek yang sifatnya opsional.
Sebagai contoh:
Sub HapusSheet()
On Error Resume Next
Worksheets("Temp").Delete
On Error GoTo 0
End Sub
Apabila worksheet Temp memang tidak ada, program tetap dapat melanjutkan proses berikutnya tanpa menampilkan Runtime Error.
Mengapa Harus Menggunakan On Error GoTo 0?
Setelah bagian kode yang berpotensi menghasilkan error selesai dijalankan, sebaiknya Anda mengembalikan perilaku VBA ke kondisi normal.
Caranya adalah dengan menuliskan:
On Error GoTo 0
Perintah tersebut menonaktifkan mode Resume Next, sehingga Runtime Error berikutnya akan kembali ditampilkan oleh VBA.
Langkah ini merupakan praktik yang sangat disarankan agar kesalahan lain tidak ikut terabaikan.
Jangan Lupa Memeriksa Objek Err
Walaupun menggunakan On Error Resume Next, bukan berarti Anda harus mengabaikan keberadaan error.
VBA menyediakan objek Err yang dapat digunakan untuk mengetahui apakah Runtime Error benar-benar terjadi.
Contohnya:
Sub Contoh()
On Error Resume Next
Worksheets("Laporan").Activate
If Err.Number <> 0 Then
MsgBox "Worksheet tidak ditemukan."
End If
On Error GoTo 0
End Sub
Dengan cara ini, program tetap berjalan, tetapi Anda masih dapat memberikan informasi yang tepat kepada pengguna.
Kesalahan yang Sering Dilakukan
Berikut beberapa kesalahan yang masih sering dijumpai pada project VBA.
Mengaktifkan On Error Resume Next di Awal Prosedur
Sub Proses()
On Error Resume Next
'Puluhan atau ratusan baris kode
End Sub
Cara ini membuat hampir semua Runtime Error diabaikan sehingga proses debugging menjadi jauh lebih sulit.
Tidak Menonaktifkan Mode Resume Next
Banyak programmer lupa menambahkan:
On Error GoTo 0
Akibatnya, seluruh Runtime Error berikutnya juga akan terus diabaikan selama prosedur tersebut berjalan.
Tidak Memeriksa Nilai Err.Number
Program memang tidak berhenti, tetapi Anda juga tidak mengetahui apakah proses sebelumnya berhasil atau gagal.
Tips Menggunakan On Error Resume Next
Agar penggunaannya tetap aman, biasakan menerapkan beberapa hal berikut.
-
Gunakan hanya pada bagian kode yang benar-benar berpotensi menghasilkan Runtime Error.
-
Segera nonaktifkan dengan
On Error GoTo 0setelah selesai digunakan. -
Periksa
Err.Numberjika keberhasilan proses sangat penting. -
Hindari menggunakan
On Error Resume Nextuntuk menutupi kesalahan logika program. -
Berikan komentar jika alasan penggunaan perintah tersebut tidak langsung terlihat.
Hal yang Perlu Diingat
On Error Resume Next bukanlah alat untuk memperbaiki error.
Perintah ini hanya mengubah cara VBA merespons Runtime Error.
Jika penyebab error tidak diperbaiki, masalah yang sama tetap akan terjadi. Bedanya, program mungkin tidak lagi menampilkan pesan kesalahan sehingga bug menjadi lebih sulit ditemukan.
Ringkasan
| Konsep | Penjelasan |
|---|---|
On Error Resume Next |
Mengabaikan Runtime Error dan melanjutkan eksekusi program. |
| Kelebihan | Program tidak langsung berhenti ketika terjadi Runtime Error tertentu. |
| Kekurangan | Dapat menyembunyikan kesalahan jika digunakan secara berlebihan. |
On Error GoTo 0 |
Mengembalikan mekanisme penanganan error ke kondisi normal. |
| Praktik Terbaik | Gunakan seperlunya dan selalu evaluasi hasil proses. |
Kesimpulan
On Error Resume Next merupakan salah satu fitur Error Handling yang sangat berguna dalam VBA Excel, tetapi penggunaannya harus dilakukan dengan bijaksana. Perintah ini cocok digunakan untuk mengantisipasi Runtime Error yang sudah diperkirakan sebelumnya, bukan untuk menyembunyikan seluruh kesalahan dalam program.
Dengan membatasi penggunaannya pada bagian kode tertentu, memeriksa objek Err, serta mengembalikan perilaku normal VBA menggunakan On Error GoTo 0, Anda dapat membuat aplikasi yang lebih tangguh tanpa mengorbankan kemudahan dalam proses debugging.
Latihan Mandiri
Latihan 1
Buat prosedur yang mencoba menghapus worksheet bernama Temp menggunakan On Error Resume Next. Jalankan prosedur ketika worksheet tersedia dan ketika worksheet tidak tersedia. Amati perbedaan hasilnya.
Latihan 2
Tambahkan pemeriksaan Err.Number pada latihan pertama. Tampilkan pesan yang berbeda ketika proses berhasil dan ketika worksheet tidak ditemukan.
Latihan 3
Buat dua prosedur untuk membuka workbook. Prosedur pertama dijalankan tanpa On Error Resume Next, sedangkan prosedur kedua menggunakan On Error Resume Next dan On Error GoTo 0. Bandingkan perilaku kedua prosedur tersebut saat file tidak ditemukan.
