És possible que tingueu alguns problemes amb el vostre codi VBA, però com trobeu el problema? De vegades, el vostre codi VBA pot necessitar una mica de depuració. Continueu llegint per descobrir els quatre mètodes més comuns per depurar el codi VBA d'Excel:
-
Examinant el codi
-
Inserció de funcions MsgBox a diverses ubicacions del codi
-
Inserció de declaracions Debug.Print
-
Utilitzant les eines de depuració integrades d'Excel
Examinant el teu codi
Potser la tècnica de depuració més senzilla és simplement mirar de prop el vostre codi per veure si podeu trobar el problema. Aquest mètode, per descomptat, requereix coneixements i experiència. En altres paraules, has de saber què estàs fent. Si tens sort, l'error salta de seguida i et copeges el front i dius: "Oh!" Quan el dolor al front disminueix, podeu solucionar el problema.
Fixeu-vos en l'ús de les paraules "Si teniu sort". Això és perquè sovint descobreixes errors quan has estat treballant en el teu programa durant vuit hores seguides, són les 2 de la matinada i tens cafeïna i força de voluntat. En moments com aquest, teniu sort si fins i tot podeu veure el vostre codi, i molt menys trobar els errors. Per tant, no us sorpreneu si només examinar el vostre codi no és suficient per fer-vos trobar i eliminar tots els errors que conté.
Utilitzant la funció MsgBox
Un problema comú en molts programes implica que una o més variables no prenguin els valors que espereu. En aquests casos, supervisar les variables mentre s'executa el codi és una tècnica de depuració útil. Una manera de fer-ho és inserint funcions MsgBox temporals a la vostra rutina. Per exemple, si teniu una variable anomenada CellCount, podeu inserir la instrucció següent:
MsgBox CellCount
Quan executeu la rutina, la funció MsgBox mostra el valor de CellCount.
Sovint és útil mostrar els valors de dues o més variables al quadre de missatge. La instrucció següent mostra el valor actual de dues variables: LoopIndex (1) i CellCount (72), separades per un espai.
MsgBox LoopIndex & “ “ & CellCount
Observeu que les dues variables es combinen amb l'operador de concatenació (&) i inseriu un caràcter d'espai entre elles. En cas contrari, el quadre de missatge uneix els dos valors junts, fent-los semblar un únic valor. També podeu utilitzar la constant integrada, vbNewLine, en lloc del caràcter espai. vbNewLine insereix un salt de línia, que mostra el text en una línia nova. La declaració següent mostra tres variables, cadascuna en una línia separada:
Ús d'un quadre de missatge per mostrar el valor de tres variables.
MsgBox LoopIndex i vbNewLine i CellCount i vbNewLine i MyVal
Aquesta tècnica no es limita a controlar variables. Podeu utilitzar un quadre de missatge per mostrar tota mena d'informació útil mentre el vostre codi s'executa. Per exemple, si el codi passa per una sèrie de fulls, la instrucció següent mostra el nom i el tipus del full actiu:
MsgBox ActiveSheet.Name & “ “ & TypeName(ActiveSheet)
Si el vostre quadre de missatge mostra alguna cosa inesperada, premeu Ctrl+Pausa i veureu un quadre de diàleg que us indica que l'execució del codi s'ha interromput, teniu quatre opcions:
-
Feu clic al botó Continuar. El codi continua executant-se.
-
Feu clic al botó Finalitzar. S'atura l'execució.
-
Feu clic al botó Depurar. El VBE entra en mode de depuració.
-
Feu clic al botó Ajuda. Una pantalla d'ajuda us indica que heu premut Ctrl+Pausa. En altres paraules, no és gaire útil.
Si premeu Ctrl+Break, s'atura l'execució del vostre codi i us ofereix algunes opcions.
Si el vostre teclat no té una tecla de pausa, proveu de prémer Ctrl+Bloq de desplaçament.
No dubteu a utilitzar les funcions MsgBox amb freqüència quan depureu el codi. Només assegureu-vos d'eliminar-los després d'identificar i corregir el problema.
Inserció de declaracions Debug.Print
Com a alternativa a l'ús de funcions MsgBox al vostre codi, podeu inserir una o més instruccions Debug.Print temporals. Utilitzeu aquestes declaracions per imprimir el valor d'una o més variables a la finestra Immediata. Aquí teniu un exemple que mostra els valors de tres variables:
Debug.Print LoopIndex, CellCount, MyVal
Observeu que les variables es separen amb comes. Podeu mostrar tantes variables com vulgueu amb una sola instrucció Debug.Print.
Debug.Print envia la sortida a la finestra Immediata encara que aquesta finestra estigui amagada. Si la finestra Immediata de VBE no és visible, premeu Ctrl+G (o trieu Visualitza → Finestra immediata). Aquí hi ha alguns resultats a la finestra Immediata.
Una instrucció Debug.Print envia la sortida a la finestra Immediata.
A diferència de MsgBox, les instruccions Debug.Print no aturen el codi. Per tant, heu de vigilar la finestra Immediata per veure què passa.
Després d'haver depurat el codi, assegureu-vos d'eliminar totes les declaracions Debug.Print. Fins i tot grans empreses com Microsoft de tant en tant obliden eliminar les seves declaracions Debug.Print. En diverses versions anteriors d'Excel, cada vegada que s'obria el complement Analysis ToolPak, veuríeu diversos missatges estranys a la finestra Immediata. Aquest problema es va solucionar finalment a Excel 2007.
Utilitzant el depurador de VBA
Els dissenyadors d'Excel estan íntimament familiaritzats amb el concepte d'errors. En conseqüència, Excel inclou un conjunt d'eines de depuració que us poden ajudar a corregir problemes al vostre codi VBA.