Daftar Isi
Karena Anda sudah tahu cara membuat UDF (dan, saya harap, Anda juga sudah mencoba menerapkannya di Excel Anda), mari kita gali lebih dalam dan lihat apa yang bisa dilakukan jika fungsi yang ditentukan pengguna Anda tidak berfungsi.
Untuk mengatasi beberapa masalah saat membuat fungsi kustom, kemungkinan besar Anda perlu menjalankan debug. Kemudian Anda dapat memastikan bahwa fungsi tersebut bekerja dengan benar.
Kita akan mengeksplorasi teknik-teknik debugging berikut ini:
Ketika Anda membuat fungsi kustom, selalu ada kemungkinan Anda akan membuat kesalahan. Fungsi kustom biasanya cukup kompleks. Dan mereka tidak selalu langsung bekerja dengan benar. Formula mungkin mengembalikan hasil yang salah atau kesalahan #VALUE! Tidak seperti fungsi Excel standar, Anda tidak akan melihat pesan lain.
Apakah ada cara untuk menelusuri fungsi kustom selangkah demi selangkah untuk memeriksa bagaimana setiap pernyataannya bekerja? Tentu! Debugging digunakan untuk ini.
Saya akan menawarkan beberapa cara untuk men-debug fungsi kustom Anda sehingga Anda dapat memilih salah satu yang sesuai untuk Anda.
Sebagai contoh, kita menggunakan fungsi kustom GetMaxBetween dari salah satu artikel kami sebelumnya yang menghitung angka maksimum dalam kisaran nilai yang ditentukan:
Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionArgumen fungsi adalah rentang sel di mana angka ditulis, serta batas atas dan bawah nilai.
Tempatkan fungsi MsgBox di tempat-tempat penting
Untuk memantau eksekusi kalkulasi, Anda bisa menampilkan nilai-nilai variabel yang paling penting pada layar di tempat yang tepat. Ini bisa dilakukan dengan menggunakan kotak dialog pop-up.
MsgBox adalah kotak dialog yang dapat Anda gunakan untuk menampilkan beberapa jenis pesan kepada pengguna.
Sintaks MsgBox mirip dengan fungsi VBA lainnya:
MsgBox(prompt [, tombol] [, judul] [, helpfile, konteks])cepat adalah argumen yang diperlukan. Ini berisi pesan yang Anda lihat di kotak dialog. Ini juga dapat digunakan untuk menampilkan nilai variabel individual.
Semua argumen lainnya bersifat opsional.
[ tombol ] - menentukan tombol dan ikon mana yang ditampilkan dalam MsgBox Misalnya, jika kita menggunakan opsi vbOkOnly , maka hanya OK Bahkan jika Anda melewatkan argumen ini, tombol ini digunakan secara default.
[ judul ] - di sini Anda dapat menentukan judul kotak pesan.
Mari kita beralih dari kata-kata ke praktik dan mulai melakukan debugging. Untuk menampilkan pesan, tambahkan baris berikut ke kode dari GetMaxBetween fungsi yang ditentukan pengguna sebelum Kasus Lain operator:
MsgBox vMax,, "Hitung -" & iInilah yang akan kita dapatkan hasilnya:
Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween =WorksheetFunction.Max(arrNums) End FunctionMenggunakan vMax dalam kotak dialog, kita akan melihat angka-angka mana yang memenuhi kriteria untuk dipilih, sehingga kita bisa memilih angka yang terbesar. Dengan ekspresi "Count -" & I pada title bar, kita menunjukkan berapa banyak angka yang sudah kita pilih untuk menentukan nilai maksimum. Penghitung akan ditingkatkan dengan setiap nilai baru.
Setelah kita memiliki UDF yang ditetapkan, kita menerapkan rumus di bawah ini ke rentang tanggal:
= GetMaxBetween (A1:A6,10,50)
Setelah tombol Enter ditekan, Anda akan melihat pesan seperti pada gambar di bawah ini:
Ini adalah angka pertama dalam rentang A1: A6 yang memenuhi kriteria: lebih besar dari 10 tetapi kurang dari 50.
Setelah Anda mengklik OK, pesan kedua muncul dengan angka 14. Angka-angka lainnya tidak cocok dengan kriteria pemilihan. Oleh karena itu, fungsi keluar dan mengembalikan nilai terbesar dari dua nilai, 17.
The MsgBox dapat digunakan di tempat yang paling penting dalam fungsi kustom Anda untuk mengontrol bagaimana nilai variabel individu berubah. Kotak pesan bisa sangat berguna ketika Anda memiliki fungsi yang besar dan banyak komputasi. Dalam hal ini, akan mudah bagi Anda untuk menentukan di bagian mana dari kode kesalahan terjadi.
Tentukan titik berhenti dan lakukan langkah demi langkah
Anda dapat menambahkan breakpoint pada kode fungsi Anda dimana eksekusi kode akan berhenti. Sehingga Anda dapat mengikuti proses kalkulasi selangkah demi selangkah. Dengan demikian, Anda dapat melihat bagaimana nilai variabel berubah.
Untuk menambahkan breakpoint, tempatkan kursor pada baris yang berisi pernyataan yang Anda pilih untuk berhenti sejenak. Kemudian klik kanan dan pilih Debug -> Mengalihkan Breakpoint atau cukup tekan F9 . Anda juga dapat mengklik di tempat yang diinginkan pada area abu-abu vertikal di sebelah kiri kode fungsi.
Lingkaran merah akan muncul, seperti yang bisa Anda lihat pada gambar di bawah ini. Baris kode di mana kalkulasi akan dihentikan disorot dengan warna merah.
Sekarang, jendela editor VBA akan dibuka saat fungsi berjalan. Kursor akan diposisikan pada titik di mana Anda berhenti.
Jika Anda mengarahkan kursor mouse Anda ke salah satu variabel dalam kode fungsi, Anda dapat melihat nilainya saat ini:
Tekan F5 untuk melanjutkan penghitungan.
Catatan Setelah breakpoint, Anda dapat mulai melacak kemajuan perhitungan langkah demi langkah. Jika Anda menekan tombol F8, hanya satu baris kode VBA berikutnya yang akan dieksekusi. Garis kuning dengan tanda panah juga akan berpindah ke posisi kode yang terakhir dieksekusi.
Karena eksekusi fungsi dijeda lagi, Anda dapat melihat nilai saat ini dari semua variabel fungsi menggunakan kursor mouse.
Penekanan F8 berikutnya akan membawa kita selangkah lebih maju. Jadi anda bisa menekan F8 sampai akhir kalkulasi. Atau tekan F5 untuk melanjutkan kalkulasi sampai breakpoint berikutnya.
Jika terjadi kesalahan, kursor akan dihentikan pada titik dalam kode di mana kesalahan terjadi. Dan Anda juga akan melihat pesan kesalahan pop-up. Ini memudahkan untuk menentukan penyebab masalah.
Breakpoint yang Anda tentukan akan diterapkan sampai Anda menutup file. Ketika Anda membukanya kembali, Anda harus mengaturnya lagi. Bukan metode yang paling nyaman, bukan begitu?
Namun demikian, masalah ini bisa diatasi. Berhenti pernyataan ke dalam kode fungsi pada titik-titik yang diperlukan, dan Anda bisa menghentikan eksekusi program dengan cara yang sama seperti ketika menggunakan breakpoints.
Ketika VBA menemukan sebuah Berhenti akan menghentikan eksekusi program dan menunggu tindakan Anda. Periksa nilai-nilai variabel, lalu tekan F5 untuk melanjutkan.
Atau tekan F8 untuk memenuhi fungsi langkah-demi-langkah seperti dijelaskan di atas.
The Berhenti adalah bagian dari program dan oleh karena itu tidak dihapus, seperti halnya breakpoint. Ketika Anda selesai melakukan debugging, hapus sendiri. Atau ubahlah menjadi komentar dengan mendahuluinya dengan tanda kutip tunggal (').
Debugging menggunakan operator Debug.Print
Anda bisa menempatkan Debug.Print dalam kode fungsi di tempat yang tepat. Hal ini berguna untuk memeriksa nilai variabel yang berubah secara siklis.
Anda bisa melihat contoh kinerja Debug.Print pada screenshot di bawah ini.
Pernyataan Debug.Print i, vMax mencetak nilai dan nomor urutnya.
Di jendela Immediate, Anda melihat dua angka (17 dan 14) dari rentang yang dipilih, yang sesuai dengan batas yang ditetapkan dan di antaranya maksimum akan dipilih. Digit 1 dan 2 berarti bahwa fungsi telah menyelesaikan 2 siklus di mana angka-angka dipilih. Kami melihat nilai-nilai variabel yang paling penting, seperti yang kami lakukan sebelumnya dengan MsgBox Tetapi hal ini tidak menghentikan fungsinya.
Memanggil fungsi dari prosedur
Anda dapat memanggil fungsi yang ditentukan pengguna bukan dari sel di lembar kerja, tetapi dari prosedur. Dalam hal ini, semua kesalahan akan ditampilkan di jendela Editor Visual Basic.
Berikut ini adalah bagaimana Anda bisa memanggil fungsi yang ditentukan pengguna GetMaxBerween dari sebuah prosedur:
Sub Test() Dim x x = GetMaxBetween(Range ("A1:A6" ), 10, 50) MsgBox(x) End SubPosisikan kursor di mana saja dalam kode dan tekan F5 . Jika tidak ada kesalahan dalam fungsi, Anda akan melihat jendela pop-up dengan hasil perhitungan.
Jika terjadi kesalahan, Anda akan melihat pesan yang sesuai dalam editor VBA. Perhitungan akan dihentikan dan baris kode di mana kesalahan terjadi akan disorot dengan warna kuning. Anda dapat dengan mudah mengidentifikasi di mana dan mengapa kesalahan terjadi.
Sekarang Anda telah membuat add-in Anda sendiri, menambahkannya ke Excel dan Anda dapat menggunakan UDF di dalamnya. Jika Anda ingin menggunakan lebih banyak UDF, cukup tulis kode dalam modul add-in di editor VBA dan simpan.
Itu saja untuk hari ini. Kami telah membahas berbagai cara untuk men-debug fungsi kustom dan mempelajari cara menggunakannya di buku kerja Anda. Kami sangat berharap panduan ini bermanfaat bagi Anda. Jika Anda memiliki pertanyaan, tuliskan di komentar untuk artikel ini.