Enhavtabelo
Ĉar vi jam scias kiel krei UDF-ojn (kaj, mi esperas, vi ankaŭ provis apliki ilin en via Excel), ni profunde profunde kaj vidu, kion oni povas fari, se via uzant-difinita funkcio ne funkcias.
Por solvi iujn problemojn dum kreado de kutima funkcio, vi plej verŝajne devos ruli sencimigon. Tiam vi povas esti certa, ke la funkcio funkcias ĝuste.
Ni esploros jenajn sencimigajn teknikojn:
Kiam vi kreas kutiman funkcion, ĉiam estas ebleco. ke vi eraros. Propraj funkcioj estas kutime sufiĉe kompleksaj. Kaj ili ne ĉiam ekfunkcias ĝuste tuj. La formulo povas redoni malĝustan rezulton aŭ la #VALORO! eraro. Male al normaj Excel-funkcioj, vi ne vidos aliajn mesaĝojn.
Ĉu estas maniero trairi laŭpaŝe laŭpaŝe laŭpaŝan funkcion por kontroli kiel ĉiu el ĝiaj deklaroj funkcias? Certe! Sencimigado estas uzata por tio.
Mi proponos al vi plurajn manierojn sencimigi vian kutiman funkcion por ke vi elektu tiun, kiu funkcias por vi.
Ekzemple ni uzas la kutiman funkcion. GetMaxBetween el unu el niaj antaŭaj artikoloj, kiu kalkulas la maksimuman nombron en la specifita gamo de valoroj:
Funkcio GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Kiel Entjero ReDim arrNums(rngCells.Count) Por Ĉiu NumRange En rngCells vMax =NumRange Elektu Kazon vMax Case MinNum + 0,01 Al MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Kazo Alie GetMaxBetween = 0 End Elektu Sekvan NumRange GetMaxBetween = WorksheetFunction.Max (arrNums) End Funkcioj estas la argumentoj de la funkciogamo da ĉeloj kie nombroj estas skribitaj, same kiel la supra kaj malsupera limo de valoroj.
Metu la funkcion MsgBox en gravaj lokoj
Por kontroli la plenumon de kalkuloj, vi povas montri la valoroj de la plej gravaj variabloj sur la ekrano en la ĝustaj lokoj. Tio povas esti farita per ŝprucfenestroj.
MsgBox estas dialogujo, kiun vi povas uzi por montri ian mesaĝon al la uzanto.
La sintakso de MsgBox similas al aliaj VBA-funkcioj:
MsgBox(prompt [, butonoj] [, titolo] [, helpdosiero, kunteksto])prompt estas postulata argumento. Ĝi enhavas la mesaĝon, kiun vi vidas en la dialogujo. Ĝi ankaŭ povas esti uzata por montri la valorojn de individuaj variabloj.
Ĉiuj aliaj argumentoj estas laŭvolaj.
[ butonoj ] - determinas kiuj butonoj kaj ikonoj estas montrata en la MsgBox . Ekzemple, se ni uzas la opcion vbOkOnly , tiam nur la butono OK montriĝos. Eĉ se vi maltrafis ĉi tiun argumenton, ĉi tiu butono estas uzata defaŭlte.
[ titolo ] - ĉi tie vi povas specifi la titolon de la mesaĝkesto.
Ni ŝanĝu de vortoj por ekzerci kaj komenci sencimigi. Por montri lamesaĝo, aldonu la sekvan linion al la kodo de la funkcio GetMaxBetween difinita de uzanto antaŭ la operatoro Kazo Ali :
MsgBox vMax,, "Nombri -" & iJen kion ni ricevos en la rezulto:
Funkcio GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) Por Ĉiu NumRange En rngCells vMax = NumRange Elektu Kazon vMax Kazo MinNum + 0,01 Al MaxNum - 0,01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Nombri -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionUzante la variablon vMax en la dialogujo, ni vidos, kiuj nombroj plenumas la kriteriojn por elekto, do ke ni povas elekti la plej grandan el ili. Kun la esprimo "Nombri -" & Mi en la titolbreto, ni indikas kiom da nombroj ni jam elektis por determini la maksimuman valoron. La nombrilo plialtiĝos kun ĉiu nova valoro.
Unufoje ni havas nian UDF agordita, ni aplikas la suban formulon al la datintervalo:
= GetMaxBetween (A1:A6,10,50)
Post la butono Enigu estas premata, vi vidos mesaĝon kiel en la suba ekrankopio:
Ĉi tiu estas la unua numero en la gamo A1: A6 kiu plenumas la kriteriojn: pli granda ol 10 sed malpli ol 50.
Post kiam vi klakas OK, dua mesaĝo aperas kun la numero 14. La ceteraj nombroj ne kongruas kun la elekto.kriterioj. Tial la funkcio eliras kaj redonas la plej grandan el la du valoroj, 17.
La funkcio MsgBox povas esti uzata en la plej gravaj lokoj en via kutima funkcio por kontroli kiel la valoroj de individuaj variabloj ŝanĝiĝas. Mesaĝkestoj povas esti tre utilaj kiam vi havas grandan funkcion kaj multe da komputado. En ĉi tiu kazo, estos facile por vi determini en kiu parto de la kodo okazas la eraro.
Determinu haltpunktojn kaj faru paŝon post paŝo
Vi povas aldoni rompopunktojn al la kodo de via funkcio kie la koda ekzekuto ĉesos. Do vi povas sekvi la kalkulprocezon paŝon post paŝo. Farante tion, vi povas vidi kiel ŝanĝiĝas la valoroj de la variabloj.
Por aldoni rompopunkton, metu la kursoron sur la linion enhavanta la deklaron, kie vi elektas paŭzi. Tiam dekstre alklaku kaj elektu Elpurigi -> Ŝanĝu Breakpoint aŭ simple premu F9 . Vi ankaŭ povas alklaki en la dezirata loko sur la vertikala griza areo maldekstre de la funkciokodo.
Ruĝa cirklo aperos, kiel vi povas vidi en la ekrankopio malsupre. La linio de kodo kie la kalkulo estos ĉesigita estas elstarigita en ruĝa.
Nun, la fenestro de VBA-redaktilo estos malfermita kiam la funkcio funkcias. La kursoro estos poziciigita ĉe la punkto kie vi haltis.
Se vi ŝvebas vian muskursonon super iu ajn el la variabloj en la funkciokodo, vi povas vidi ilian aktualanvaloro:
Premu F5 por daŭrigi la kalkulon.
Notu. Post la rompopunkto, vi povas komenci spuri la progreson de la kalkuloj paŝo post paŝo. Se vi premas la butonon F8, nur unu sekva linio de la VBA-kodo estos ekzekutita. La flava linio kun sago ankaŭ moviĝos al la lasta ekzekutita kodpozicio.
Ĉar la ekzekuto de la funkcio denove estas paŭzita, vi povas vidi la aktualajn valorojn de ĉiuj variabloj de la funkcio uzante la muskursonon.
La sekva premo de F8 kondukos nin unu paŝon antaŭen. . Do vi povas premi F8 ĝis la fino de la kalkulo. Aŭ premu F5 por daŭrigi la kalkulon ĝis la sekva rompopunkto.
Se okazas eraro, la kursoro haltos ĉe la punkto en la kodo, kie la eraro okazis. Kaj vi ankaŭ vidos ŝprucfendan erarmesaĝon. Ĉi tio faciligas determini la kaŭzon de la problemo.
La rompopunktoj kiujn vi specifas estos aplikataj ĝis vi fermos la dosieron. Kiam vi remalfermas ĝin, vi devos agordi ilin denove. Ne la plej oportuna metodo, ĉu vi ne pensas?
Tamen ĉi tiu problemo povas esti solvita. Enigu Stop deklaron en la funkciokodon ĉe la necesaj punktoj, kaj vi povas ĉesigi la programekzekuton same kiel kiam vi uzas rompopunktojn.
Kiam VBA renkontas deklaron Stop , ĝi ĉesos programekzekuton kaj atendos vian agon. Kontrolu do la valorojn de la variablojpremu F5 por daŭrigi.
Aŭ premu F8 por plenumi la funkcion paŝo post paŝo kiel priskribite supre.
La Stop estas parto de la programo kaj tial estas ne forigita, kiel estas la kazo kun rompopunkto. Kiam vi finos sencimigi, forigu ĝin mem. Aŭ transformu ĝin en komenton antaŭante ĝin per unuopa citaĵo (').
Sensigado per la operatoro Debug.Print
Vi povas meti la Debug.Print en la funkciokodo en la ĝusta loko. Ĉi tio utilas por kontroli la valorojn de variabloj, kiuj cikle ŝanĝiĝas.
Vi povas vidi ekzemplon de la agado de Debug.Print sur la ekrankopio sube.
Deklaro Debug.Print i, vMax presas valorojn kaj iliajn ordajn nombrojn.
En la Tuja fenestro vi vidas du nombrojn (17 kaj 14) el la elektita gamo, kiu respondas al la starigu limojn kaj inter kiuj la maksimumo estos elektita. Ciferoj 1 kaj 2 signifas, ke la funkcio kompletigis 2 ciklojn en kiuj la nombroj estis elektitaj. Ni vidas la valorojn de la plej gravaj variabloj, kiel ni faris antaŭe kun MsgBox . Sed tio ne haltigis la funkcion.
Voki funkcion el proceduro
Vi povas voki uzantan difinitan funkcion ne el ĉelo en la laborfolio, sed el proceduro. En ĉi tiu kazo, ĉiuj eraroj montriĝos en la fenestro de Visual Basic Editor.
Jen kiel vi povas voki la uzant-difinitan funkcion GetMaxBerween deproceduro:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubMetu la kursoron ie ajn en la kodo kaj premu F5 . Se ne estas eraro en la funkcio, vi vidos ŝprucfenestron kun la kalkulrezulto.
En kazo de eraro, vi vidos respondan mesaĝon en la VBA-redaktilo. La kalkulo estos ĉesigita kaj la linio de kodo en kiu okazis la eraro estos reliefigita flava. Vi povas facile identigi kie kaj kial la eraro okazis.
Jen ĉio. Nun vi kreis vian propran aldonaĵon, aldonis ĝin al Excel kaj vi povas uzi la UDF en ĝi. Se vi volas uzi pli da UDF-oj, simple skribu la kodon en la aldonmodulo en la VBA-redaktilo kaj konservu ĝin.
Jen por hodiaŭ. Ni kovris malsamajn manierojn sencimigi kutimajn funkciojn kaj lernis kiel uzi ilin en via laborlibro. Ni vere esperas, ke vi trovos ĉi tiujn gvidliniojn utilaj. Se vi havas demandojn, skribu en la komentoj al ĉi tiu artikolo.