Isi kandungan
Seperti yang anda sudah tahu cara membuat UDF (dan, saya harap, anda juga telah mencuba menggunakannya dalam Excel anda), mari kita gali sedikit lebih mendalam dan lihat apa yang boleh dilakukan sekiranya fungsi yang ditakrifkan pengguna anda tidak berfungsi.
Untuk menyelesaikan beberapa isu semasa membuat fungsi tersuai, anda berkemungkinan besar perlu menjalankan nyahpepijat. Kemudian anda boleh memastikan bahawa fungsi tersebut berfungsi dengan betul.
Kami akan meneroka teknik penyahpepijatan berikut:
Apabila anda mencipta fungsi tersuai, sentiasa ada kemungkinan bahawa anda akan membuat kesilapan. Fungsi tersuai biasanya agak rumit. Dan mereka tidak selalu mula bekerja dengan betul serta-merta. Formula mungkin mengembalikan hasil yang salah atau #VALUE! kesilapan. Tidak seperti fungsi Excel standard, anda tidak akan melihat sebarang mesej lain.
Adakah terdapat cara untuk melalui fungsi tersuai langkah demi langkah untuk menyemak cara setiap pernyataannya berfungsi? Pasti! Nyahpepijat digunakan untuk ini.
Saya akan menawarkan anda beberapa cara untuk menyahpepijat fungsi tersuai anda supaya anda boleh memilih yang sesuai untuk anda.
Sebagai contoh, kami menggunakan fungsi tersuai GetMaxBetween daripada salah satu artikel kami sebelum ini yang mengira nombor maksimum dalam julat nilai yang ditentukan:
Fungsi GetMaxBetween(rngCells As Julat, MinNum, MaxNum) Dim NumJulat Sebagai Julat Dim vMax Dim arrNums() Dim i Sebagai Integer ReDim arrNums(rngCells.Count) Untuk Setiap NumJulat Dalam rngCells vMax =NumRange Pilih Kes vMax Kes MinNum + 0.01 Hingga MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Kes Lain GetMaxBetween = 0 End Pilih Seterusnya NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function ialah fungsi TamatArgumen fungsi julat sel tempat nombor ditulis, serta had atas dan bawah nilai.
Letakkan fungsi MsgBox di tempat penting
Untuk memantau pelaksanaan pengiraan, anda boleh memaparkan nilai pembolehubah yang paling penting pada skrin di tempat yang betul. Ini boleh dilakukan menggunakan kotak dialog pop timbul.
MsgBox ialah kotak dialog yang boleh anda gunakan untuk menunjukkan beberapa jenis mesej kepada pengguna.
Sintaks MsgBox adalah serupa dengan fungsi VBA yang lain:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])prompt ialah hujah yang diperlukan. Ia mengandungi mesej yang anda lihat dalam kotak dialog. Ia juga boleh digunakan untuk memaparkan nilai pembolehubah individu.
Semua argumen lain adalah pilihan.
[ butang ] - menentukan butang dan ikon yang dipaparkan dalam MsgBox . Sebagai contoh, jika kita menggunakan pilihan vbOkOnly , maka hanya butang OK akan dipaparkan. Walaupun anda terlepas hujah ini, butang ini digunakan secara lalai.
[ tajuk ] - di sini anda boleh menentukan tajuk kotak mesej.
Mari beralih daripada perkataan untuk berlatih dan mula menyahpepijat. Untuk memaparkanmesej, tambah baris berikut pada kod fungsi GetMaxBetween yang ditakrifkan pengguna sebelum operator Case Else :
MsgBox vMax,, "Count -" & iBerikut ialah perkara yang akan kita perolehi dalam hasilnya:
Fungsi GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumJulat Sebagai Julat Malap vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) Untuk Setiap NumRange Dalam rngCells vMax = NumRange Pilih Sarung vMax Sarung MinNum + 0.01 Hingga 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 pembolehubah vMax dalam kotak dialog, kita akan melihat nombor yang memenuhi kriteria untuk pemilihan, jadi bahawa kita boleh memilih yang terbesar daripada mereka. Dengan ungkapan "Count -" & Saya dalam bar tajuk, kami menunjukkan berapa banyak nombor yang telah kami pilih untuk menentukan nilai maksimum. Kaunter akan ditingkatkan dengan setiap nilai baharu.
Setelah kami mempunyai set UDF kami, kami menggunakan formula di bawah pada julat tarikh:
= GetMaxBetween (A1:A6,10,50)
Selepas butang Enter ditekan, anda akan melihat mesej seperti dalam tangkapan skrin di bawah:
Ini ialah nombor pertama dalam julat A1: A6 yang memenuhi kriteria: lebih daripada 10 tetapi kurang daripada 50.
Selepas anda mengklik OK, mesej kedua muncul dengan nombor 14. Selebihnya nombor tidak sepadan dengan pemilihankriteria. Oleh itu, fungsi keluar dan mengembalikan yang terbesar daripada dua nilai, 17.
Fungsi MsgBox boleh digunakan di tempat paling penting dalam fungsi tersuai anda untuk mengawal cara nilai pembolehubah individu berubah. Kotak mesej boleh menjadi sangat berguna apabila anda mempunyai fungsi yang besar dan banyak pengiraan. Dalam kes ini, adalah mudah untuk anda menentukan di bahagian mana kod ralat berlaku.
Tentukan titik perhentian dan lakukan langkah demi langkah
Anda boleh menambah titik putus pada kod fungsi anda di mana pelaksanaan kod akan berhenti. Jadi anda boleh mengikuti proses pengiraan langkah demi langkah. Dengan berbuat demikian, anda boleh melihat cara nilai pembolehubah berubah.
Untuk menambah titik putus, letakkan kursor pada baris yang mengandungi pernyataan yang anda pilih untuk menjeda. Kemudian klik kanan dan pilih Nyahpepijat -> Togol Breakpoint atau hanya tekan F9 . Anda juga boleh mengklik di tempat yang dikehendaki pada kawasan kelabu menegak di sebelah kiri kod fungsi.
Bulatan merah akan muncul, seperti yang anda boleh lihat dalam tangkapan skrin di bawah. Baris kod di mana pengiraan akan dihentikan diserlahkan dengan warna merah.
Kini, tetingkap editor VBA akan dibuka apabila fungsi sedang berjalan. Kursor akan diletakkan pada titik di mana anda berhenti.
Jika anda mengarahkan kursor tetikus anda ke atas mana-mana pembolehubah dalam kod fungsi, anda boleh melihat semasanyanilai:
Tekan F5 untuk meneruskan pengiraan.
Nota. Selepas titik putus, anda boleh mula menjejak kemajuan pengiraan langkah demi langkah. Jika anda menekan butang F8, hanya satu baris seterusnya kod VBA akan dilaksanakan. Garis kuning dengan anak panah juga akan bergerak ke kedudukan kod yang terakhir dilaksanakan.
Memandangkan pelaksanaan fungsi dijeda lagi, anda boleh melihat nilai semasa semua pembolehubah fungsi menggunakan kursor tetikus.
Tekanan F8 seterusnya akan membawa kita satu langkah ke hadapan . Jadi anda boleh menekan F8 sehingga pengiraan tamat. Atau tekan F5 untuk meneruskan pengiraan sehingga titik putus seterusnya.
Jika ralat berlaku, kursor akan dihentikan pada titik dalam kod tempat ralat berlaku. Dan anda juga akan melihat mesej ralat pop timbul. Ini memudahkan untuk menentukan punca masalah.
Titik putus yang anda tentukan akan digunakan sehingga anda menutup fail. Apabila anda membukanya semula, anda perlu menetapkannya semula. Bukan kaedah yang paling mudah, bukankah anda fikir?
Walau bagaimanapun, masalah ini boleh diselesaikan. Masukkan pernyataan Berhenti ke dalam kod fungsi pada titik yang diperlukan dan anda boleh menghentikan pelaksanaan program dengan cara yang sama seperti semasa menggunakan titik putus.
Apabila VBA menemui kenyataan Berhenti , ia akan menghentikan pelaksanaan program dan menunggu tindakan anda. Semak nilai pembolehubah, kemudiantekan F5 untuk meneruskan.
Atau tekan F8 untuk memenuhi fungsi langkah demi langkah seperti yang diterangkan di atas.
Pernyataan Berhenti adalah sebahagian daripada program dan oleh itu adalah tidak dipadamkan, seperti halnya dengan titik putus. Apabila anda selesai menyahpepijat, alih keluarnya sendiri. Atau tukarkannya menjadi ulasan dengan mendahuluinya dengan petikan tunggal (').
Menyahpepijat menggunakan operator Debug.Print
Anda boleh meletakkan Debug.Print dalam kod fungsi di tempat yang betul. Ini berguna untuk menyemak nilai pembolehubah yang berubah secara kitaran.
Anda boleh melihat contoh prestasi Debug.Print pada tangkapan skrin di bawah.
Pernyataan Debug.Print i, vMax mencetak nilai dan nombor ordinalnya.
Dalam tetingkap Segera anda melihat dua nombor (17 dan 14) daripada julat yang dipilih, yang sepadan dengan had yang ditetapkan dan antara yang maksimum akan dipilih. Digit 1 dan 2 bermakna fungsi telah menyelesaikan 2 kitaran di mana nombor telah dipilih. Kami melihat nilai pembolehubah yang paling penting, seperti yang kami lakukan sebelum ini dengan MsgBox . Tetapi ini tidak menghentikan fungsi itu.
Panggil fungsi daripada prosedur
Anda boleh memanggil fungsi yang ditentukan pengguna bukan daripada sel dalam lembaran kerja, tetapi daripada prosedur. Dalam kes ini, semua ralat akan ditunjukkan dalam tetingkap Visual Basic Editor.
Berikut ialah cara anda boleh memanggil fungsi yang ditentukan pengguna GetMaxBerween daripadaprosedur:
Sub Test() Dim x x = GetMaxBetween(Julat ( "A1:A6" ), 10, 50) MsgBox(x) End SubLetakkan kursor di mana-mana dalam kod dan tekan F5 . Jika tiada ralat dalam fungsi, anda akan melihat tetingkap timbul dengan hasil pengiraan.
Sekiranya berlaku ralat, anda akan melihat mesej yang sepadan dalam editor VBA. Pengiraan akan dihentikan dan baris kod di mana ralat berlaku akan diserlahkan dengan warna kuning. Anda boleh mengenal pasti dengan mudah di mana dan sebab ralat itu berlaku.
Itu sahaja. Kini anda telah mencipta tambahan anda sendiri, menambahkannya pada Excel dan anda boleh menggunakan UDF di dalamnya. Jika anda ingin menggunakan lebih banyak UDF, cuma tulis kod dalam modul tambahan dalam editor VBA dan simpannya.
Itu sahaja untuk hari ini. Kami telah membincangkan cara yang berbeza untuk menyahpepijat fungsi tersuai dan mempelajari cara menggunakannya dalam buku kerja anda. Kami sangat berharap anda mendapati garis panduan ini membantu. Jika anda mempunyai sebarang soalan, tulis dalam ulasan artikel ini.