Aprende a depurar funcións personalizadas en Excel

  • Comparte Isto
Michael Brown

Como xa sabe como crear UDF (e espero que tamén intentou aplicalos no seu Excel), profundicemos un pouco máis e vexamos que se pode facer no caso de que a súa función definida polo usuario non funcione.

Para resolver algúns problemas ao crear unha función personalizada, probablemente teña que executar unha depuración. Entón podes estar seguro de que a función funciona correctamente.

Exploraremos as seguintes técnicas de depuración:

    Cando creas unha función personalizada, sempre hai unha posibilidade que cometerás un erro. As funcións personalizadas adoitan ser bastante complexas. E non sempre comezan a funcionar correctamente inmediatamente. A fórmula pode devolver un resultado incorrecto ou o #VALOR! erro. A diferenza das funcións estándar de Excel, non verás outras mensaxes.

    Hai algunha maneira de pasar por unha función personalizada paso a paso para comprobar como funciona cada unha das súas instrucións? Claro! Para iso utilízase a depuración.

    Vouche ofrecer varias formas de depurar a túa función personalizada para que poidas escoller a que che funcione.

    Como exemplo, usamos a función personalizada. GetMaxBetween dun dos nosos artigos anteriores que calcula o número máximo no intervalo de valores especificado:

    Función GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Como Integer ReDim arrNums(rngCells.Count) para cada NumRange en rngCells vMax =NumRange Seleccione Case vMax Case MinNum + 0,01 To MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Functions are the

    intervalo de celas onde se escriben os números, así como o límite superior e inferior dos valores.

    Coloque a función MsgBox en lugares importantes

    Para supervisar a execución dos cálculos, pode mostrar os valores das variables máis importantes da pantalla nos lugares correctos. Isto pódese facer usando caixas de diálogo emerxentes.

    MsgBox é unha caixa de diálogo que podes usar para mostrar algún tipo de mensaxe ao usuario.

    Sintaxe de MsgBox é semellante a outras funcións de VBA:

    MsgBox(indicación [, botóns] [, título] [, ficheiro de axuda, contexto])

    indicación é un argumento obrigatorio. Contén a mensaxe que ves no cadro de diálogo. Tamén se pode usar para mostrar os valores de variables individuais.

    Todos os demais argumentos son opcionais.

    [ botóns ]: determina que botóns e iconas son aparece no MsgBox . Por exemplo, se usamos a opción vbOkOnly , só se mostrará o botón Aceptar . Aínda que perdeches este argumento, este botón úsase por defecto.

    [ título ]: aquí podes especificar o título da caixa de mensaxes.

    Cambiamos de palabras para practicar e comezar a depurar. Para mostrar omensaxe, engada a seguinte liña ao código da función GetMaxBetween definida polo usuario antes do operador Case Else :

    MsgBox vMax,, "Count -" & i

    Este é o que obteremos no resultado:

    Función GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) Para cada NumRange en rngCells vMax = NumRange Seleccione Case vMax Case MinNum + 0,01 To MaxNum - 0,01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Caso Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function

    Utilizando a variable vMax no cadro de diálogo, veremos que números cumpren os criterios de selección, polo que que podemos seleccionar o maior deles. Coa expresión "Contar -" & I na barra de título, indicamos cantos números xa seleccionamos para determinar o valor máximo. O contador aumentarase con cada valor novo.

    Unha vez que teñamos definido o noso UDF, aplicamos a fórmula seguinte ao intervalo de datas:

    = GetMaxBetween (A1:A6,10,50)

    Despois do botón Intro se preme, verá unha mensaxe como na seguinte captura de pantalla:

    Este é o primeiro número do rango A1: A6 que cumpre os criterios: maior que 10 pero menor que 50.

    Despois de facer clic en Aceptar, aparece unha segunda mensaxe co número 14. O resto dos números non coinciden coa seleccióncriterios. Polo tanto, a función sae e devolve o maior dos dous valores, 17.

    A función MsgBox pódese usar nos lugares máis importantes da súa función personalizada para controlar como os valores cambio de variables individuais. As caixas de mensaxes poden ser moi útiles cando tes unha función grande e moitos cálculos. Neste caso, será doado determinar en que parte do código se produce o erro.

    Determine puntos de parada e realice paso a paso

    Pode engadir puntos de interrupción ao código de a súa función onde se deterá a execución do código. Así podes seguir o proceso de cálculo paso a paso. Ao facelo, podes ver como cambian os valores das variables.

    Para engadir un punto de interrupción, coloque o cursor na liña que contén a instrución na que escolle facer unha pausa. A continuación, fai clic co botón dereito e selecciona Depurar -> Alterna o punto de interrupción ou simplemente preme F9 . Tamén podes facer clic no lugar desexado na zona gris vertical á esquerda do código de función.

    Aparecerá un círculo vermello, como podes ver na captura de pantalla que aparece a continuación. A liña de código onde se deterá o cálculo está resaltada en vermello.

    Agora, a xanela do editor de VBA abrirase cando a función estea en execución. O cursor situarase no punto onde se detivo.

    Se pasa o cursor do rato sobre calquera das variables do código da función, poderás ver a súa actualvalor:

    Preme F5 para continuar co cálculo.

    Nota. Despois do punto de interrupción, pode comezar a seguir o progreso dos cálculos paso a paso. Se preme o botón F8, só se executará unha liña seguinte do código VBA. A liña amarela cunha frecha tamén se moverá á última posición do código executado.

    Dado que a execución da función está en pausa de novo, podes ver os valores actuais de todas as variables da función usando o cursor do rato.

    A próxima pulsación de F8 daranos un paso adiante. . Polo tanto, pode premer F8 ata o final do cálculo. Ou prema F5 para continuar o cálculo ata o seguinte punto de interrupción.

    Se se produce un erro, o cursor deterase no punto do código onde se produciu o erro. E tamén verá unha mensaxe de erro emerxente. Isto facilita a determinación da causa do problema.

    Os puntos de interrupción que especifique aplicaranse ata que peche o ficheiro. Cando o volvas abrir, terás que configuralos de novo. Non cres que non é o método máis conveniente?

    Non obstante, este problema pódese solucionar. Insira unha instrución Stop no código da función nos puntos necesarios e poderá deter a execución do programa do mesmo xeito que cando se usan puntos de interrupción.

    Cando VBA atopa unha instrución Stop , parará a execución do programa e agardará pola súa acción. Comprobe os valores das variables, entónprema F5 para continuar.

    Ou prema F8 para cumprir a función paso a paso como se describe anteriormente.

    A instrución Stop forma parte do programa e, polo tanto, é non se elimina, como é o caso dun punto de interrupción. Cando remates a depuración, elimínao ti mesmo. Ou convérteo nun comentario precedíndoo cunha comiña simple (').

    Depuración mediante o operador Debug.Print

    Pode colocar o Debug.Print en o código da función no lugar correcto. Isto é útil para comprobar os valores das variables que cambian cíclicamente.

    Podes ver un exemplo do rendemento de Debug.Print na seguinte captura de pantalla.

    Statement Debug.Print i, vMax imprime valores e os seus números ordinais.

    Na xanela Inmediato ves dous números (17 e 14) do intervalo seleccionado, que corresponde ao establecer límites e entre os que se seleccionará o máximo. Os díxitos 1 e 2 indican que a función completou 2 ciclos nos que se seleccionaron os números. Vemos os valores das variables máis importantes, como fixemos anteriormente con MsgBox . Pero isto non detivo a función.

    Chamada a unha función desde un procedemento

    Podes chamar a unha función definida polo usuario non desde unha cela da folla de traballo, senón desde un procedemento. Neste caso, todos os erros mostraranse na xanela do Editor de Visual Basic.

    Así é como pode chamar a función definida polo usuario GetMaxBerween desde unprocedemento:

    Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End Sub

    Sitúe o cursor en calquera lugar do código e prema F5 . Se non hai ningún erro na función, verá unha ventá emerxente co resultado do cálculo.

    En caso de producirse un erro, verá unha mensaxe correspondente no editor VBA. Pararase o cálculo e resaltarase en amarelo a liña de código na que se produciu o erro. Podes identificar facilmente onde e por que se produciu o erro.

    Isto é todo. Agora creaches o teu propio complemento, engadiuno a Excel e podes usar o UDF nel. Se queres usar máis UDF, só tes que escribir o código no módulo de complemento do editor VBA e gárdao.

    Isto é todo por hoxe. Cubrimos diferentes formas de depurar funcións personalizadas e aprendemos a usalas no teu libro de traballo. Agardamos que che resulten útiles estas directrices. Se tes algunha dúbida, escribe nos comentarios deste artigo.

    Michael Brown é un entusiasta da tecnoloxía dedicada á súa paixón por simplificar procesos complexos mediante ferramentas de software. Con máis dunha década de experiencia na industria tecnolóxica, perfeccionou as súas habilidades en Microsoft Excel e Outlook, así como en Follas de cálculo e Documentos de Google. O blog de Michael está dedicado a compartir o seu coñecemento e experiencia con outros, proporcionando consellos e titoriais fáciles de seguir para mellorar a produtividade e a eficiencia. Tanto se es un profesional experimentado como un principiante, o blog de Michael ofrece valiosas ideas e consellos prácticos para sacar o máximo proveito destas ferramentas de software esenciais.