INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

A mi perra Laika…

2

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Contenido ¿QUÉ ES UNA MACRO? ........................................................................................................................................................... 4 NUESTRA PRIMER MACRO: “HOLA MUNDO” ......................................................................................................................... 6 ANALIZANDO EL CÓDIGO: “HOLA MUNDO” ........................................................................................................................... 8 SUMANDO CON MACROS ....................................................................................................................................................... 9 ANALIZANDO EL CÓDIGO: “SUMA”....................................................................................................................................... 10 EL OBJETO “RANGE”.............................................................................................................................................................. 10 COPIAR, CORTAR Y PEGAR CON MACROS............................................................................................................................. 11 SENTENCIA “IF” ..................................................................................................................................................................... 13 EL BUCLE “FOR”..................................................................................................................................................................... 15 EL BUCLE “DO WHILE”........................................................................................................................................................... 16 DIMENSIONAR UNA VARIABLE.............................................................................................................................................. 19 EJERCICIO PRÁCTICO ............................................................................................................................................................. 20 INPUTBOX ............................................................................................................................................................................. 24 LA PRIMERA CELDA VACÍA .................................................................................................................................................... 27 LA INSTRUCCIÓN SELECT CASE.............................................................................................................................................. 31 MANEJO DE ERRORES ........................................................................................................................................................... 34 FORMULARIOS ...................................................................................................................................................................... 37 EJERCICIOS DE APRENDIZAJE ................................................................................................................................................ 46

3

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

¿QUÉ ES UNA MACRO? Una macro es un conjunto de comandos que se almacena en un lugar especial de Excel de manera que están siempre disponibles cuando los necesites ejecutar. Por ejemplo, si todas las mañanas creas un reporte de ventas y en ese reporte siempre das el mismo formato a los textos, se podría crear una macro para que lo haga automáticamente por ti. Las macros se utilizan principalmente para eliminar la necesidad de repetir los pasos de aquellas tareas que realizas una y otra vez. GRIBOTIPS: Hablando mal y pronto…una macro hace que aquellas tareas que haces siempre en Excel una y otra vez, ahora se hagan solas apretando un botón mientras pensas que hacés el finde.

PREPARAR EL LIBRO DE EXCEL PARA TRABAJAR CON MACROS Lo primero que debes hacer en Excel, para empezar a grabar una macro es habilitar la pestaña Programador. Por lo cual ir a “Archivo” – “Opciones”

4

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Luego ir a “Personalizar cinta de “Opciones” y activar “Desarrollador”

Por último, guardar el libro de Excel como “libro de Excel habilitado para macros”, extensión .xlsm. Para esto se debe ir a “Archivo” - “Guardar Como” y en “Tipo” seleccionar “Libro de Excel habilitado para macros”

Ahora sí, ya podemos empezar a trabajar sobre nuestro libro y programar nuestras macros.

GRIBOTIPS: Ojo! Mirá que si no haces esto, nada…pero nada de lo que hagas va a funcionar después. Yo te avisé!!! 5

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

NUESTRA PRIMER MACRO: “HOLA MUNDO” Vamos a crear nuestra primer Macro denominada “Hola Mundo” para lo cual vamos a la pestaña “Desarrollador” – “Macros”

Nombramos la macro como “holamundo” y hacemos click en “Crear”

Se va a desplegar la ventana de editor de Visual Basic donde podremos comenzar a trabajar en el “Módulo 1” y realizar nuestra macro.

6

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

En el mismo escribimos el siguiente código: Sub holamundo() Hoja1.Cells(1, 1) = "Hola Mundo" End Sub

Luego en la pestaña “Desarrollador” hacemos click en “Insertar” – “Control de Formularios” – “Boton” e insertamos un botón sobre la Hoja 1 del Excel.

Finalmente damos botón derecho sobre el “Boton” que generamos y seleccionamos “Asignar macro” para finalmente asignarle “holamundo” 7

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Al ejecutar el botón que hemos creador podemos observar que en la celda A1 se crea el texto “Hola Mundo” tal como se muestra en la figura.

ANALIZANDO EL CÓDIGO: “HOLA MUNDO” Recordemos el código que utilizamos Sub holamundo() Hoja1.Cells(1, 1) = "Hola Mundo" End Sub Sub() se refiere a Subrutina, en este caso refiere a la rutina de la macro que hemos creado llamada “holamundo”. Al ejecutar la subrutina se ejecuta todo código que este posterior al mismo. End Sub se refiere al fin de la rutina. Todo el código de la rutina se ejecuta hasta que se llega a esta instancia. Hoja1 se refiere a que la macro se ejecutará en la Hoja1 de nuestro Excel. Cells(1,1) se refiere a que la macro se ejecutará en la celda coincidente con la primer fila y la primer columna. “Hola Mundo” es el texto que contendrá nuestra celda, todo texto debe ser colocado entre comillas.

8

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

GRIBOTIPS: Si se te complica entenderlo, hacela corta… la macro ejecuta todo lo que está escrito entre Sub() y End Sub.

SUMANDO CON MACROS En este caso realizaremos una macro que nos permitirá sumar dos valores ingresados en la celda “A1” y “A2”, expresando el resultado en la celda “A3”. Empezamos creando una macro a la cual llamamos “suma”. Recuerde que la misma se genera desde la pestaña “Desarrollador” – “Macros”, tal como se vio en el ejemplo anterior. Una vez que ingresamos en el editor de Visual Basic escribimos el siguiente código

Sub suma() Hoja1.Cells(3, 1) = Hoja1.Cells(1, 1) + Hoja1.Cells(2, 1) End Sub

Por último, creamos un botón y asociamos la macro a este Botón, Recordemos…

Finalmente ingresamos el número 4 en la celda “A1” y el valor 3 en la celda “A2” y damos click al Botón.

9

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

ANALIZANDO EL CÓDIGO: “SUMA” En este caso el código es bastante intuitivo, recordemos que cuando usamos la expresión Cells(), debemos completar la celda referida, de la siguiente manera: Cells(fila, columna) Por lo que si analizamos el código: Hoja1.Cells(3, 1) = Hoja1.Cells(1, 1) + Hoja1.Cells(2, 1) Vemos que la celda A3 (fila 3 y columna 1) se expresará como el resultado del valor en la celda A1 (fila 1 y columna 1) sumado al valor de la celda A2 (fila 2 y columna 1).

EL OBJETO “RANGE” Asignar celdas mediante el método de filas y columnas puede resultar muy tedioso en algunos casos o a veces inviable cuando se quiere referir a múltiples celdas. Para estos casos es muy útil conocer el objeto “Range”. El mismo nos permite referir directamente a una celda o a un rango de celdas, por su ubicación alfanumérica. Veamos el mismo ejemplo que vimos anteriormente pero con el objeto “Range”. Sub suma() Hoja1.Range("A3") = Hoja1.Range("A1") + Hoja1.Range("A2") End Sub

10

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Podemos observar que al igual que en el ejemplo anterior, se suman los valores de las celdas “A1” y “A2” en la celda “A3” se obtiene el resultado. Podemos ver claramente la diferencia entre la nomenclatura anterior y la nueva nomenclatura.

Hoja1.Cells(1, 1)

Hoja1.Range("A1")

GRIBOTIPS: ¡Te lo digo por experiencia… Acordate de poner comillas en el rango porque vas a estar 4 hs tratando de entender por qué no anda!!!

En el caso que quisiéramos referirnos a un rango de celdas, debemos expresarlo mediante un separador “:” Por ejemplo si quisiéramos referirnos al rango A1:A3 deberíamos escribir Hoja1.Range("A1:A3")

COPIAR, CORTAR Y PEGAR CON MACROS Muchas veces nos encontramos en situaciones donde debemos copiar, cortar y pegar valores en forma repetitiva en nuestro Excel, esto se vuelve muy tedioso y suele ser propenso a cometer errores. Una manera práctica de resolver este problema es usando las siguientes expresiones: .Copy Copia las celdas .PasteSpecial xlPasteall Pega las celdas copiadas .Cut Corta las celdas

Armemos nuestro Excel con el siguiente código: Sub Copiar() Hoja1.Range("A1:A3").Copy 11

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Hoja1.Range("B1").PasteSpecial xlPasteAll Application.CutCopyMode = False End Sub

Analizando el código podemos ver lo siguiente: Sub Copiar() Macro llamada “Copiar” (debemos crearla tal como se vio anteriormente) Hoja1.Range("A1:A3").Copy Copia el rango de celdas A1:A3 Hoja1.Range("B1").PasteSpecial xlPasteAll Pega todo el contenido en la celda B1 Application.CutCopyMode=False Se utiliza para indicar a la macro que terminó la acción de copiar/pegar End Sub Termina la Macro Si ejecutamos la macro podemos ver el resultado

Si en vez de “copiar” quisiéramos “cortar”, deberíamos insertar el siguiente código

Hoja1.Range("A1:A3").Cut Hoja1.Range("B1").Select ActiveSheet.Paste End Sub Podemos observar que para este caso se cambió “Copy” (copiar) por “Cut” (Cortar). Si analizamos el código vemos que se corta el rango “A1:A3”, luego selecciona la celda “B1” y mediante la expresión ActiveSheet.Paste se pega el rango cortado en la celda “B1”.

12

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

GRIBOTIPS: Siempre que cortes acordate de utilizar la expresión “ActiveSheet.Paste” si en vez de eso utilizamos “Hoja1.Range(“B1”).Paste” acordate que no va a funcionar nada…

SENTENCIA “IF” Uno de los elementos más frecuentes en VBA es usar la sentencia IF el cual expresa un condicional. El mismo nos permite usar condiciones durante nuestro código ejecutando ciertas partes de él en función de alguna prueba lógica. La sintaxis a utilizar es la siguiente: If « prueba lógica » then Código que se ejecuta cuando la instrucción es verdadera Else Código que se ejecuta cuando la instrucción es falsa End if Veamos el siguiente ejemplo: Creamos una macro llamada “condicional” y escribimos el siguiente código Sub condicional() If Hoja1.Range("A1").Value > Hoja1.Range("A2").Value Then Hoja1.Range("A3") = "Verdadero" Else Hoja1.Range("A3") = "Falso" End If End Sub 13

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Si Ahora cargamos los valores 3 en celda “A1” y 2 en celda “A2” y ejecutamos la macro, podemos observar que la macro se preguntará si el valor en “A1” es mayor al valor en “A2”. De ser cierto nos arrojará la palabra “Verdadero” en la celda “A3”.

Si en cambio ahora reemplazamos el valor en la celda “A2” por un 4, la macro ejecutará el código especificado luego de la sentencia “Else” (condición falsa) por lo que la celda “A3” arrojará la palabra “Falso”.

GRIBOTIPS: Siempre recordá terminar el “if” con la frase “end if”. Es un error muy frecuente y siempre te puede traer mas de un dolor de cabeza

14

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

EL BUCLE “FOR” El bucle “FOR” consiste en la repetición de código mediante instrucciones durante un número determinado de veces. La sintaxis utilizada es la siguiente: For « inicia la variable » To « límite de la variable » « Conjunto de instrucciones que se repetirán » Next «incrementar variable»

Inicia la variable: Dado que el FOR repite instrucciones un número determinado de veces, se debe inicializar una variable la cual contará cada repetición. Generalmente se asigna la variable “i”, aunque puede utilizarse cualquier letra o palabra para definir una variable. A modo de ejemplo, si utilizamos la expresión “i = 1” la variable “i” se inicia en el valor 1. Límite de la variable: Indicará hasta que valor se repetirán las instrucciones que se ejecuten. De esta manera si deseamos hacer un bucle que vaya de 1 hasta 5, debemos escribir For i = 1 To 5. Incrementar variable: En este caso lo que ocurre es que una vez finalizada la instrucción, se incrementará la variable “i” en una unidad mediante la instrucción “Next i”

Veamos un ejemplo del bucle FOR:

Sub Forejemplo() For i = 1 To 5 MsgBox ( ”repetición ” & i) Next i End Sub Si damos click a “ejecutar”, veremos lo siguiente

15

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Cada vez que demos “Aceptar”, podremos observar que la repetición adopta el valor de la variable “i” incrementándose en una unidad. En este caso la instrucción MsgBox ( ”repetición ” & i) se ejecuta 5 veces. Mostrando un cuadro de diálogo con la palabra “repetición” y el valor de la variable i. Si en vez de escribir To 5 hubiésemos escrito To 8, la instrucción se hubiese repetido 8 veces.

GRIBOTIPS: fíjate que en este caso el “&” lo que hace es unir texto (entre comillas) y la variable i (sin comillas). Siempre que queramos expresar el valor de una variable en un texto, debemos colocar la variable sin comillas, dado que caso contrario solo nos mostrará la letra i.

EL BUCLE “DO WHILE” El bucle “DO WHILE” consiste en la repetición de código mediante instrucciones durante un número no determinado de veces. En el bucle “FOR” se conoce con exactitud la cantidad de veces que se ejecuta una instrucción. En este caso no conocemos cuantas veces se repetirá una acción, sino que la instrucción se repetirá hasta el momento donde se cumpla alguna condición. 16

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

La sintaxis utilizada es la siguiente: Do While « Condición » « Conjunto de instrucciones que se repetirán hasta cumplir la condición » Loop «Repite el bucle hasta alcanzar la condición»

Veamos a continuación un ejemplo simple:

Al ejecutar esta macro, podemos observar que declaramos una variable llamada “Suma”. Declarar una variable se realiza mediante la expresión Dim (lo veremos mas adelante). En este caso la variable “suma” se incrementa en una unidad mientras que cumpla la condición de ser menor de 10. Cuando la condición se rompe, termina el bucle o “Loop” y se ejecuta un MsgBox con el valor de la variable “suma”.

Si quisiéramos ver con más precisión qué está ocurriendo en el código, podríamos agregar la siguiente línea de código:

17

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Hoja1.Range("A" & suma) = suma Para entender este código debemos recordar lo visto anteriormente. El objeto “Range()” nos índica una celda específica, en este caso la expresión (“A” & suma) nos indica que se trata de la celda “A” con el número de la variable “suma” Por ejemplo, cuando “suma” es igual a 1 nos queda: Hoja1.Range("A1") = 1 Cuando “suma” es igual a 2... Hoja2.Range("A2") = 2 Y así sucesivamente. Si ejecutamos el código podemos ver el siguiente resultado:

18

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Podemos observar como el bucle “While” se repite hasta que la condición deja de cumplirse, y además podemos observar como la variable “suma” se incrementa en una unidad por cada vez que se repite el “Loop”.

DIMENSIONAR UNA VARIABLE Cada vez que queramos usar una variable para almacenar algún dato, debemos declararla (dimensionarla) previamente. Para esto debemos usar la expresión “Dim” y “as”. La primera referenciará al nombre de la variable y la segunda al tipo de variable. Ejemplo: Dim « Nombre de la variable » as « Tipo de variable » Por ejemplo si quisieramos declarar la variable “Suma” deberíamos expresarla de la siguiente manera Dim suma as Integer En este caso declaramos la variable suma como un entero, esto significa que en la variable suma , solo almacenaremos numeros enteros. Los tipos de variables pueden ser : Integer: Almacena números enteros Double: Las variables del tipo Double pueden almacenar números de gran cantidad de decimales (por ejemplo el número “pi”) String: Almacenan cadenas de texto, por ejemplo Boolean: Son variables del tipo lógico, o de lógica “booleana” en las cuales se pueden asignar solo dos valores True (verdadero) y False (falso).

Veamos algunos ejemplos: Dim texto As String texto = “Gribotips”

Dim pi As Double pi = 3.14159265359

Dim terminar As Boolean terminar = True

19

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

EJERCICIO PRÁCTICO A modo de reforzar los contenidos vistos hasta aquí, realizaremos el siguiente ejercicio práctico. Debemos realizar una macro en la cual se ingrese un valor entero en la celda “A1” y un valor entero en la celda “A1”. Luego debemos accionar un botón llamado “Calcular”. Si el valor de la celda “A1” es mayor que el valor de la celda “A2” se debe ejecutar un Msgbox con el texto “El valor de la celda A1 es mayor al valor de la celda A2”. Caso contrario deberá ejecutarse otro Msgbox con el texto “El valor de la celda A1 NO es mayor al valor de la celda A2”. ¿Complicado? … PARA NADA!!! Lo primero que hacemos es crear un nuevo libro de Excel denominado “Ejercicio practico” y prepararlo para trabajar con Macros.

Una vez creado damos click en “Guardar como” y en la solapa desplegable llamada “Tipo:”, seleccionamos “Libro de Excel habilitado para macros”. Listo! Ya tenemos nuestro Libro para realizar Macros.

El siguiente paso es crear la Macro por lo que iremos a la pestaña “Desarrollador” y seleccionaremos “Macros”. Como podemos observar se abre un cuadro de diálogo donde crearemos nuestra macro llamada “Ejercicio_practico”

20

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

GRIBOTIPS: fíjate escribí Ejercicio_practico, con guion bajo. A la hora de nombrar macros no podemos usar algunos caracteres, entre ellos el “espacio” por lo que usamos guión bajo. ¡Atento a esto porque te vas a volver loco si no lo sabes!!!

Lo primero que vamos a hacer es dimensionar dos variables (valor1, valor2) como enteros y luego les asignamos los valores que ingresemos manualmente en las celdas “A1” y “A2”.

Sub Ejercicio_practico() Dim valor1 As Integer Dim valor2 As Integer

valor1 = Hoja1.Range("A1") valor2 = Hoja1.Range("A2")

End Sub

21

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Finalmente agregaremos la condición “if” donde preguntaremos si el valor de la celda “A1” es mayor al valor de la celda “A2”.

Sub Ejercicio_practico()

Dim valor1 As Integer Dim valor2 As Integer

valor1 = Hoja1.Range("A1") valor2 = Hoja1.Range("A2")

If (valor1 > valor2) Then

MsgBox ("El valor de la celda A1 es mayor al valor de la celda A2") Else MsgBox ("El valor de la celda A1 NO es mayor al valor de la celda A2")

End If

End Sub Para finalizar crearemos un botón para ejecutar la macro y la asignaremos a la Macro “Ejercicio_practico”

22

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Ahora sí, para ejecutar la macro cargamos valores en la celda “A1” y “A2” y obtenemos el resultado esperado

23

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

INPUTBOX El inputbox consiste en una ventana emergente que permite el ingreso de información a una planilla Excel. A diferencia del MsgBox, Un inputbox permite al usuario interactuar con dicha ventana. Veamos un ejemplo:

En este caso el código utilizado es el siguiente:

Sub ingresedato()

Dim variable As String variable = InputBox("Ingrese su nombre")

End Sub

Podemos observar que simplemente declaramos una variable como String (cadena de texto) y luego asignamos la misma a un inputbox definiendo entre paréntesis el texto a mostrar, en este caso “Ingrese su nombre”.

El inputbox se puede personalizar a gusto del usuario teniendo en cuenta los siguientes parámetros:

Prompt: Es el texto que se mostrará en la ventana emergente. Es el único valor obligatorio Title: Es el título de la ventana emergente que aparecerá en la parte superior.

Default: Es el texto que se mostrará en la caja de texto

24

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

XPos: Especifica la posición X del cuadro de diálogo con respecto a la esquina superior izquierda de la pantalla, en puntos. YPos: Especifica la posición Y del cuadro de diálogo con respecto a la esquina superior izquierda de la pantalla, en puntos. HelpFile: Nombre del archivo de Ayuda para este cuadro de entrada. Si los argumentos HelpFile y HelpContextID están presentes, aparecerá un botón Ayuda en el cuadro de diálogo. Context: La identificación de contexto del tema de Ayuda en HelpFile. Ahora utilicemos lo aprendido para darle detalles y un mejor formato a nuestro inputbox. Siguiendo con el ejemplo anterior agreguemos estas líneas de código:

Sub ingresedato()

Dim varibale As String variable = InputBox("Ingrese su nombre", "Ejemplo de inputbox", "Ingrese su nombre aquí")

End Sub

Al ejecutar esta macro observamos el siguiente resultado:

Se observa claramente que incorporamos el título en la parte superior izquierda y además se incorpora el texto “Default” con la leyenda “Ingrese su nombre aquí”. Para finalizar podríamos guardar el dato ingresado mediante el Inputbox en una celda de Excel. De esta manera nos queda guardado el registro para utilizarlo más adelante como quisiéramos. A modo de ejemplo ingresaremos un dato en el Inputbox y lo guardaremos en la celda “A1” para lo cual agregaremos la siguiente línea al código que ya escribimos. 25

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Sub ingresedato()

Dim varibale As String variable = InputBox("Ingrese su nombre", "Ejemplo de inputbox", "Ingrese su nombre aquí") Hoja1.range("A1") = variable

End Sub

De esta manera, cada vez que ingresemos un dato en el input box, se cargará en la celda A1.

GRIBOTIPS: En este caso, cada vez que ingresemos un dato, se reescribirá en la celda A1. Perdiendo el dato que teníamos guardado previamente. Si quisiéramos guardar más datos debemos recurrir a otras celdas.

26

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

LA PRIMERA CELDA VACÍA Muchas veces nos vamos a encontrar con la necesidad de insertar un dato en la primera celda vacía que encontremos en una lista de datos. ¿Qué queremos decir con esto? Supongamos que cargamos una lista de países, cada vez que cargamos un país se debe ir guardando en una celda contigua. Por ejemplo, supongamos que tenemos esta lista de países:

Si quisiéramos agregar un país, por ejemplo Brasil, deberíamos agregarlo en la celda “A6”. Supongamos que queremos ingresar “Brasil” mediante una macro, podríamos simplemente escribir: Hoja1.range("A6") = "Brasil"

Hacer esto resulta poco práctico, dado que por cada país que quisiéramos ingresar deberíamos generar una línea de código, por ejemplo:

Hoja1.range("A7") = "Japon" Hoja1.range("A8") = "Tailandia" Hoja1.range("A9") = "Costa Rica"

Una manera sencilla de resolver este problema es realizar una macro que se dirija directamente a la primera celda vacía de la lista y permita ingresar el dato (país). Para lo cual crearemos una macro denominada “primera_celda” e ingresaremos el siguiente código:

27

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Sub primera_celda() Hoja1.Range("A1").Select Do While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select Loop End Sub

Analicemos este código:

Hoja1.Range("A1").Select Se posiciona en la celda “A1” Do While ActiveCell <> Empty Ingresa en el bucle Do While (“hacer hasta”), luego aparecer un operador nuevo “<>” el cual significa “distinto”, y finalmente Empty que significa “vacío”. Si traducimos esta línea de código, nos queda “Hacer hasta que sea distinto de vacío” ActiveCell.Offset(1, 0).Select este comando mueve la celda activa hacia donde nosotros querramos, el parentesis índica la cantidad de celdas de desplazamiento siguiendo el siguiente criterio (desp. Sobre columna , desp. Sobre fila). En este caso si escribimos (1,0) nos desplazamos una celda hacia abajo, si escribimos (1,1) nos desplazaríamos una celda hacia abajo y una celda hacia la derecha. Loop termina el bucle y vuelve a la línea del “Do While” para volver a evaluar la condición.

Resumiendo, el código se sitúa en la celda “A1” , en nuestro ejemplo en el título de la lista (Países). Luego se pregunta si la celda es distinto de vacío, si esto ocurre se desplaza una celda hacia abajo hasta encontrar una celda que no esté vacía. Una vez que la encuentra se queda allí

28

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Una vez que nos posicionamos en la última celda vacía nos queda crear una línea de código que nos permita ingresar un nuevo país. Para eso vamos a recurrir al “InputBox” que vimos anteriormente.

Finalicemos el ejercicio definiendo una variable de texto denominada “pais” y le asignaremos un InputBox. Finalmente nos queda:

Sub primera_celda() Dim pais As String Hoja1.Range("A1").Select Do While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select Loop pais = InputBox("Ingrese un pais") ActiveCell.Value = pais End Sub

Por último, crearemos un botón y le asignaremos la macro primera_celda.

Si pulsamos el botón, podemos observar que se ejecuta la macro, se dirige a la primera celda vacía y nos solicita el ingreso de un país. Esta tarea podemos repetirla infinitas veces, ingresando países en la primera celda vacía que encuentre.

29

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

30

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

LA INSTRUCCIÓN SELECT CASE Este tipo de instrucción resulta útil cuando ya conocemos los posibles resultados de una variable y necesitamos asignarle una instrucción cuando eso ocurra. ¿No entendiste nada? No te preocupes veamos primero la sintaxis:

Select Case « variable »

Case « valor de variable » instrucción para el valor de esa variable

Case « otro valor de la variable> instrucción para el valor de esa variable

Case Else instrucción para cuando no existen coincidencias

End Select

¿Seguís sin entender nada? No te preocupes, analicemos el siguiente ejemplo:

Sub selectcase()

Dim nota As Integer nota = InputBox("Ingrese nota") Select Case nota Case 1 To 3 MsgBox ("Reprobado") Case 4 To 6 MsgBox ("Aprobado") Case 7 To 10 31

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

MsgBox ("Promociona")

Case Else MsgBox ("Valor no válido") End Select

End Sub Analizando el código podemos observar que lo primero que se ejecuta es un InputBox en el cual ingresamos un valor entero y lo asignamos a la variable “nota”. Dim nota As Integer nota = InputBox("Ingrese nota") Una vez que ingresamos la variable nota, realizamos un Select Case de la variable Select Case nota Si la nota ingresada se encuentra entre el valor 1 y 3 se generará un mensaje que dice ”Reprobado”. Case 1 To 3 MsgBox ("Reprobado") Si la nota ingresada se encuentra entre el valor 4 y 6 se generará un mensaje que dice ”Aprobado”. Case 4 To 6 MsgBox ("Aprobado") Si la nota ingresada se encuentra entre el valor 7 y 10 se generará un mensaje que dice ”Promociona”. Case 7 To 10 MsgBox ("Promociona") En caso que se ingrese un valor entero que no esté comprendido en ningún caso se utiliza la expresión “Case Else” (Algo así como…”cualquier otro caso”) y se emite un mensaje diciendo “Valor no válido” Case Else MsgBox ("Valor no válido") End Select

GRIBOTIPS: Siempre conviene utilizar el “Case Else”. Hay que pensar que la gente se suele equivocar cuando ingresa algún valor y de esta manera evitamos que nuestro código se “cuelgue” …sí sí… hay que pensar en todo!!! 32

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Podemos observar que le asignamos un botón a la macro para poder ejecutarla. En la última imagen ingresamos el valor de nota “-6 “ por lo que obtuvimos la leyenda del “Valor no válido”. Si ingresamos una letra en vez de un número entero, podremos observar que se generará un error y el programa de “cuelga” .Mas adelante veremos cómo podemos manejar estos errores para evitar que el programa deje de funcionar. 33

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

MANEJO DE ERRORES No va a faltar oportunidad de encontrarnos en situaciones dónde al ejecutar una macro aparezca el siguiente mensaje:

Se trata de un error en la ejecución, un bucle infinito, un código mal realizado, un ingreso de datos no previsto, etc… El problema deriva en que, al ejecutarse un error, se “colgará” nuestra macro y probablemente tengamos que reiniciar nuestro Excel. Para poder manejar un error en forma segura existe la siguiente expresión: on error goto etiqueta “etiqueta” nos derivará a un nuevo código donde podremos manejar el error, servirá como un llamador que nos sacará del código defectuoso para ir al código que evitará que nuestro programa se “cuelgue”. Si en el ejemplo del “Select Case” visto anteriormente en vez de una nota ingresamos una letra, por ejemplo “b”, observaremos que se produce lo siguiente:

34

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Como la nota es una variable de número entero, espera que se ingrese un número. Al ingresar una letra, el programa no sabe que hacer y emitirá un error. Si damos click en “depurar”, nos llevará a la línea de código donde se encuentra nuestro error

Podemos observar que se resalta en amarillo la línea de código donde se produce nuestro error, siendo nuestro caso el inputbox de la variable “nota”, dado que le mismo esperaba un número entero. 35

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Para resolver este error vamos a utilizar la función on error goto etiqueta. Lo primero que vamos a hacer es agregar en el inicio del código la siguiente expresión On error goto sihayerror De esta manera le estamos diciendo a nuestro programa que cuando encuentre un error vaya a una línea de código (etiqueta) llamada “sihayerror” Luego al final del código ingresaremos lo siguiente sihayerror : MsgBox ("Se deben ingresar valores entre el 1 y el 10. Vuelva a intentarlo") De esta manera al detectar un error, saltará directamente a “sihayerror” y luego nos mostrará el MsgBox con la frase "Se deben ingresar valores entre el 1 y el 10. Vuelva a intentarlo". De esta manera nuestro código nos quedará como se muestra a continuación

Sub selectcase()

On Error GoTo sihayerror

Dim nota As Integer nota = InputBox("Ingrese nota") Select Case nota Case 1 To 3 MsgBox ("Reprobado") Case 4 To 6 MsgBox ("Aprobado") Case 7 To 10 MsgBox ("Promociona") Case Else MsgBox ("Valor no válido") End Select

sihayerror: MsgBox ("Se deben ingresar valores entre el 1 y el 10. Vuelva a intentarlo") 36

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

End Sub

GRIBOTIPS: Yo usé la etiqueta “sihayerror” pero podés usar el nombre que vos quieras!. Para ser ordenado siempre conviene definir el “On Error GoTo” al principio de nuestro código y ejecutar la “etiqueta” al final.

FORMULARIOS Anteriormente vimos la función “InputBox” el cual consiste en un cuadro de diálogo dónde nos permite ingresar un dato. Muchas veces nos vemos con la necesidad de personalizar estos cuadros de diálogo para realizarlos a medida de nuestras necesidades. Para poder realizar esto podemos recurrir a un formulario. Un formulario es un cuadro de dialogo que permite el ingreso de información de manera personalizada. Ejemplo de Formulario

37

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Para entender cómo funciona el formulario vamos a realizar el mismo formulario que tenemos en el ejemplo. Lo primero que vamos a hacer es ir a la pestaña “Desarrollador” y luego “Ver código”. Una vez allí vamos a “Insertar” y luego a UserForm.

Podemos observar que se genera un cuadro de diálogo en blanco con todas las herramientas necesarias para personalizar nuestro formulario

38

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Comencemos por darle forma a nuestro formulario, vamos a incorporar 3 TextBox, tal como se muestra en la figura

Podemos ubicar los cuadros de texto en la posición que queramos y darle el tamaño que necesitemos. El paso siguiente es ingresar los siguientes títulos o “etiquetas” con los nombres “VALOR 1” ; “VALOR 2” ; “VALOR 3”. Los ubicamos a la derecha de los cuadros de texto usando el ícono “etiqueta”.

39

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Por defecto nuestra “etiqueta” contiene la leyenda “Label1”. Para cambiar el texto del mismo debemos seleccionar la etiqueta e ir a las propiedades del mismo cambiando la variable “Caption”.

Realizamos lo mismo para el resto de las etiquetas quedando nuestro formulario de la siguiente manera

40

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Finalmente agregamos un Botón. Al cual también le cambiaremos su nombre a “CALCULAR” mediante la propiedad “Caption”.

Finalmente nuestro formulario nos quedará de la siguiente manera:

41

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Una vez que tengamos nuestro formulario, vamos a empezar a escribir nuestro código. En este caso vamos a ingresar 3 valores, y obtendremos el resultado de la suma en una celda. Lo primero que debemos hacer es determinar dónde vamos a escribir nuestro código, por lo cual debemos preguntarnos ¿Cuándo queremos que se ejecute nuestro código? En este caso la respuesta es bastante simple, el código se ejecutará cuando demos click a nuestro botón Calcular. Por lo cual vamos a nuestro formulario y hacemos doble click en el botón “CALCULAR”.

42

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Podemos observar que se nos abre el editor de Visual Basic con la leyenda “CommandButton1_Click()”. El mismo nos está indicando que todo el código que vayamos a escribir se ejecutará una vez que demos click al “CommandButton1”, en otras palabras, nuestro botón “CALCULAR”. En el mismo escribimos el siguiente código Private Sub CommandButton1_Click()

Dim Suma As Double

Hoja1.Range("A1") = TextBox1.Value Hoja1.Range("B1") = TextBox2.Value Hoja1.Range("C1") = TextBox3.Value Suma = Hoja1.Range("A1") + Hoja1.Range("B1") + Hoja1.Range("C1") Hoja1.Range("D1") = Suma

End Sub Si analizamos el código observamos que cada valor ingresado en los “TextBox” es almacenado en las celdas A1, B1 y C1 respectivamente. Por otro lado, dimensionamos la variable “Suma” como “Double” y le asignamos el valor de la sumatoria de los valores ingresados. Hoja1.Range("A1") = TextBox1.Value le asigna el valor ingresado en el TextBox1 a la celda A1. Hoja1.Range("D1") = Suma guardará el valor de suma en la celda D1. Si ejecutamos el código nos quedará:

43

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

Si cerramos nuestro archivo Excel, y lo volvemos a abrir veremos que el formulario no se hace visible. Por lo que podemos asignarle un botón, tal como se vio anteriormente, o podemos optimizar nuestro archivo y hacer que el formulario se ejecute una vez que abrimos el archivo Excel. Para poder realizarlo debemos ir a nuestro explorador de proyecto (situado a la izquierda) y dar doble click en ThisWorkbook.

Podemos observar que al realizar esto, nos sitúa en una nueva hoja de código con el siguiente encabezado

Si queremos que nuestro código se ejecute al abrir el archivo Excel, debemos modificarlo de la siguiente manera

Todo el código que utilicemos aquí, se va a ejecutar al momento de abrir nuestro libro de Excel, por lo que escribiremos lo siguiente:

Private Sub Workbook_Open() UserForm1.Show End Sub 44

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

En otras palabras, UserForm1.Show significa “mostrar el formulario”. Incorporando este código, cada vez que abramos nuestro libro Excel se ejecutará el formulario. Para finalizar nuestro formulario, incorporaremos un MsgBox que nos muestre el resultado de la suma de los tres valores ingresados, por lo que volveremos a nuestro código original haciendo doble click en el botón de formulario tal como se vio anteriormente y escribiremos el siguiente código: Private Sub CommandButton1_Click()

Dim Suma As Double

Hoja1.Range("A1") = TextBox1.Value Hoja1.Range("B1") = TextBox2.Value Hoja1.Range("C1") = TextBox3.Value Suma = Hoja1.Range("A1") + Hoja1.Range("B1") + Hoja1.Range("C1") Hoja1.Range("D1") = Suma

MsgBox ("El resultado es" & Suma)

End Sub El “&” funcionará como conector entre el texto y la variable “suma”, de esta manera al ejecutar nuestro código obtendremos el siguiente resultado:

45

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

EJERCICIOS DE APRENDIZAJE 1 - Genere un libro de Excel habilitado para macros (extensión .xlsm), luego cree una Macro con el nombre “Mi_primera_macro”. Una vez realizada desarrolle un botón que al ser accionado inserte la palabra “Test” en la celda “B2”.

2- Genere una macro denominada “Sumar” la cual sume 4 valores ubicados en las celdas A1;B1;C1;D1 y ubique el resultado en la Celda F1. Ejecutar la misma mediante el uso de un botón.

3- Utilice la macro del ejercicio anterior (Sumar) y genere un nuevo código que luego de realizar la suma corte los valores y resultado obtenidos en las celdas A1;B1;C1;D1 y F1 y pegue estos valores en las celdas A5;B5;C5;D5 y F5.

4- Utilice la macro del ejercicio 1 (Mi_primera_macro) y genere un nuevo código que luego de insertar la palabra TEST en la celda “B2”. La copie y la pegue en la celda “C2”.

5-Genere una macro denominada prueba_logica la cual compare 2 valores ingresados en las celdas A1 y A2. Si A1 es mayor a A2 debe generar un MsgBox con la leyenda “El valor es Mayor” caso contrario debe generar un MsgBox con la leyenda “Ingrese otro valor”. Utilice un botón para ejecutar la macro.

6- Genere una macro denominada “Bucle” que contenga un FOR el cual suma un valor ingresado en la celda A1 seis veces así mismo y devuelva el resultado en la celda A2. Por ejemplo, si se ingresa el número “2 “deberá devolver en la celda A2 el valor 12 (2+2+2+2+2+2)

7- Mediante la utilización de un bucle “Do While” desarrolle una macro denominada “Input_while” que genere un InputBox. Si se ingresa un valor mayor a 10 debe aparecer un MsgBox con la leyenda “Valor correcto”, si el valor es menor o igual a 10 debe aparecer la leyenda “Valor incorrecto” y generar nuevamente el InputBox hasta que se ingrese un valor mayor a 10.

8- Desarrolle una macro denominada “Ingreso” que al ejecutar un botón, se genere un input box que permita el ingreso de un valor en la primera celda vacía de la columna A.

9-Desarrolle una macro denominada “Edad” que al ejecutar un botón permita el ingreso de la edad de una persona. Si la edad está comprendida entre 0 y 11 debe emitir un MsgBox con la palabra “Niño/a”. Si está comprendido entre 12 y 17 debe emitir un MsgBox con la palabra “Adolescente” y si es mayor a 17 y menor igual a 99 debe emitir la palabra “Adulto”.

46

INTRODUCCIÓN A LA PROGRAMACIÓN CON MACROS

ING. PABLO GRIBODO

COMENTARIOS FINALES Lo visto hasta aquí es solo la punta del iceberg, como todo lenguaje de programación las posibilidades son infinitas, y solo nos queda seguir explorando, investigando y equivocarnos para aprender. Excel es una herramienta muy potente que al combinarla con lenguaje de programación permite optimizar cualquier proceso. Te invito a seguir investigando y aportando día a día para que sumes tus ideas al mundo Excel. ¡Espero haber sido útil en tu aprendizaje y muchas gracias por leerme! Cualquier inquietud, comentario o crítica por favor házmela saber a pablogribodo@yahoo.com.ar. ¡Saludos!

ACERCA DEL AUTOR Pablo Gribodo es Ingeniero Industrial de la Universidad Tecnológica Nacional, ha trabajado en distintos rubros y actualmente se desempeña en al ámbito aeronáutico. Posee mas de 10 años de experiencia docente, actividad que aún desempeña, y entre otras de sus pasiones se encuentra volar y programar videojuegos. Mail: pablogribodo@yahoo.com.ar

47

# Introducción a la programación con macros - Microsoft Excel

Aprenda a programar sus archivos Excel con macros para hacer de su trabajo diario una tarea mucho mas sencilla. Cuenta con infinidad de ejem...

# Introducción a la programación con macros - Microsoft Excel

Aprenda a programar sus archivos Excel con macros para hacer de su trabajo diario una tarea mucho mas sencilla. Cuenta con infinidad de ejem...