1

Solucionando errores en macros grabadas usando el código de VBA

  1. Descarga el archivo de Financial Sample.xlsx desde el sitio de Microsoft

  2. Comience a grabar la macro.

  3. Como nombre coloque: análisis_financiero

5. Como método abreviado o shortcut indique Ctrl + Shift + Q

  1. Guarde la macro en el libro llamado: Este libro

7. Agregue como descripción: Macro para analizar el conjunto de datos descargados mes a mes de la plataforma de servicios financieros operativos de la compañía.

Shortcut.jpg
  1. Haga clic en Aceptar.

  2. Seleccione todos los datos que van desde la celda A1 hasta la celda P701

Seleccionando el rango de celdas.jpg
  1. Vaya a la ficha Insertar teniendo los datos seleccionados

  2. Haga clic sobre la herramienta llamada “Tablas dinámicas recomendadas” en el grupo “Tablas”

Tabla dinámica.jpg
  1. Seleccione la tabla dinámica que sugiere sumar el Profit por país.

Profit.jpg

13. Haga clic en Aceptar. Se habrá creado una nueva hoja de cálculo con la tabla dinámica seleccionada anteriormente.

  1. Seleccione toda la tabla dinámica.

  2. Vaya a la ficha Analizar.

  3. Haga clic sobre Gráfico dinámico

Gráfico dinámico.jpg
  1. Seleccione algún gráfico circular o más conocidos como de pastel
Gráfico de pastel.jpg
  1. Detenga la grabación de la macro.

  2. Guarde el documento de manera que quede habilitado para macros.

  3. Elimine la hoja de cálculo nueva

  4. Pruebe su macro ejecutándola con Ctrl+Shift+Q. Al momento de ejecutar su macro deberá visualizar un error:

Error al ejecutar la macro.jpg
  1. Haga clic sobre el botón llamado Depurar

23. Esto le llevará al entorno integrado de desarrollo de VBA

El error.jpg

Explicación: Este error se genera debido a que la grabación de la macro hace referencia de manera absoluta a la Hoja 2 que fue creada al momento de grabar la macro. Esto quiere decir que luego de borrar la Hoja 2 para probar la macro, el archivo generará otras hojas de cálculo con otro número de consecutivo, a saber: Hoja 3, Hoja 4, Hoja 5 y tantas como las vayamos borrando y ejecutando.

24. Para corregir el error: Ahora para corregir este problema es necesario crear un mecanismo dinámico para la asignación del nombre de la hoja en la que vamos a crear nuestra tabla dinámica y gráfico respectivamente.

a. Inserta la siguiente línea de código justo entre Sheets.Add y el error marcado en amarillo: Dim activeSheetName As String

Esta línea de código se llama: Declaración de una variable. Las variables en programación al igual que en las matemáticas son espacios dónde podemos almacenar valores que cambian, que son variables.

i. Dim es una palabra reservada que le indica a VBA que vamos a crear una variable.

ii. activeSheetName es el nombre de la variable, puedes colocar el nombre que quieras en lugar de este, es una buena práctica de programación el utilizar nombres representativos al valor que contendrá la variable.

iii. As es una palabra reservada para decirle a VBA que la variable que estas declarando va a ser de determinado tipo.

iv. String es el tipo de dato que vamos a usar para que la variable almacene solamente ese tipo de valor en particular. String quiere decir cadena de caracteres, en otras palabas un texto compuesto de varias letras.

b. Justo debajo de la declaración de variable que acabas de escribir debes realizar una asignación de variable. Es decir, debes darle un valor a la variable que acabas de declarar. Para esto escribe lo siguiente: activeSheetName = ActiveSheet.Name

i. activeSheetName es el nombre de la variable que declaraste arriba

ii. = es un operador de asignación que usamos para decirle a la variable que ahora va a tener un valor

iii. ActiveSheet.Name es el valor que vamos a asignarle a la variable.

  1. ActiveSheet hace referencia a la hoja de cálculo activa.

  2. Name hace referencia al nombre de dicha hoja de cálculo

iv. Es decir, estamos diciendole a VBA que le asigne a la variable activeSheetName asígnele el valor del nombre de la hoja de cálculo que se encuentre activa. Sabemos que es la correcta porque lo que se encuentra justo antes de la declaración de la variable es la instrucción Sheets.Add

c. Ahora corresponde realizar una reasignación del valor de la Hoja 2 por nuestra variable. Para hacer esto es necesario reemplazar todos los textos que digan “Hoja 2… por activeSheetName + “…

i. Explicación: Existe una acción en programación que se conoce como concatenación. La concatenación se refiere a la acción de juntar dos líneas de texto que puedan ser leídas como una sola.

ii. Dentro del código generado por la macro se utilizó el nombre específico de la Hoja 2 como el lugar exacto dónde se crearían tanto la tabla como el gráfico. Para hacer esto dinámico necesitamos concatenar nuestra variable activeSheetName al texto que hace referencia a dicha posición en lugar del texto Hoja 2. Veamos un ejemplo:

iii. Sheets(“Hoja2”).Select cambiará por: Sheets(activeSheetName).Select De manera que en este caso particular usaremos la variable en lugar del texto fijo para hacer dinámica la asignación del lugar dónde crearemos nuestra tabla y gráfico.

iv. En lugares dónde sea un poco más complejo usaremos la concatenación: ActiveChart.SetSourceData Source:=Range(“Hoja2!$A$3:$B$9”) pasará a ser: ActiveChart.SetSourceData Source:=Range(activeSheetName + “!$A$3:$B$9”)

d. Al finalizar, su código debería verse como a continuación:

Codigo corregido.jpg

e. Ahora podrá ejecutar la macro sin problemas cuantas veces sea necesario. Esta siempre creará una hoja nueva con dicha tabla dinámica y dicho gráfico generado a partir de esta.

  1. Como prueba ejecute su macro de manera que se creen tres hojas nuevas iguales con la tabla y el gráfico. Recuerde ejecutar la macro desde la hoja Sheet 1.

  2. Guarde su archivo habilitado para macros

Ahora que entiendes la dinámica de trabajo para solucionar errores manualmente dentro del código generado por las macros puedes solucionar otros errores similares. En este ejemplo es posible que encuentres un nuevo error al ejecutar la macro desde otra hoja que no sea Sheet1. Como solucionarías este error?

Ponlo en los comentarios!

Escribe tu comentario
+ 2
1

Microsoft is makes easier to own user web-based users of its Bing Rewards service to earn points and bing rewards redeem them for items and more with an update to its interface.