Jika Anda telah mencoba salah satu contoh di buku ini, Anda mungkin pernah mengalami satu atau lebih pesan kesalahan. Beberapa kesalahan ini berakibat buruknya VBA kode.
Misalnya, Anda mungkin mengeja kata kunci dengan salah atau mengetikkan sebuah pernyataan dengan sintaks yang salah Jika Anda membuat kesalahan seperti itu, Anda bahkan tidak dapat melakukannya
Jalankan prosedur sampai Anda memperbaikinya.
Bab ini tidak membahas jenis kesalahan tersebut. Sebagai gantinya, saya membahas kesalahan runtime - kesalahan yang terjadi saat Excel mengeksekusi kode VBA Anda.
Lebih khusus lagi, bab ini membahas topik menarik berikut ini:
✓ Mengidentifikasi kesalahan
✓ Melakukan sesuatu tentang kesalahan yang terjadi
✓ Memulihkan dari kesalahan
✓ Menciptakan kesalahan yang disengaja
(Ya, terkadang kesalahan bisa menjadi hal yang baik.)
Sebuah Struktur If-Then memeriksa nilai yang terkandung dalam variabel Num. Jika Bilangan kurang dari 0, prosedur menampilkan kotak pesan yang berisi informasi agar manusia benar-benar bisa mengerti. Prosedur diakhiri dengan pernyataan Exit Sub, jadi run-time error tidak pernah memiliki kesempatan untuk terjadi
Makro masih belum sempurna
Apakah prosedur EnterSquareRoot yang dimodifikasi sudah sempurna ? Tidak juga. Cobalah memasukkan teks dan bukan nilai. Atau klik tombol Cancel di kotak input. Kedua tindakan ini menghasilkan kesalahan (Type mismatch).
Prosedur kecil yang sederhana ini membutuhkan kode penanganan error yang lebih banyak lagi. Kode modifikasi berikutnya menggunakan fungsi IsNumeric untuk memastikan. Jumlah berisi nilai numerik. Jika pengguna tidak memasukkan nomor, prosedur akan menampilkan pesan dan kemudian berhenti.
Perhatikan juga bahwa variabel Num sekarang didefinisikan sebagai varian. Jika itu didefinisikan sebagai Double, kode akan menghasilkan kesalahan yang tidak tertangani jika pengguna memasukkan nilai nonnumerik ke dalam kotak input.
Periksa kode berikut.
Saya memodifikasi rutin dari prosedur sebelumnya dengan menambahkan semua kemungkinan statement Error untuk mengantisipasi semua kesalahan dan kemudian memeriksa untuk melihat apakah InputBox telah dibatalkan.
(Ya, terkadang kesalahan bisa menjadi hal yang baik.)
Tujuan akhir Error-Handling adalah menulis kode yang menghindari penayangan pesan kesalahan Excel sebanyak mungkin. Dengan kata lain, Anda mengantisipasi potensi kesalahan dan berurusan dengan kesalahan sebelum Excel memiliki kesempatan untuk membuka akibat buruk dari pesan kesalahan (biasanya) yang kurang informatif.
Contoh yang salah :
Untuk memulai, saya mengembangkan makro VBA singkat. Aktifkan VBE, masukkan modul, dan masukkan kode berikut:
Sub EnterSquareRoot()
Dim Num As Double
' Prompt for a value
Num = InputBox(“Enter a value”)
‘ Insert the square root
ActiveCell.Value = Sqr(Num)
End Sub
Seperti ditunjukkan pada Gambar 1, prosedur ini meminta user untuk memasukkan sebuah nilai. Kemudian melakukan perhitungan matematis dan memasuki akar kuadrat dari nilai tersebut ke dalam Sel aktif.
Gambar 1
Anda bisa menjalankan prosedur ini langsung dari VBE dengan menekan F5. Sebagai alternatif, Anda mungkin ingin menambahkan sebuah tombol ke lembar kerja (gunakan Developer ➪ Controls ➪ Insert dan pilih tombol Form controls untuk melakukan ini) dan kemudian. Tetapkan makro ke tombolnya. (Excel meminta Anda untuk memberi nilai makro.)
Maka Anda bisa menjalankan prosedur hanya dengan mengklik tombol.
Macro yang tidak begitu sempurna
Jalankan kode beberapa kali untuk mencobanya. Ini bekerja dengan cukup baik, benarkah ? Sekarang coba masukkan angka negatif saat Anda diminta memberi nilai. Mencoba menghitung akar kuadrat dari angka negatif adalah ilegal di planet ini.
Excel merespon dengan pesan yang ditunjukkan pada Gambar 2, yang menunjukkan kode Anda menghasilkan kesalahan run-time. Untuk saat ini, cukup klik tombol End. Jika Anda mengklik tombol Debug, Excel menunda makro sehingga Anda bisa menggunakan tombol Debug. Alat debugging untuk membantu melacak kesalahan (Saya menjelaskan alat debugging di Bab yang lain.)
Kebanyakan orang tidak menemukan pesan kesalahan Excel sangat membantu (misalnya, panggilan atau argumen prosedur tidak valid) . Untuk memperbaiki prosedur, Anda perlu mengantisipasi kesalahan ini dan menanganinya dengan lebih anggun. Dengan kata lain, Anda perlu menambahkan beberapa kode penanganan error
Inilah versi modifikasi dari EnterSquareRoot:
Sebuah Struktur If-Then memeriksa nilai yang terkandung dalam variabel Num. Jika Bilangan kurang dari 0, prosedur menampilkan kotak pesan yang berisi informasi agar manusia benar-benar bisa mengerti. Prosedur diakhiri dengan pernyataan Exit Sub, jadi run-time error tidak pernah memiliki kesempatan untuk terjadi
Makro masih belum sempurna
Apakah prosedur EnterSquareRoot yang dimodifikasi sudah sempurna ? Tidak juga. Cobalah memasukkan teks dan bukan nilai. Atau klik tombol Cancel di kotak input. Kedua tindakan ini menghasilkan kesalahan (Type mismatch).
Prosedur kecil yang sederhana ini membutuhkan kode penanganan error yang lebih banyak lagi. Kode modifikasi berikutnya menggunakan fungsi IsNumeric untuk memastikan. Jumlah berisi nilai numerik. Jika pengguna tidak memasukkan nomor, prosedur akan menampilkan pesan dan kemudian berhenti.
Perhatikan juga bahwa variabel Num sekarang didefinisikan sebagai varian. Jika itu didefinisikan sebagai Double, kode akan menghasilkan kesalahan yang tidak tertangani jika pengguna memasukkan nilai nonnumerik ke dalam kotak input.
Apakah makro itu menjadi benar benar sempurna?
Sekarang kode ini menjadi benar-benar sempurna ? Tidak terlalu. Coba jalankan prosedur sementara lembar yang aktif adalah sebuah sheet grafk. Ini adalah kesalahan run-time lainnya;
Kali ini (lihat Gambar 3) adalah kesalahan yang terjadi karena tidak ada sel aktif saat lembar grafik diaktifkan, atau bila ada sesuatu selain rentang yang dipilih.
Daftar berikut menggunakan fungsi TypeName untuk memastikan bahwa pilihannya adalah kisaran. Jika ada sesuatu selain rentang yang dipilih, prosedur ini akan menampilkan pesan dan kemudian keluar:
Memberikan kesempurnaan
Sekarang, prosedur ini harus sempurna. Pikirkan lagi, sobat. Lindungi lembar kerja (gunakan perintah Review➪Changes➪Protect Sheet) dan kemudian jalankan kode. Yap, lembar kerja yang terlindungi menghasilkan kesalahan lain.
Dan saya mungkin belum memikirkan semua kesalahan lain yang bisa terjadi. Teruslah membaca untuk mencari cara lain mengatasi kesalahan - bahkan hal-hal yang tidak dapat Anda antisipasi.
Bagaimana Anda bisa mengidentifikasi dan menangani setiap kemungkinan kesalahan? Seringkali anda tidak bisa.
Untungnya, VBA memberikan cara lain untuk mengatasi kesalahan.
Kembali ke Prosedur EnterSquareRoot
Untungnya, VBA memberikan cara lain untuk mengatasi kesalahan.
Kembali ke Prosedur EnterSquareRoot
Periksa kode berikut.
Saya memodifikasi rutin dari prosedur sebelumnya dengan menambahkan semua kemungkinan statement Error untuk mengantisipasi semua kesalahan dan kemudian memeriksa untuk melihat apakah InputBox telah dibatalkan.
EmoticonEmoticon