Daptar eusi
Sakumaha anjeun parantos terang kumaha cara ngadamel UDF (sareng, kuring ngarepkeun, anjeun ogé parantos nyobian ngalarapkeunana dina Excel anjeun), hayu urang ngagali langkung jero sareng tingali naon anu tiasa dilakukeun upami fungsi anu ditetepkeun ku pangguna henteu jalan.
Pikeun ngaréngsékeun sababaraha pasualan nalika nyieun pungsi custom, anjeun paling dipikaresep kudu ngajalankeun debug. Teras anjeun tiasa yakin yén pungsi éta jalan leres.
Kami bakal ngajalajah téknik debugging ieu:
Nalika anjeun nyiptakeun pungsi khusus, sok aya kamungkinan. yén anjeun bakal nyieun kasalahan. fungsi custom biasana rada kompleks. Sareng aranjeunna henteu salawasna ngamimitian damel leres langsung. Rumusna tiasa ngabalikeun hasil anu salah atanapi #VALUE! kasalahan. Beda sareng pungsi Excel standar, anjeun moal ningali pesen anu sanés.
Naha aya cara pikeun ngalangkungan pungsi khusus léngkah-léngkah pikeun mariksa kumaha unggal pernyataanna jalanna? Mang! Debugging dianggo pikeun ieu.
Kuring bakal nawiskeun anjeun sababaraha cara pikeun nga-debug pungsi khusus anjeun supados anjeun tiasa milih anu cocog pikeun anjeun.
Salaku conto, kami nganggo pungsi khusus. GetMaxBetween ti salah sahiji artikel saméméhna urang anu ngitung jumlah maksimum dina rentang nilai nu ditangtukeun:
Fungsi GetMaxBetween(rngCells Salaku Range, MinNum, MaxNum) Taram NumRange Salaku Rentang Taram vMax Taram arrNums() Taram i Salaku Integer ReDim arrNums(rngCells.Count) Pikeun Unggal NumRange Dina rngCells vMax =NumRange Pilih Kasus vMax Kasus MinNum + 0.01 Ka MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Kasus Lain GetMaxBetween = 0 Tungtung Pilih Salajengna NumRange GetMaxBetween = Lembar KerjaFunction.Max(arrNums) Fungsi tungtungArgumen fungsi rentang sél dimana angka ditulis, kitu ogé wates luhur jeung handap nilai.
Teundeun pungsi MsgBox dina tempat penting
Dina raraga ngawas palaksanaan itungan, Anjeun bisa mintonkeun nilai variabel pangpentingna dina layar di tempat katuhu. Ieu tiasa dilakukeun nganggo kotak dialog pop-up.
MsgBox mangrupikeun kotak dialog anu anjeun tiasa dianggo pikeun nunjukkeun sababaraha jinis pesen ka pangguna.
Sintaksis MsgBox sarua jeung fungsi VBA séjén:
MsgBox(ajakan [, tombol] [, judul] [, helpfile, konteks])ajakan mangrupakeun argumen diperlukeun. Éta ngandung pesen anu anjeun tingali dina kotak dialog. Ogé bisa dipaké pikeun mintonkeun nilai variabel individual.
Kabéh argumen séjén pilihan.
[ tombol ] - nangtukeun mana tombol jeung ikon nu dipintonkeun dina MsgBox . Contona, upami urang nganggo pilihan vbOkOnly , ngan tombol OK anu bakal dipintonkeun. Sanajan anjeun sono kana argumen ieu, tombol ieu dipaké sacara standar.
[ judul ] - di dieu anjeun bisa nangtukeun judul kotak suratna.
Hayu urang pindah ti kecap pikeun latihan tur mimitian debugging. Pikeun mintonkeunpesen, tambahkeun garis handap kana kodeu GetMaxBetween fungsi-diartikeun pamaké saméméh operator Kasus Lain :
MsgBox vMax,, "Count -" & amp; abdiIeu naon anu bakal kami hasilkeun:
Fungsi GetMaxBetween(rngCells Salaku Range, MinNum, MaxNum) Dim NumRange Salaku Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) Pikeun Unggal NumRange Dina rngCells vMax = NumRange Pilih Case vMax Case MinNum + 0,01 Pikeun MaxNum - 0,01 arrNums (abdi) = vMax i = abdi + 1 MsgBox vMax,, "Cacah -" & amp; i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionNgagunakeun variabel vMax dina kotak dialog, urang bakal nempo nomer mana nu minuhan kriteria keur pilihan, jadi yén urang bisa milih nu panggedéna di antarana. Kalawan babasan "Count -" & amp; Kuring dina bar judul, urang nunjukkeun sabaraha angka kami geus dipilih pikeun nangtukeun nilai maksimum. Counter bakal dironjatkeun kalawan unggal nilai anyar.
Sanggeus urang boga set UDF, urang nerapkeun rumus di handap pikeun rentang tanggal:
= GetMaxBetween (A1:A6,10,50)
Sanggeus tombol Lebetkeun dipencet, anjeun bakal nempo pesen saperti dina screenshot di handap:
Ieu nomer kahiji dina rentang A1: A6 nu minuhan kriteria: leuwih gede ti 10 tapi kurang. ti 50.
Sanggeus Anjeun klik OK, pesen kadua mucunghul kalawan angka 14. Sésana angka teu cocog pilihan.patokan. Ku alatan éta, pungsi kaluar sarta mulangkeun nu panggedena tina dua nilai, 17.
Pungsi MsgBox bisa dipaké di tempat pangpentingna dina pungsi custom Anjeun pikeun ngadalikeun kumaha nilai. variabel individu robah. Kotak pesen tiasa mangpaat pisan nalika anjeun gaduh fungsi anu ageung sareng seueur komputasi. Dina hal ieu, bakal gampang pikeun anjeun pikeun nangtukeun bagian mana tina kode kasalahan lumangsung.
Tangtukeun titik eureun jeung ngalakukeun step by step
Anjeun bisa nambahkeun breakpoints kana kode tina fungsi anjeun dimana palaksanaan kode bakal eureun. Ku kituna anjeun bisa nuturkeun prosés itungan step by step. Dina ngalakukeunana, anjeun tiasa ningali kumaha nilai-nilai variabelna robih.
Pikeun nambihan breakpoint, tempatkeun kursor dina garis anu ngandung pernyataan dimana anjeun milih ngareureuhkeun. Teras klik katuhu sareng pilih Debug -> Toggle Breakpoint atawa ngan pencét F9 . Anjeun oge tiasa klik dina tempat nu dipikahoyong dina wewengkon abu vertikal ka kénca ti kode fungsi.
A bunderan beureum bakal muncul, sakumaha anjeun tiasa ningali dina screenshot handap. Baris kode dimana itungan bakal dieureunkeun disorot beureum.
Ayeuna, jandela editor VBA bakal dibuka nalika pungsi jalan. Kursor bakal diposisikan dina titik dimana anjeun lirén.
Lamun anjeun ngalayangkeun kursor beurit anjeun dina salah sahiji variabel dina kode fungsi, anjeun tiasa ningali ayeuna.nilai:
Pencét F5 pikeun neruskeun itungan.
Catetan. Saatos breakpoint, anjeun tiasa ngawitan ngalacak kamajuan itungan step by step. Lamun mencet tombol F8, ngan hiji baris saterusna kode VBA bakal dieksekusi. Garis konéng kalawan panah ogé bakal pindah ka posisi kode dieksekusi panungtungan.
Kusabab palaksanaan pungsi direureuhkeun deui, anjeun tiasa ningali nilai ayeuna sadaya variabel fungsi nganggo kursor beurit.
Pencét F8 salajengna bakal nyandak urang saléngkah ka hareup . Janten anjeun tiasa pencét F8 dugi ka ahir itungan. Atawa pencét F5 pikeun neruskeun itungan nepi ka breakpoint salajengna.
Lamun aya kasalahan, kursor bakal dieureunkeun dina titik dina kode dimana kasalahan lumangsung. Sareng anjeun ogé bakal ningali pesen kasalahan pop-up. Ieu ngagampangkeun pikeun nangtukeun panyababna masalahna.
Titik putus anu anjeun tangtukeun bakal diterapkeun dugi ka anjeun nutup filena. Nalika anjeun dibuka deui, anjeun kedah nyetél deui. Teu cara nu pangmerenahna, anjeun pikir?
Tapi, masalah ieu bisa direngsekeun. Selapkeun pernyataan Stop kana kode fungsi dina titik-titik anu diperlukeun, sarta anjeun tiasa ngeureunkeun palaksanaan program dina cara anu sami sareng nalika nganggo titik putus.
Nalika VBA mendakan pernyataan Stop , éta bakal ngeureunkeun palaksanaan program sareng ngantosan tindakan anjeun. Pariksa nilai-nilai variabel, teraspencét F5 pikeun neruskeun.
Atawa pencét F8 pikeun minuhan pungsi step-by-step sakumaha ditétélakeun di luhur.
Pernyataan Stop mangrupa bagian tina program sahingga mangrupakeun teu dihapus, sakumaha dina kasus breakpoint a. Sawaktos Anjeun tos rengse debugging, piceun eta sorangan. Atawa robah jadi koméntar ku miheulaan ku tanda petik tunggal (').
Debugging maké operator Debug.Print
Anjeun bisa nempatkeun Debug.Print dina kodeu fungsi dina tempat katuhu. Ieu gunana pikeun mariksa nilai-nilai variabel anu robah sacara siklik.
Anjeun tiasa ningali conto kinerja Debug.Print dina screenshot di handap.
Pernyataan Debug.Print i, vMax nyitak nilai sareng nomer ordinalna.
Dina jandela Geura anjeun ningali dua angka (17 sareng 14) tina rentang anu dipilih, anu pakait sareng set wates jeung diantara nu maksimum bakal dipilih. Angka 1 sareng 2 hartosna yén fungsi parantos réngsé 2 siklus dimana nomerna dipilih. Kami ningali nilai-nilai variabel anu paling penting, sapertos anu urang lakukeun ku MsgBox . Tapi ieu henteu ngeureunkeun pungsi.
Nelepon pungsi tina prosedur
Anjeun tiasa nelepon pungsi anu ditetepkeun ku pangguna sanés tina sél dina lembar kerja, tapi tina prosedur. Dina hal ieu, sadaya kasalahan bakal ditingalikeun dina jandela Visual Basic Editor.
Kieu kumaha anjeun tiasa nyauran fungsi anu didefinisikeun ku pangguna GetMaxBerween tina hijiprosedur:
Sub Test() Taram x x = GetMaxBetween(Range ( "A1: A6"), 10, 50) MsgBox(x) End SubPosisikeun kursor di mana wae dina kode jeung pencét F5. Upami teu aya kasalahan dina fungsi, anjeun bakal ningali jandela pop-up kalayan hasil itungan.
Upami aya kasalahan, anjeun bakal ningali pesen anu cocog dina editor VBA. Itungan bakal dieureunkeun jeung garis kode nu kasalahan lumangsung bakal disorot konéng. Anjeun tiasa sacara gampil ngaidentipikasi dimana sareng kunaon kasalahan éta lumangsung.
Éta waé. Ayeuna anjeun parantos nyiptakeun tambihan anjeun nyalira, tambahkeun kana Excel sareng anjeun tiasa nganggo UDF di dinya. Upami anjeun hoyong langkung seueur UDF, tuliskeun kodeu dina modul tambihan dina éditor VBA teras simpen.
Kitu waé pikeun dinten ayeuna. Kami parantos nutupan sababaraha cara pikeun nga-debug pungsi khusus sareng diajar kumaha ngagunakeunana dina buku kerja anjeun. Kami ngarepkeun anjeun mendakan tungtunan ieu mangpaat. Upami anjeun aya patarosan, tulis dina koméntar kana tulisan ieu.