52
PROGRAMACION VBA PARA EXCEL INTRODUCCION: Si bien la grabadora de macros es muy útil y genera un código siempre correcto, tiene dos desventajas: 1. genera mas código que el necesario. 2. sólo puede hacer macros con instrucciones secuenciales y sin nada de lógica, o sea que no pueden tomar desiciones ante un evento. Ambas desventajas se pueden solucionar con la programación VBA que quiere decir programación visual basic para aplicaciones, lo lamento pero aquí no tenemos mas remedio que aprender a programar y eso es lo que van a ir aprendiendo con los tutorarles de este apartado. VBA es una programación que está íntimamente relacionada con los libros y las hojas de cálculo y para esto Excel cuenta con un editor de programación donde se pone el código, a este se puede acceder, en Excel 2007, yendo a la pestaña programador y luego a la sección código donde hacemos clic en Visual Basic En Excel 2003 hay que ir al menú desplegable herramientas y de ahí la ruta macros y Editor de Visual Basic

PROGRAMACION VBA PARA EXCEL.docx

Embed Size (px)

Citation preview

Page 1: PROGRAMACION VBA PARA EXCEL.docx

PROGRAMACION VBA PARA EXCEL 

INTRODUCCION:

Si bien la grabadora de macros es muy útil y genera un código siempre correcto, tiene dos desventajas:

 1. genera mas código que el necesario.2. sólo puede hacer macros con instrucciones secuenciales y sin nada de lógica, o sea que no

pueden tomar desiciones ante un evento.

Ambas desventajas se pueden solucionar con la programación VBA que quiere decir programación visual basic para aplicaciones, lo lamento pero aquí no tenemos mas remedio que aprender a programar y eso es lo que van a ir aprendiendo con los tutorarles de este apartado.

VBA es una programación que está íntimamente relacionada con los libros y las hojas de cálculo y para esto Excel cuenta con un editor de programación donde se pone el código, a este se puede acceder, en Excel 2007, yendo a la pestaña programador y luego a la sección código donde hacemos clic en Visual Basic

En Excel 2003 hay que ir al menú desplegable herramientas y de ahí la ruta macros y Editor de Visual Basic

ambas formas nos lleva, luego de hacer doble clic en Hoja1por ejemplo, al editor

Page 2: PROGRAMACION VBA PARA EXCEL.docx

las macros que se escriban aquí, estaran relacionadas con la Hoja1.

Comencemos por lo mas simple y escribamos una macro que seleccione la celda B5de la Hoja1 del libro VBAProject (Libro2)

donde podemos ver que el código

se escribe entre "Sub" y "End Sub" y que el nombre

no tiene espacios y termina con  "( )" . Para ejecutar este código pulsamos en el icono  o en la tecla F5 para que aparezca el panel Macros

Page 3: PROGRAMACION VBA PARA EXCEL.docx

donde puede verse el nombre de la macro que ya está seleccionada, luego pulsamos en "ejecutar"

y despues en el icono    , o seleccionando  " Alta + F5 que nos lleva a la pantalla con el resultado

que es la selección de la celda B5.

Otro código muy simple es escribir un valor en una celda.

Escribamos el valor 2007 en la elda D8

y si lo queremos borrar

A estas alturas estamos en condiciones de explicar estos sencillos códigos:

Page 4: PROGRAMACION VBA PARA EXCEL.docx

En la programación VBA se trabaja con OBJETOS ( Hojas, celdas, Rangos, etc) que como todo objeto,  tiene propiedades,  por ejemplo el objeto celda pude tener la propiedad de alto, ancho, estar seleccionada, tener un valor, o no tener ninguno, etc

En los códigos que hemos escrito  tenemos los objetos Range("B5") ( celda B5) con la propiedad de estar seleccionada y  el objeto Range("D8") ( celda D8) con la propiedad de tener un número (2007) y despues  estar vacía.

CODIGOS MAS SIMPLES PARA EMPEZAR

1-Seleccionar una Celda

Range("A1").Select

2-Escribir en la celda que está seleccionada en el momento actual

Activecell.FormulaR1C1="Pedro"

la combinación  los códigos 1 y 2 es equivalente a esta sola línea:Range("A1").Value=" pedro"El uso de   FormulaR1C1  sera explicado mas adelante

3-Letra Negrita

Selection.Font.Bold = True

4-Letra Cursiva

Selection.Font.Italic = True

5-Letra Subrayada

Selection.Font.Underline = xlUnderlineStyleSingle

6-Centrar TextoWith Selection

                   .HorizontalAlignment = xlCenter

End With

7-Alinear a la izquierdaWith Selection

                         .HorizontalAlignment = xlLeft

End With

8-Alinear a la DerechaWith Selection

                     .HorizontalAlignment = xlRight

End With

9-Tipo de Letra(Fuente)

With Selection

.Font .Name = "Arial"

End With

10-Tamaño de Letra(Tamaño de Fuente)With Selection.Font .Size = 12

End With

11-Copiar

Selection.Copy

12-Pegar

Page 5: PROGRAMACION VBA PARA EXCEL.docx

ActiveSheet.Paste

13-Cortar

Selection.Cut

14-Ordenar Ascendente

Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

15-Orden Descendente

Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

16-Buscar

Cells.Find(What:="César", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False).Activate

17-Insertar Fila

Selection.EntireRow.Insert

18-Eliminar Fila

Selection.EntireRow.Delete

19-Insertar Columna

Selection.EntireColumn.Insert

20-Eliminar Columna

Selection.EntireColumn.Delete

21-Abrir un Libro

Workbooks.Open Filename:="C:\Mis documentos\Tablas dinamicas.xls"

22-Grabar un Libro

ActiveWorkbook.SaveAs Filename:="C:\Mis documentos\tablas.xls", FileFormat _ :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _ False, CreateBackup:=FalseLa mayoria de estos códigos se pueden verificar con la grabadora   de Macros.

 Significado de la FORMULA R1C1

La FORMULA R1C1 se emplea para colocar el resultado de una línea de código en la celda que actualmente está activa.

Veamos el siguiente caso

 

supongamos que queremos sumar los números de de la columna D y que el resultado aparezca en la celda F6 que es la que está seleccionada, el código que se debería escribir es el siguiente

Page 6: PROGRAMACION VBA PARA EXCEL.docx

 

El paréntesis destacado en rojo tiene por objetivo cubrir el tango donde están los números a sumar, o sea, desplazarme 2 columnas a la izquierda [-2] con 5 y 2 filas hacia arriba es decir

[-5] y [-2]. Se entiende que R significan filas y C columnas y que anteponemos un - si nos desplazamos hacia la izquierda o hacia arriba. Cuando escribimos una función, como en el caso anterior, siempre debe ser escrita ActiveCell.FormulaR1C1 = "=SUM(R[]C[]:R[]C[])", pues el segundo igual es que caracteriza a la función y el paréntesis el rango donde se aplica. Lo que se acaba de hacer es lo mismo que dolocar =SUMA(D1:D3) en la celda F6

Hasta ahora hemos hecho una breve intrcduccion a la programacion VBA , pero una cosa fundamental es entender las estructuras de control de flujo de programa, lo que haremos mediante ejemplos

Estructuras de iteracion

Frecuentemente algunas líneas de código de repiten muchas veces con el consiguiente aumento del tamaño del programa. Esto se solucionado mediante los llamados estructuras de iteración, también llamadas ciclos de repetición o bucles.

Estos son:While - WendDo - While - LoopDo - Until --LoopFor - NextFor-Each-in-Next

Estructuras de desicion:.If - Then - ElseSelect - Case

Tipos de datos, funciones y subrutinas:Tipos de datosFuncionesMacros

 

 Estructura de iteración Wile - Wend 

INTRODUCCION:

Esta es una iteración en la que no sabemos de antemano cuantas veces se repetirá el ciclo por lo tanto debe haber una condición para salir de el ya que en caso contrario el ciclo se repetiría en forma indefinida.

Para explicar While - Wend me parece que lo mejor es dar un ejemplo en el que iremos analizando cada línea de código.

Vamos a sumar un rango de números que están ubicados en una columna. En la hoja de cálculo solo debemos poner los números (sin dejar espacios en blanco) . Luego de aplicar la macro el resultado deberá quedar en la primera celda vacía.

En este caso sumaremos una cantidad indefinida de números naturales los que introducimos en la columna "D" empezando por la "D1" y finalizando con la introducción del Nº 283226 como se ve en la figura

 

Page 7: PROGRAMACION VBA PARA EXCEL.docx

el programa VBA es

 

Explicación del código (los números representan las líneas de código)

1- Siempre se empieza con Sub seguida del nombre de la macro y 2 paréntesis (Sum()).

2- Seleccionamos la celda superior. "D1".

3- Asignamos a la variable “sum” (que es en la que quedará contenido el resultado) el valor de la celda superior.

4- Esta línea es la condición para entrar o salir del While y quiere decir "mientras la celda activa no este vacía",

5- Aquí ya entramos en el While donde hay 2 líneas que se repiten hasta que la condición no se cumpla.

6- La primera línea dentro del While hace bajar una posición la celda seleccionada, de esta forma podemos acceder a su contenido y la segunda agrega este contenido a la variable "sum".

Page 8: PROGRAMACION VBA PARA EXCEL.docx

7-Con Wend salimos o volvemos a entrar al ciclo según se cumpla o no la condición

8- Una vez que salimos del ciclo colocamos el resultado queda en una celda activa.

9-Tanbien mostramos el resultado mediante un MsgBox (caja de mensajes)

10- Con esta línea se cierra el programa

 

Finalmente una vez que aplicamos la macro, la hoja nos queda

 

 

Se puede ver que los resultados en la celda activa y en la caja de mensajes coinciden.

 

Estructura de iteración Do-While-Loop 

INTRODUCCION:Esta es una iteración en la que no sabemos de antemano cuantas veces se repetirá el ciclo al igual en la estructura While-Wend y como en esta debe haber una condición para salir de el ya que en caso contrario este se repetiría en forma indefinida. La evaluación de la condición se produce antes  de entrar al ciclo.Para explicar Do-Wile-Loop utilizaremos el mismo ejemplo que en la estructura While-Wend.

Vamos a sumar un rango de números que están ubicados en una columna. En la hoja de cálculo solo debemos poner los números (sin dejar espacios en blanco) . Luego de aplicar la macro el resultado deberá quedar en la primera celda vacía.

En este caso sumaremos una cantidad indefinida de números naturales los que introducimos en la columna "D" empezando por la "D1" y finalizando con la introducción del Nº 283226 como se ve en la figura

 

Page 9: PROGRAMACION VBA PARA EXCEL.docx

el programa VBA es

 

Explicación del código (los números representan las líneas de código)

1- Siempre se empieza con Sub seguida del nombre de la macro y 2 paréntesis (SumColumna()).

2- Seleccionamos la celda superior. "D1".

3- Asignamos a la variable “sum” (que es en la que quedará contenido el resultado) el valor de la celda superior.

4- Esta línea es la condición para entrar o salir del While y quiere decir "hacer mientras la celda activa no este vacía",

5- Aquí ya entramos en el Do-While donde hay 2 líneas que se repiten hasta que la condición no se cumpla.

6- La primera línea dentro del While hace bajar una posición la celda seleccionada, de esta forma podemos acceder a su contenido y la segunda agrega este contenido a la variable "sum".

7-Con Loop salimos o volvemos a entrar al ciclo según se cumpla o no la condición.

Page 10: PROGRAMACION VBA PARA EXCEL.docx

8- Una vez que salimos del ciclo colocamos el resultado queda en una celda activa.

9-Tanbien mostramos el resultado mediante un MsgBox (caja de mensajes).

10- Con esta línea se cierra el programa.

 Código para copiar y pegarSub SumaColumna()Range("D1").SelectSum = Range("D1")Do While ActiveCell.Value <> ""ActiveCell.Offset(1, 0).SelectSum = Sum + ActiveCell.ValueLoopActiveCell.Value = SumMsgBox SumEnd Sub

 

Finalmente una vez que aplicamos la macro, la hoja nos queda

 

 Se puede ver que los resultados en la celda activa y en la caja de mensajes coinciden y lógicamenteal dan el mismo resultado que usando la estructura Wile-Wend.

 

Estructura de iteración Do-Until-Loop 

INTRODUCCION:Do-Until-Loop es similar a Do-While-Loop y a While-Wend, la diferencia esta en la en la forma en que expresamos la condicion: por ejemplo en Do-While-Loop y While-Wend la condicion podria ser " ejecutar el codigo mientras que la celda no este vacia" y en Do-Until-Loop seria "ejecutar el codigo hasta que la celda este vacia".

Page 11: PROGRAMACION VBA PARA EXCEL.docx

Para comparar con Do-While-Loop y While-Wend vamos a sumar un rango de números que están ubicados en una columna. En la hoja de cálculo solo debemos poner los números (sin dejar espacios en blanco) . Luego de aplicar la macro el resultado deberá quedar en la primera celda vacía.Tambien en este caso sumaremos los mismos números que en los ejemplos de Do-While-Loop y While-Wend que introducimos en la columna "D" empezando por la "D1" y finalizando con la introducción del Nº 283226 como se ve en la figura

 

el programa VBA es

 

Explicación del código (los números representan las líneas de código)

1- Siempre se empieza con Sub seguida del nombre de la macro y 2 paréntesis (SumaColumna2()).

2- Seleccionamos la celda superior. "D1".

3- Asignamos a la variable “sum” (que es en la que quedará contenido el resultado) el valor de la celda superior.

Page 12: PROGRAMACION VBA PARA EXCEL.docx

4- Esta línea es la condición para entrar o salir del While y quiere decir "ejecutar el codigo hasta que la celda este vacia",

5- Aquí ya entramos en el While donde hay 2 líneas que se repiten hasta que la condición no se cumpla.

6- La primera línea dentro del While hace bajar una posición la celda seleccionada, de esta forma podemos acceder a su contenido y la segunda agrega este contenido a la variable "sum".

7-Con Wend Loop salimos o volvemos a entrar al ciclo según se cumpla o no la condición

8- Una vez que salimos del ciclo colocamos el resultado que queda en una celda activa.

9-Tanbien mostramos el resultado mediante un MsgBox (caja de mensajes)

10- Con esta línea se cierra el programa

 

Finalmente una vez que aplicamos la macro, la hoja nos queda

 

 

Se puede ver que los resultados en la celda activa y en la caja de mensajes coinciden.

 

Estructura de iteración For-Next 

INTRODUCCION:

Esta es una iteración en la que sabemos de antemano cuantas veces se repetirá el ciclo, por lo tanto no hace falta una condición para salir del mismo.

Para explicar For daremos un ejemplo muy simple:

Vamos a sumar los primeros 10 números naturales. En la hoja de cálculo solo debemos poner los números (sin dejar espacios en blanco) en una columna, que en este caso será la D. Luego de aplicar la macro el resultado deberá quedar en la primera celda vacía , este debe ser 55 como se puede verificar haciendo la suma manualmente.

Aprovechando las propiedades de For podemos poner los números desde el código

Page 13: PROGRAMACION VBA PARA EXCEL.docx

 

el programa VBA es

 

Explicación del código (los números representan las líneas de código)

1- Siempre se empieza con Sub seguida del nombre de la macro y 2 paréntesis (Sum()).

2- El primer For es para colocar en la columna D los diez primeros números naturales y significa: para la variable i yendo de 1 hasta 10

3-Se coloca en la celda (i,4) el valor actual de i que se repite al entrar nuevamente en el For

4- Con Next i se incrementa i en 1 y se vuelve a entrar al For

5-Se selecciona la celda "D1"

6- Se coloca en la variable sum el contenido de la celda "D1" ( Sum acumula la suma de los 10 primeros nº narutales)

7-Se entra al 2º For

8 y 9-Dentro del For la primera línea hace bajar una posición la celda seleccionada, de esta forma podemos acceder a su contenido y la segunda agrega este contenido a la variable "sum".

10-En esta línea podemos salir o volver a entrar al For según se haya llegado a 10 o no.

Page 14: PROGRAMACION VBA PARA EXCEL.docx

11- En la celda activa colocamos el valor de sum.

12-Tambien mostramos el resultado mediante un MsgBox.

13-Se termina el programa.

 

Quedando la hoja de calculo como se ve abajo

 

Estructura de iteración For-Each-In-Next 

Hay dos variantes de esta estructura

1-En el primer tipo debemos especificar el rango en el que se realiza la iteración

Como ejemplo hallaremos el promedio del rango A1:D4,dejando el resultado en la celda C7, para este ejemplo pondremos valores enteros

 

Código:

Page 15: PROGRAMACION VBA PARA EXCEL.docx

 

La parte más importante del código es

que significa: para cada celda del rango A1:D4 ejecutar el bloque

y cuando se llega a la última celda del rango, automáticamente se hace la cuenta

luego se coloca el resultado en la celda C8

Código para copiar y pegar

Sub PromedioRango()Dim cell As rangeDim sum As IntegerDim cant As IntegerDim prom As VariantFor Each cell In range("A1:D4").cellssum = sum + cell.Valuecant = cant + 1Next cellprom = sum / cantrange("C8").SelectActiveCell.Value = prom

End Sub

2-El segundo tipo utiliza la propiedad CurrentRegion, esta propiedad es muy interesante pues nos permite seleccionar un rango cuyos límites no se conocen ya que CurrentRegion devuelve el rango que rodea a una celda seleccionada.

Podemos decir que CurrentRegion es un rango rodeado por filas y columnas en blanco. En la figura se puede ver dos regiones de este tipo.

Page 16: PROGRAMACION VBA PARA EXCEL.docx

Utilizaremos estas regiones para obtener el promedio de las mismas, para lo cual empleamos el código

Este código sirve para las dos regiones, siempre y cuando se seleccione una celda de una u otra de acuerdo en cual se quiera calcular el promedio. Por ejemplo si queremos calcular el promedio del rango de la zona de contorno verde el resultado seria

 

 

En este caso hemos seleccionado la celda “ H3”, pero se podría haber seleccionado cualquier otra

 

La diferencia con el caso 1 es

en la que

devuelve el rango de la región actual.

Código para copiar y pegar

Page 17: PROGRAMACION VBA PARA EXCEL.docx

Sub PromedioRegion()Dim cell As rangeDim sum As IntegerDim cant As IntegerDim prom As VariantFor Each cell In ActiveCell.CurrentRegion.cellssum = sum + cell.Valuecant = cant + 1Nextprom = sum / cantrange("D8").SelectActiveCell.Value = promEnd Sub

 

 

Estructura de decisión   If - Then - Else 

INTRODUCCION:

La estructura de decisión se llama así pues puede, luego de evaluar una condición, ejecutar un bloque de código u otro.

Vamos a ver algunos ejemplos;

1- Comparar 2 números ubicados en 2 celdas, y responder, en una tercera celda, si son iguales o noCompararemos los Nº 59 y 63 ubicados en las celdas D1 y E1 respectivamente

para responder a la pregunta utilizaremos el siguiente código

 

Explicación del código

1-Título.

2-Si el valor del Nº que está en la celda "D1" es igual al que está en la celda "E1" , entonces se ejercita el código de la línea 3.

Page 18: PROGRAMACION VBA PARA EXCEL.docx

3-Se coloca en la celda "D4" el texto "Los valores de D1 y E1 son iguales"..

4-Sino se da la condición de la línea 2 se ejecuta el código de la línea 5.

5 -Se coloca en la celda "D4" el texto "D1 es distinto que E1".

6-Se cierra el If.

7-Se cierra el Sub

Código para copiar y pegarSub Condicional()If ActiveSheet.Range("D1").Value = ActiveSheet.Range("E1").Value ThenActiveSheet.Range("D4").Value = "Los Valores de D1 y E1 son iguales"ElseActiveSheet.Range("D4").Value = "D1 es distinto que E1"End IfEnd Sub

En nuestro caso el resultado se tiene que ver como en la figura

 

 

Esta estructura puede anidarse, lo que quiere decir poner otro If en la línea 3, 5 o ambas. Esto es necesario al querer averiguar si los Nº son mayores, iguales o distintos, para hacerlo generamos otra macro en el mismo libro que llamaremos, por ejemplo, Anidamiento

 

Page 19: PROGRAMACION VBA PARA EXCEL.docx

Código:

Notar que el segundo If se puso en la parte correspondiente al Else y se cierra antes que el primer If. Se puede también ver que hemos identado el código para mayor claridad (cosa que recomiendo enfáticamente)

Resultado

 

 

Código para copiar y pegar:

 Sub Anidamiento()If ActiveSheet.Range("D1").Value = ActiveSheet.Range("E1").Value ThenActiveSheet.Range("D4").Value = "Los Valores de D1 y E1 son iguales"ElseIf ActiveSheet.Range("D1").Value > ActiveSheet.Range("E1").Value ThenActiveSheet.Range("D4").Value = "D1 es mayor que E1"ElseActiveSheet.Range("D4").Value = "E1 es mayor que D1"End IfEnd IfEnd Sub

Page 20: PROGRAMACION VBA PARA EXCEL.docx

 Se puede ver que este código no está identado por lo que sugiero hacerlo como ejercicio.

 

 

 

Estructura de desición Select-Case 

INTRODUCCION:La estructura de decisión If-Then-Else puede anidarse y como este anidamiento se puede repetir tantas veces como el problema lo exija, a veces el código suele hacerse confuso y frecuentemente da lugar a errores, en estos casos se puede recurrir a la estructura de decisión Select-Case.En primer lugar veremos que funciona igual que  If-Then-Else , para lo que utilizaremos el mismo ejemplo que If-Then-Else en la parte en que comparábamos 2 números ubicados en las celdas D1 y E1 y el programa debía responder si estos son iguales, mayores o menores, ubicando la respuesta en la celda D4

El código es

 

escencialmente este código evalúa el valor actual de la celda "D1" y se escribe un código diferente de acuerdo al caso de que este valor sea = , > o < que el valor actual de la celda "E1"CODIGO PARA COPIAR Y PEGARSub SelectCase()A1 = Range("E1").ValueSelect Case Range("D1").ValueCase Is = A1ActiveSheet.Range("D4").Value = "Los Valores de D1 y E1 son iguales"Case Is > A1ActiveSheet.Range("D4").Value = "D1 es mayor que E1"Case Is < A1ActiveSheet.Range("D4").Value = "E1 es mayor que D1"End SelectEnd Sub

La utilidad esencial de esta estructura se manifiesta cuando los casos que se evalúan son mas numerosos como veremos en el siguiente ejemplo.

Introducir en una celda la nota de un alumno y en otra una leyenda que diga si esta aplazado, aprobado y en caso de estar aprobado si su nota fue buena, muy buena, distinguida o sobresaliente, teniendo en cuenta que:

Aplazado= 1,2,3

Aprobado= 4,5

Bueno= 6,7

Page 21: PROGRAMACION VBA PARA EXCEL.docx

Muy bueno= 8

Distinguido= 9

Sobresaliente= 10

se puede responder a estas preguntas aplicando este código

 

 

CODIGO PARA COPIAR Y PEGARSub SelectCase()a = Range("A2").ValueSelect Case aCase 1 To 3ActiveSheet.Range("B2").Value = "APLAZADO"Range("E1").SelectCase 4 To 5ActiveSheet.Range("B2").Value = "APROBADO"Range("E1").SelectCase 6 To 7ActiveSheet.Range("B2").Value = "BUENO"Range("E1").SelectCase 8ActiveSheet.Range("B2").Value = "MUY BUENO"Range("E1").SelectCase 9ActiveSheet.Range("B2").Value = "DISTINGUIDO"Range("E1").SelectCase 10ActiveSheet.Range("B2").Value = "SOBRESALIENTE"Range("E1").SelectEnd SelectEnd Sub

El resultado final queda como se ve en la figura, en este caso hemos agregado un botón para disparar la macro, el cual esta señalado por la flecha roja

Page 22: PROGRAMACION VBA PARA EXCEL.docx

 

 

 

Variables simples y Tipos de datos 

INTRODUCCION:

Una variable simple es una porción de memoria donde se puede almacenar un valor y se les debe dar un nombre para identificarlas entre sí, también están asociados a un tipo de dato.

Un tipo de dato es el rango de valores que las variables pueden aceptar o, dicho de otra manera, la cantidad de memoria que se reserva para albergar dicho rango. Por ejemplo la variable de tipo Integer, puede guardar valores en un entorno de -32.768 a +32.787 ocupando 2 bytes.

Todos los tipos de datos se resumen en la tabla de abajo.

 

 

Funciones 

INTRODUCCION:

Page 23: PROGRAMACION VBA PARA EXCEL.docx

Las funciones son un trozo de código inserto en el programa principal que recibe uno, muchos o ningún valor (parámetros o argumentos) y que a diferencia de las subrutinas devuelven un único valor, por esta razón se debe especificar( aunque no es obligatorio)de qué  tipo de dato  es dicho valor. Las funciones deben tener un nombre que las identifique y así poder ser llamadas por el programa principal. También nos permiten ampliar el listado de las funciones que ya vienen por defecto en Excel, estas funciones están asociadas a un libro o una hoja de Excel y las denominamos Funciones personalizadas, son muy útiles,entre otras cosas, cuando la fórmula que se requiere para resolver un problema usando las funciones propias de las hojas Excel resulta muy larga y complicada, haciendo casi imposible su comprensión.Funciones personalizadas:

Empezaremos dando un ejemplo trivial de una función personalizada que podríamos resolver sin recurrir a ellas, este ejemplo es solo para mostrar como funcionan.

Supongamos que queremos multiplicar 2 números enteros (en la figura el entero 12 y el 2)que están en las celdas A1 y C1 y que el resultado se devuelva en la celda B3, que obviamente se resuelve con la fórmula =A1*C1 ubicada en la celda B3, mentalmente podemos decir que el resultado es 24

pero lo haremos con una función definida por nosotros programada con VBA que llamaremos MULTIPLICA()

 

Esta función ya esta disponible junto con las demás,(solamente en la hoja donde la definimos) como se puede ver en el recuadro rojo, también puede verse que su definición está entre Function y End Function

la usamos poniendo dos números como argumento, tal como puede verse

 

Page 24: PROGRAMACION VBA PARA EXCEL.docx

 

 

Ahora daremos un ejemplo de una función definida por el usuario que tiene más utilidad.

La ferretería EL BULON hace el 20% de descuento si las ventas superan las 100 unidades.

Esto se puede resolver con la función SI, como se puede ver en la siguiente figura

 

Resolveremos el mismo problema definiendo una función, que llamaremos DESCUENTO, con el siguiente código

 

Page 25: PROGRAMACION VBA PARA EXCEL.docx

ya definida la función DESCUENTO() la podemos aplicar

Se ve que el resultado es el mismo, pero si definimos la función DESCUENTO el proceso es mas rápido.Como se habrá notado en el ejemplo anterior, está permitido omitir el  tipo de dato , pero es una buena costumbre ponerlos, ya que nos puede ahorrar muchos problemas principalmente en la depuración del código en programas largos (En otros idiomas, como en C, esto es obligatorio) por surte VBA tiene la posibilidad de forzar el hecho de tener que poner obligatoriamente los tipos de datos con la instrucción Opción Éxplicit al principio de cada módulo y mejor aún, se puede configurar el editor de VBA para que se ponga automáticamente esta instrucción en todos los nuevos módulos, esto se hace yendo a Herramientas->Opciones->Solapa “Editor“ y en ella tildando la casilla “Requerir declaración de variables”, como se puede ver en la siguiente imagen

 

Page 26: PROGRAMACION VBA PARA EXCEL.docx

Ahora daré un ejemplo, que si bien puede resolverse con funciones (mas precisamente funciones matriciales) les puedo asegurar que la solución es muy complicada y es aquí donde se ve la verdadera utilidad de las funciones personalizadas. Se trata de la obtención de las iniciarles de un nombre completo.

Su código es el siguiente:

 

 

usaremos la funcion recien definida en la siguiente tabla

 

Page 27: PROGRAMACION VBA PARA EXCEL.docx

Llegando a este punto debemos hacer algunas aclaraciones del códigoEn primer lugar podemos ver que se usan las funciones de librería de VBA (funciones que ya están definidas), más precisamente las funciones de cadena Len(), Asc() y Mid(). Una cadena es una serie de caracteres tratados como una misma unidad, estos caracteres pueden ser letras, números o caracteres especiales, como pueden ser /, *, &, %, @ y otros muchos incluido el espacio. A todos estos caracteres les corresponde un código numérico llamado ASCII   . Estas funciones sirven para el manejo de cadenas, hay otras que iremos analizando cuando sea necesario.

Función Len

Esta función nos devuelve el número de caracteres de una cadena, por lo tanto retorna un número entero y recibe un parámetro que es un tipo de dato string.Su sintaxis es: Len([cadena de caracteres])

Ejemplo: Si Texto="hola como estas" Len(Texto) devuelve el valor 15.

Función Asc

Con la función Asc podemos obtener el código ASCII de un caracter

 Función MidExtrae partes de una cadena y recibe 3 parámetros.Sintaxis: Mid(cadena, inicio, longitud)El parámetro cadena es la cadena a extraer caracteres.inicio es el carácter desde donde se comienza la extracción.longitud es la cantidad de caracteres devueltos a partir del carácter de inicio.

Dicho esto el código se puede entender mas claramente1 Function INICIALES(Texto As String) As String2 Dim strLong As Long, i As Long3 Dim textTemp As String

5 strLong = Len(Texto)7 For i = 1 To strLong8 If Asc(Mid(Texto, i, 1)) >= 65 And Asc(Mid(Texto, i, 1)) <= 90 Then9 textTemp = textTemp & Mid(Texto, i, 1)9 End If10 Next i12 INICIALES = textTemp

14 End Function

Línea 1: se da el nombre a la función (INICIALES) y se define el nombre (Texto) y el tipo del parámetro que recibe.

 

Page 28: PROGRAMACION VBA PARA EXCEL.docx

Líneas 2 y 3: se declaran las variables que se van a usar.

Línea 5: se asigna a la variable strLong la longitud del string Texto, o sea que se cuentan cuantos caracteres hay en la celda que contiene el nombreLínea 7: se entra en un ciclo for-Next que recorre el string Texto, o sea que comienza desde 1 y termina en strLong.

Línea 8: esta es la línea más importante. ya que en cada ciclo se evalúa cada carácter y determina si es una letra mayúscula (Asc>=65 o Asc<=90).

Línea 9: Si es mayúscula agrega el carácter a la variable strTemp.

Línea 12: Al terminar la rutina, la función INICIALES recibe el valor de strTemp que es donde se guardan las iniciales.

Para comprobar que funciona dejo el código para copiar y pegarFunction INICIALES(Texto As String) As StringDim strLong As Long, i As LongDim textTemp As String

strLong = Len(Texto)For i = 1 To strLongIf Asc(Mid(Texto, i, 1)) >= 65 And Asc(Mid(Texto, i, 1)) <= 90 ThentextTemp = textTemp & Mid(Texto, i, 1)End IfNext iINICIALES = textTemp

End Function

FUNCIONES DE HOJA( NATIVAS):

Para definir funciones personalizadas, a demás de las funciones propias de VBA , se pueden usar las llamadas funciones de hoja ( Work Sheet Functions en ingles) también llamadas funciones nativas, es decir las funciones que normalmente están disponibles en las hojas de Excel, como son , SUMA, BUSCARV, MAX, PROMEDIO, COINCIDIR, por nombras algunas. Para usarlas debemos anteponer al nombre de la función( que debe estar en ingles) la expresión Application.WorkSheetFunction.[nombre de la función](parámetros).Si queremos usar la función BUACARV, la expresión debe ser:

 

Application.WorkSheetFunction.VLookup(Valor a buscar, Matriz de búsqueda; Columna, Valor lógico)

Alternativamente:

WorkSheetFunction.VLookup() o Function.VLookup()

Como se puede ver los parámetros de la función son los mismos que los de las funciones nativasEmpezaremos dando un ejemplo en el que se usa la función DESREF que en ingles es Match. Como todos sabemos la función BUACARV solo puede traer valores que están  en la misma fila del valor buscado pero en columnas a la derecha de este, el problema se podria resolver con un anidamiento de las funciones  INDICE  y COINCIDIR, nuestro objetivo es definir una función muy parecida a BUSCARV pero que busque hacia la izquierda, a esta función la llamaremos BUSCARVIZQ

Supongamos que tenemos la siguiente tabla

 

Page 29: PROGRAMACION VBA PARA EXCEL.docx

y queremos:

A) Introducir la tabla en una hoja se Excel

B) Que dado el código de producto se devuelva en dos celdas la herramienta y el precio de la misma

C) No emplear anidamiento de funciones

Como vemos el código del artículo se encuentra en la columna central, por lo tanto para responder debemos hacer una búsqueda a la izquierda y otra a la derecha, por lo tanto debemos recurrir a BUSCARV y a una UDF( función definida por el usuario) que como ya dijimos llamaremos BUSCARIZQ que definimos con el siguiente código:

Function BUSCARVIZQ(valor_a_buscar, matriz_de_busqueda As Range, indice_de_Col As Integer, ValorExacto As Boolean)

Dim NrFila As LongNrFila = Application.WorksheetFunction.Match(valor_a_buscar, matriz_de_busqueda.Resize( , 1), ValorExacto)BUSCARVIZQ = matriz_de_busqueda(NrFila, 1).Offset(0, indice_de_Col)End Function

ya estamos en condiciones de itroducir la fórmula BUSCARIZQ con sus parámetros

que ubicamos en la celda D16 y BUSCARV

que ubicamos en la celda D15, haciendo esto podemos reponder al punto B) como puede verse en la figura

Page 30: PROGRAMACION VBA PARA EXCEL.docx

marcamos con un recuadro rojo la fórmula y el rango introducido, que como se ve es el mismo para ambas fórmulas, no así la columna que para BUSCARIZQ es -1

EXPLICACION DEL CODIGO

Function BUSCARVIZQ(valor_a_buscar, matriz_de_busqueda As Range, indice_de_Col As Integer, ValorExacto As Boolean)se da el nombre a la función y los parámetros, proporcionando el tipo de dato. Notar que no se da el tipo de dato del parámetro valor_a_buscar  ya que este puede ser una cadena de caracteres, un número o una combinación de ambos. Lo mismo podemos decir del parámetro que devuelve la función

 

Dim NrFila As Long

Se define la variable NrFila

NrFila = Application.WorksheetFunction.Match(valor_a_buscar, matriz_de_busqueda.Resize( , 1), ValorExacto)Se asigna a NrFila lo que devuelve la funcion Match (COINCIDIR) donde se redimenciona lamatriz_de_busqueda con Recizematriz_de_busqueda.Resize( , 1)

esto se hace para que la matriz de búsqueda seleccionada, que es rectangular, se transforme en una matriz columna, ya que Match solo busca en rangos columna.

Veamos cono funciona:Selection.Resize(12,4).Select           

si el rango seleccionado inicialmente es C4:E12 , o sea 8 filas y 3 columnas, luego aplicar Resize el Rango queda con 12 filas y 4 columnas

en nuestro caso el rango seleccionado es 11 filas y 2 columnas, como a las filas las queremos dejar igual no se pone nada como primer parámetro y si,ademas, queremos que el rango final sea de una columna se pone( ,1) así, el rango seleccionado queda un rango columnaSe podría haber omitido el Resize seleccionando solo el rango central, esto se hizo para que los parámetros sean iguales a los de la función BUSCADV, salvo por el -1 de indice_de_Col

finalmente el código

BUSCARVIZQ = matriz_de_busqueda(NrFila, 1).Offset(0, indice_de_Col)

Page 31: PROGRAMACION VBA PARA EXCEL.docx

asigna a BUSCARVIZQ el valor que está en la celda activa matriz_de_busqueda(NrFila, 1)desplazada una celda a la izquierda(indice_de_Col ). Esto se logra con la PROPIEDAD Offset que seleciona celdas a cierta distancia de la celda activa

por ejemplo:ActiveCell.Offset(-5,2).Select             selecciona la celda que se encuentra 5 filas hacia arriba y 2 columnas a la derecha de la celda activa.

de otra manera:Sheets(1).Range("C2").Offset(2,4).Select       a partir de C2 selecciona 2 filas hacia abajo y 4 columnas a la derecha, es decir C2 pasa a ser G4(C2 = G4), tener en cuenta que 2 es fila y 4 columna.

 

 

como se ve Offset hace lo mismo que DESREF. 

La programación VBA tiene sus propias funciones como Mid y Len,  que ya se describieron, estas permiten trabajar con cadenas de caracteres, con números, fechas, horas, mostrar mensajes por pantalla y muchas otras que podemos listar por categorías, como sigue:

1-Funciones de conversión de tipos (Conversion)

2-Funciones Financieras (Financial)

3-Funciones de cadenas (Strings)

4-Funciones matemáticas (Math)

5-Funciones de comprobación (Information)

6-Funciones de Interacción(Interaction)

7-Funciones de Fecha y Hora (DateTime)

8-funciones del sistema (FileSystem)

 

Macros 

INTRODUCCION:

Las macros son pequeños trozos de código VBA que no deberían tener más de 15 líneas y no devuelven un valor en su nombre, como las funciones, sino que hacen tareas especificas, estas tareas muchas veces pueden realizase manualmente y otras no, en definitiva sirven para automatizar Excel. Las macros pueden vincularse entre sí mediante la palabra recervada Call y de esta forma unirse para formar códigos  mas grandes

Estos códigos por lo general se ejecutan a pedido del operador, pero también pueden hacerlo automáticamente, una forma es debido a que se produzca algún cambio en una hoja de Excel, como puede ser el cambio en el valor de una celda. A estos cambios se los denomina EVENTOS y para que se ejecuten las macros, hay que programar dichos EVENTOS.

Page 32: PROGRAMACION VBA PARA EXCEL.docx

La forma más práctica de poner en acción una macro es mediante botones asociados a ellas. Para hacerlo vamos a la pestaña programador y de allí pulsamos el botón Insertar para que se desplieguen los controles de formulario, como se ve en la figura

 

al apretar el ícono del botón aparece una cruz, ubicamos esta cruz en el lugar que nos parece conveniente y arrastrándola, con el botón izquierdo del mouse apretado, podemos darle el tamaño adecuado. Al soltar el mouse tenemos algo parecido a esta imagen

simultáneamente aparece un panel donde podemos seleccionar la macro que queremos asociar

 

al aceptar ya tenemos el botón asociado a la macro, posteriormente lo podemos rotular convenientemente.

A continuacion daremos un ejemplo práctico simple:

Page 33: PROGRAMACION VBA PARA EXCEL.docx

Un banco quiere dar de baja las cuentas que no tuvieron movimientos por 3 o más años, considerándolas inactivas en dicho caso y activas en caso contrario.

El banco tiene un listado con las cuentas activas y no activas

 

 

Se quiere actualizar dicho listado, o sea eliminar las cuentas inactivas

Este listado tiene 14 clientes y se lo podría actualizar manualmente, pero si imaginamos que la lista tiene 5000 o más clientes, se tardaría mucho tiempo, por tal motivo es un problema para resolver con una macro.

Coloquemos la lista en la hoja 1 de un libro de Excel 2007 o Excel 2003

 

Page 34: PROGRAMACION VBA PARA EXCEL.docx

insetamos el siguiente código

 

Luego de de oprimir el botón que asociamos a la macro, que llamamos ActualizarListado, el listado queda

 

Código para copiar y pegarSub ActualizarListado()Range("E3").SelectDo While ActiveCell.Value <> ""If ActiveCell.Value = "inactiva" ThenSelection.EntireRow.DeleteElseActiveCell.Offset(1, 0).SelectEnd IfLoopRange("A1").SelectEnd Sub

 

Cuando se dispara una macro no hay vuelta atrás, si se borra un dato, este se pierde(a no ser que se cierre el archivo no se guarden los cambios y se lo abra otra vez). Muchas veces podemos necesitar el listado original, por ejemplo para obtener, en el caso que estamos tratando, otro con los clientes que fueron dados de baja, el que se haría con una macro casi idéntica a la dada más arriba, que dicho sea de paso la confeccionó un empleado del área de computación del banco, al

Page 35: PROGRAMACION VBA PARA EXCEL.docx

que le pidieron las dos listas a último momento. Cacho (así le dicen al empleado), que por suerte no había apretado el botón ACTUALIZAR, decidió hacer las dos cosas al mismo tiempo, es decir: dejar en la Hoja1un listado con los clientes activos y en la Hoja2 los clientes dados de baja, a esta hoja la renombro "Bajas", también copio como respaldo, el listado original en la Hoja3. Cuando terminó el trabajo le quedaron las siguientes macros 

Page 36: PROGRAMACION VBA PARA EXCEL.docx
Page 37: PROGRAMACION VBA PARA EXCEL.docx

y para el rótulo de "Bajas"

"CopiaRotulo" es llamada por "ActualizarListado2" mediante la palabra reservada "Call"

Las dos listas quedaron como se ve

Lista de los clientes activos

Lista de los clientes dados de baja

Cacho pensó que después de todo, se hubiera tomado menos trabajo cerrando el archivo y abriéndolo otra vez, aunque pensándolo mejor se dijo "ya  tengo hecha la macro y seguro que la voy a volver a usar”.Si, seguro que la iba a volver usar y esta vez todo el trabajo sería más rápido.

Page 38: PROGRAMACION VBA PARA EXCEL.docx

Macros para copiar y pegar

Option ExplicitSub ActualizarListado2()Dim i As IntegerDim k As Integerk = 1Dim j As Integerj = 1Call CopiaRotuloSheets("Hoja1").SelectApplication.CutCopyMode = FalseRange("E3").SelectDo While ActiveCell.Value <> ""If ActiveCell.Value = "inactiva" ThenSheets("Bajas").SelectRange("E65536").End(xlUp).Offset(1, 0).Selecti = ActiveCell.RowRange("C" & i).Value = Worksheets("hoja1").Range("C" & i + k - j).ValueRange("C" & i).Interior.ColorIndex = 24Range("C" & i).Borders(xlEdgeBottom).LineStyle = xlContinuousRange("C" & i).Borders(xlEdgeLeft).LineStyle = xlContinuousRange("C" & i).Borders(xlEdgeTop).LineStyle = xlContinuousRange("D" & i).Value = Worksheets("hoja1").Range("D" & i + k - j).ValueRange("D" & i).Interior.ColorIndex = 24Range("D" & i).Borders(xlEdgeBottom).LineStyle = xlContinuousRange("D" & i).Borders(xlEdgeLeft).LineStyle = xlContinuousRange("D" & i).Borders(xlEdgeTop).LineStyle = xlContinuousColumns("D:D").EntireColumn.AutoFitRange("E" & i).Value = Worksheets("hoja1").Range("E" & i + k - j).ValueRange("E" & i).Interior.ColorIndex = 24Range("E" & i).Borders(xlEdgeBottom).LineStyle = xlContinuousRange("E" & i).Borders(xlEdgeLeft).LineStyle = xlContinuousRange("E" & i).Borders(xlEdgeTop).LineStyle = xlContinuousRange("E" & i).Borders(xlEdgeRight).LineStyle = xlContinuousj = j + 1Range("A1").SelectSheets("Hoja1").SelectSelection.EntireRow.DeleteElsek = k + 1ActiveCell.Offset(1, 0).SelectEnd IfLoopRange("A1").SelectEnd Sub

Option ExplicitSub CopiaRotulo()Range("C2:E2").SelectSelection.CopySheets("Bajas").SelectRange("C2").SelectActiveSheet.PasteColumns("C:C").EntireColumn.AutoFitColumns("D:D").EntireColumn.AutoFitColumns("E:E").EntireColumn.AutoFit

End Sub

Nos podríamos preguntar de donde se sacó la tabla que uso Cacho, bueno, esta es realidad una base de datos de la cual se ha obtenido la que tiene el rótulo  “ESTADO”  (cuenta activa, cuenta inactiva). La BASE DE DATOS se obtiene de los FORMULARIOS que tenemos que llenar cuando decidimos sacar una cuenta corriente en un banco

Este es un modelo real de formulario para la solicitud de una cuenta bancaria de una empresa

Page 39: PROGRAMACION VBA PARA EXCEL.docx

De la misma manera, una empresa, podría generar su propia BASE DE DATOS de clientes, recurriendo a la capacidad que tiene Excel para generar FORMULARIOS, o podríamos crear un directorio telefónico y esto es justamente lo que haremos en el próximo ejemplo de macros pero sin recurrir a los formularios, tema que dejaremos para despues..

En adelante, como se vio en caso del empleado del banco (Cacho), procuraré presentar casos de la vida cotidiana, con los que se puede encontrar el empleado de una empresa, o de una pyme, situaciones con las que frecuentemente se ven involucrados profesionales de cualquier orientación o de un usuario que en realidad no sabe que esta frente a una aplicación Excel

EJEMPLOS PRACTICOS DE MACROS Y CODIGO VBADIRECTORIO TELEFONICO

Se puede encarar el problema anterior usando formularios, este método tiene la desventaja de que el código se complica un poco, lo que no debería sorprendernos ya que una celda es un objeto mas simple, pero como veremos, las ventajas superan a las desventajasDIRECTORIO TELEFONICO ( USANDO FORMULARIOS)

 CONSULTA EN UNA LIBRERIA

 CONSULTA EN UNA LIBRERIA   (USANDO FORMULARIOS)

 TICKET DE COMPRA

 COMBOBOX (CUADRO COMBINADO) ORDENADO ALFABRTICAMENTE

 ALTAS, BAJAS Y MODIFICACIONES

 INFORMES

 

  DIRECTORIO TELEFONICO

Page 40: PROGRAMACION VBA PARA EXCEL.docx

 Este directorio telefónico se hará sin recurrir a formularios, simplemente pasaremos los datos que introducimos en tres celdas en la Hoja1 y los pasaremos a la Hoja2, que llamaremos DIRECTORIO

Colocamos los rótulos verticalmente en las celdas coloreadas en azul y en las celdas F6,F7,F8 los datos que serán pasados a la Hoja DIRECTIRIO pero colocados horizontalmente, luego de aplicar la macro, disparada con el botón INTRODUCIR DATOS, todo debe quedar como se ve en la figura de abajo

 

A medida que se van agregando datos, se  va formando el directorio

para hacer esto utilizaremos la siguiente macro en el módulo 1

Para consultar el teléfono y la dirección de alguna persona, en esta ocasión lo haremos utilizando fórmulas

 

 

Page 41: PROGRAMACION VBA PARA EXCEL.docx

colocamos en la celda B6, el apellido y nombre de la persona cuyos datos queremos obtener y en la celda B7 la fórmula

 

para obtener el teléfono y para la dirección la fórmula

si la persona no está en el directorio  aparece la leyenda "NO ESTA EN EL DIRECTORIO" como muestra la figura

 

 

DIRECTORIO TELEFONICO (usando formularios) 

Este directorio telefónico se hará usando FORMULARIOS

Esta manera de encarar el problema tiene más ventajas ya que con un solo formulario podremos introducir los datos de nuestros contactos, consultarlos y darlos de baja. Por otro lado se puede dar al formulario un aspecto más profesional, lo que será de mucha utilidad cuando se encaren problemas más complejos

Accedemos al formulario entrando al editor VBA (Alt+F11) luego vamos a Insertar y en el menú desplegable que se abre pulsamos en UserForm

 

Page 42: PROGRAMACION VBA PARA EXCEL.docx

 

y aparece el formulario y los controles con los que podemos configurarlo

 

Para nuestro formulario vamos a utilizar los comandos: Etiqueta ( Label) Cuadro de texto (TextBox) y botón de comando ( CommandButton) marcados en rojo en la imagen, estos comandos están numerados segun el orden en que los `pnemos

 

Page 43: PROGRAMACION VBA PARA EXCEL.docx

con cada uno de ellos se insertan objetos cuyas propiedades se pueden cambiar en el explorador de propiedades ( también puede hacerse con código), Para que aparezca las propiedades de cada objeto solo debemos pulsar en ellos, por ejemplo en la figura pueden verse las propiedades de un botón al que se le han cambiado las propiedades Name y Caption, cada una de ellas tiene un nombres por defecto; por ejemplo en la propiedad Caption pusimos" INSERTAR" (pues con este botón insertaremos los datos) y en nombre "cmdInsertar" . Esto es muy importante a la hora de programar porque ayuda  la claridad del código (aunque ahora que lo pienso, hubiera sido más claro poner "btnInsertar", esto es a nuestro criterio), hemos hecho lo mismo son los otros controles por ejemplo al “TextBox1” lo cambiamos por “txtApellidoNombre”.

 

 

Como el formulario en si mismo también es un objeto le cambiamos el nombre por "usfDirectorio" al que le cambiamos la propiedad Caption por "DIRECTORIO TELEFONICO" .

Page 44: PROGRAMACION VBA PARA EXCEL.docx

También nos hará falta insertar un módulo al que llamaremos " MostrarFormulario" en el que pondremos este código

se asignará a un botón en la Hoja1

 

que disparará la macro “ Iniciar_Captura” y como consecuencia se mostrara el formulario de la figura

Page 45: PROGRAMACION VBA PARA EXCEL.docx

 Ahora lo que nos resta hacer es programar todos los botones, que como puede verse no nos hemos privado a la hora de ponerlos, la razón es que este directorio se puede adaptar para llenar y mantener una base de datos.Debemos notar que solo hemos usado tres controles.

Para que los botones funcionen hay que hacer Click en ellos, entonces debeos programar el evento Click y para hacerlo hay dos maneras: hacer doble click en el objeto "cmdInsertar" o pulsar en este mismo objeto, con el botón derecho del mouse para que aparezca menú en el que apretamos la tecla ver código

 

en ambos casos vamos a la siguiente pantalla

Page 46: PROGRAMACION VBA PARA EXCEL.docx

 

donde podemos ver en la parte superior, el nombre del botón y el evento Click y el nombre de la macro "cmdInsertar_Click" lista para que la programemos. Hay otros eventos a los que podríamos acceder

 

pero en este caso nos interesa el evento Cick. También podemos ver haciendo doble click en el formulario( o con el botón derecho del mouse) todos los objetos que tenemos dentro del mismo

 

 

de esta manera haciendo doble Click en cada uno de los 6 botones podemos  programarlos como puede verse abajo

 

Page 47: PROGRAMACION VBA PARA EXCEL.docx
Page 48: PROGRAMACION VBA PARA EXCEL.docx

En programación no hay una sola forma de hacer las cosas, y es probable que haya otro algoritmo más eficiente, el que está arriba me pareció fácil de entender, pero más adelante haremos otra versión