Taula de continguts
Com que ja sabeu com crear UDF (i, espero, també heu provat d'aplicar-los al vostre Excel), aprofundim una mica més i vegem què es pot fer en cas que la vostra funció definida per l'usuari no funcioni.
Per resoldre alguns problemes en crear una funció personalitzada, probablement haureu d'executar una depuració. Aleshores, podeu estar segur que la funció funciona correctament.
Explorarem les tècniques de depuració següents:
Quan creeu una funció personalitzada, sempre hi ha la possibilitat que cometreu un error. Les funcions personalitzades solen ser força complexes. I no sempre comencen a funcionar correctament de seguida. La fórmula pot tornar un resultat incorrecte o el #VALOR! error. A diferència de les funcions estàndard d'Excel, no veureu cap altre missatge.
Hi ha alguna manera de fer una funció personalitzada pas a pas per comprovar com funciona cadascuna de les seves declaracions? Segur! Per això s'utilitza la depuració.
Us oferiré diverses maneres de depurar la vostra funció personalitzada perquè pugueu triar la que us convingui.
Com a exemple, utilitzem la funció personalitzada. GetMaxBetween d'un dels nostres articles anteriors que calcula el nombre màxim de l'interval de valors especificat:
Funció GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Com a Integer ReDim arrNums(rngCells.Count) per a cada NumRange a rngCells vMax =NumRange Selecciona Case vMax Case MinNum + 0,01 a MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Cas Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Functions are the function argumentsrang de cel·les on s'escriuen números, així com el límit superior i inferior dels valors.
Coloqui la funció MsgBox en llocs importants
Per supervisar l'execució dels càlculs, podeu mostrar els valors de les variables més importants a la pantalla en els llocs adequats. Això es pot fer mitjançant quadres de diàleg emergents.
MsgBox és un quadre de diàleg que podeu utilitzar per mostrar algun tipus de missatge a l'usuari.
Sintaxi de MsgBox és semblant a altres funcions de VBA:
MsgBox(demanada [, botons] [, títol] [, fitxer d'ajuda, context])indicació és un argument obligatori. Conté el missatge que veieu al quadre de diàleg. També es pot utilitzar per mostrar els valors de variables individuals.
Tots els altres arguments són opcionals.
[ botons ]: determina quins botons i icones són es mostra al MsgBox . Per exemple, si fem servir l'opció vbOkOnly , només es mostrarà el botó D'acord . Encara que us perdeu aquest argument, aquest botó s'utilitza per defecte.
[ títol ]: aquí podeu especificar el títol del quadre de missatge.
Canviem de paraules per practicar i començar a depurar. Per mostrar elmissatge, afegiu la línia següent al codi de la funció definida per l'usuari GetMaxBetween abans de l'operador Case Else :
MsgBox vMax,, "Count -" & iAixí és el que obtindrem al resultat:
Funció GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) Per a cada NumRange a rngCells vMax = NumRange Seleccioneu Case vMax Case MinNum + 0,01 a MaxNum - 0,01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Cas més GetMaxBetween = 0 Finalitza Selecció NumRange següent GetMaxBetween = WorksheetFunction.Max(arrNums) Finalitza la funcióUsant la variable vMax al quadre de diàleg, veurem quins números compleixen els criteris de selecció, de manera que que podem seleccionar el més gran d'ells. Amb l'expressió "Compte -" & I a la barra de títol, indiquem quants números ja hem seleccionat per determinar el valor màxim. El comptador s'incrementarà amb cada valor nou.
Un cop tenim la nostra UDF establerta, apliquem la fórmula següent a l'interval de dates:
= GetMaxBetween (A1:A6,10,50)
Després del botó Enter premeu, veureu un missatge com a la captura de pantalla següent:
Aquest és el primer número de l'interval A1: A6 que compleix els criteris: superior a 10 però inferior superior a 50.
Després de fer clic a D'acord, apareix un segon missatge amb el número 14. La resta de números no coincideixen amb la selecció.criteris. Per tant, la funció surt i retorna el més gran dels dos valors, 17.
La funció MsgBox es pot utilitzar als llocs més importants de la funció personalitzada per controlar com els valors canvien les variables individuals. Els quadres de missatges poden ser molt útils quan teniu una funció gran i molts càlculs. En aquest cas, us serà fàcil determinar en quina part del codi es produeix l'error.
Determineu els punts d'aturada i feu-ho pas a pas
Podeu afegir punts d'interrupció al codi de la vostra funció on s'aturarà l'execució del codi. Així que podeu seguir el procés de càlcul pas a pas. En fer-ho, podeu veure com canvien els valors de les variables.
Per afegir un punt d'interrupció, col·loqueu el cursor a la línia que conté la instrucció on trieu fer una pausa. A continuació, feu clic amb el botó dret i seleccioneu Depuració -> Commuteu el punt d'interrupció o premeu F9 . També podeu fer clic al lloc desitjat a l'àrea grisa vertical a l'esquerra del codi de funció.
Apareixerà un cercle vermell, com podeu veure a la captura de pantalla següent. La línia de codi on s'aturarà el càlcul està ressaltada en vermell.
Ara, la finestra de l'editor VBA s'obrirà quan la funció s'està executant. El cursor es col·locarà en el punt on us heu aturat.
Si passeu el cursor del ratolí per sobre de qualsevol de les variables del codi de funció, podreu veure la seva actualvalor:
Premeu F5 per continuar el càlcul.
Nota. Després del punt d'interrupció, podeu començar a fer un seguiment del progrés dels càlculs pas a pas. Si premeu el botó F8, només s'executarà una línia següent del codi VBA. La línia groga amb una fletxa també es mourà a la darrera posició del codi executat.
Com que l'execució de la funció es torna a posar en pausa, podeu visualitzar els valors actuals de totes les variables de la funció utilitzant el cursor del ratolí.
La següent pressió de F8 ens farà un pas endavant. . Així que podeu prémer F8 fins al final del càlcul. O premeu F5 per continuar el càlcul fins al següent punt d'interrupció.
Si es produeix un error, el cursor s'aturarà al punt del codi on s'ha produït l'error. I també veureu un missatge d'error emergent. Això facilita la determinació de la causa del problema.
Els punts d'interrupció que especifiqueu s'aplicaran fins que tanqueu el fitxer. Quan el tornis a obrir, hauràs de tornar-los a configurar. No creieu que no és el mètode més convenient?
No obstant això, aquest problema es pot resoldre. Inseriu una instrucció Stop al codi de funció en els punts necessaris i podreu aturar l'execució del programa de la mateixa manera que quan feu servir punts d'interrupció.
Quan VBA troba una instrucció Stop , aturarà l'execució del programa i esperarà la vostra acció. Comproveu els valors de les variables, doncspremeu F5 per continuar.
O premeu F8 per complir la funció pas a pas com es descriu anteriorment.
La sentència Stop forma part del programa i, per tant, és no s'elimina, com és el cas d'un punt d'interrupció. Quan hàgiu acabat de depurar, traieu-lo vosaltres mateixos. O convertir-lo en un comentari precedant-lo amb una cometa simple (').
Depuració mitjançant l'operador Debug.Print
Podeu col·locar Debug.Print a el codi de funció al lloc correcte. Això és útil per comprovar els valors de les variables que canvien cíclicament.
Podeu veure un exemple del rendiment de Debug.Print a la captura de pantalla següent.
La declaració Debug.Print i, vMax imprimeix valors i els seus números ordinals.
A la finestra Immediata veureu dos números (17 i 14) de l'interval seleccionat, que correspon al establir límits i entre els quals se seleccionarà el màxim. Els dígits 1 i 2 signifiquen que la funció ha completat 2 cicles en què s'han seleccionat els números. Veiem els valors de les variables més importants, com hem fet anteriorment amb MsgBox . Però això no va aturar la funció.
Trucar una funció des d'un procediment
Podeu cridar una funció definida per l'usuari no des d'una cel·la del full de treball, sinó des d'un procediment. En aquest cas, tots els errors es mostraran a la finestra de l'Editor de Visual Basic.
A continuació es mostra com podeu cridar la funció definida per l'usuari GetMaxBerween des d'unprocediment:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubColoqui el cursor a qualsevol lloc del codi i premeu F5 . Si no hi ha cap error a la funció, veureu una finestra emergent amb el resultat del càlcul.
En cas d'error, veureu un missatge corresponent a l'editor VBA. El càlcul s'aturarà i la línia de codi en què s'ha produït l'error es ressaltarà en groc. Podeu identificar fàcilment on i per què s'ha produït l'error.
Això és tot. Ara heu creat el vostre propi complement, l'heu afegit a Excel i hi podeu utilitzar l'UDF. Si voleu utilitzar més UDF, només cal que escriviu el codi al mòdul de complements de l'editor VBA i deseu-lo.
Això és tot per avui. Hem tractat diferents maneres de depurar funcions personalitzades i hem après com utilitzar-les al vostre llibre de treball. Esperem que aquestes directrius us siguin útils. Si teniu cap pregunta, escriviu als comentaris d'aquest article.