PROGRAMACION VBA PARA PARA EXCEL INTRODUCCION: Si bien la grabadora de macros es muy útil y genera un código s iempre correcto, tiene dos desventajas: 1. 2.
genera mas código código que el necesario. sólo puede hacer macros con instruccion es secuenciales secuenciales y sin nada de lógica, lógica, o sea que no pueden tom ar desiciones ante un evento.
Am bas desventajas se pueden solucio nar con la programación VBA que quiere decir prog ramación visual basic para aplicaciones, lo lamento p ero aquíno aquíno tenem os m as remedio que aprender a programar y eso es lo q ue van a ir aprendiendo con los tu torarles de este este apartado. VBA es un a pro gram ación qu e estáíntim ament e relacion ada co n lo s lib ros y las h ojas d e cálculo y para esto Excel cuenta con un editor de pro gramación donde se po ne el código, código, a este se puede acceder, en Exc el 2007, 2007, yendo a la pes tañ a pro gram ador y luego a la sección códig o do nd e hacemos c lic en Visual Basic Basic
En Excel 2003 hay que ir al menú desplegable desplegable herramientas y de ahíla ahíla ruta m acros y Editor d e Visual Basic
ambas form as nos lleva, luego luego d e hacer doble clic en Hoja1por ejemplo, al editor
las mac ros q ue se escrib an aquí, estaran relacionad as con la Hoja1. Comenc emos po r lo mas simple y escribamos u na macro que seleccione la celda celda B5de la Hoja1 del libro VBAProject (Libro2)
d o n d e p o d e m o s v e r q u e e l c ód ód i g o
s e e s c r ib ib e e n t r e " S u b " y " E n d S u b " y q u e e l n o m b r e
no tiene tiene espacios y termina con "( )" . Para ejecutar este código pulsamo s en el icono tecla F5 para que aparezca el panel Macros
o en la
las mac ros q ue se escrib an aquí, estaran relacionad as con la Hoja1. Comenc emos po r lo mas simple y escribamos u na macro que seleccione la celda celda B5de la Hoja1 del libro VBAProject (Libro2)
d o n d e p o d e m o s v e r q u e e l c ód ód i g o
s e e s c r ib ib e e n t r e " S u b " y " E n d S u b " y q u e e l n o m b r e
no tiene tiene espacios y termina con "( )" . Para ejecutar este código pulsamo s en el icono tecla F5 para que aparezca el panel Macros
o en la
dond e puede verse el nom bre de la m acro qu e ya estáseleccionada, luego luego p ulsamos en " ejecutar" ejecutar" y despues en el icono resultado
, o seleccionando " Alta + F5 que nos lleva a la pantalla con el
que es la selección de la celda B5. Otro código mu y simple es escribir un valor en una celda. celda. Escribamos el valor 2007 2007 en la elda D8
y s i l o q u e r em em o s b o r r a r
A estas alturas estamos estamos en condicion es de explicar estos estos sencillos códigos :
En la progr amación VBA se trabaja con OBJ ETOS ( Hojas, celdas, Rangos, Rangos, etc) que com o todo objeto, tiene prop iedades, por ejemplo el objeto celda celda pude tener tener la prop iedad de alto, ancho, estar seleccionada, seleccionada, tener un valor, o no tener ning uno, etc En los códigos que hemos escrito tenemos los objetos Range("B5") ( celda B5) con la propiedad de estar seleccionada seleccionada y el objeto Range("D8" Range("D8" ) ( celda celda D8) con la propiedad de tener un n úmero (2007) y des pu es estar v acía.
CODIGOS MAS SIMPLES SIMPLES PARA EMPEZAR 1-Seleccion 1-Seleccion ar una Celda Range("A1").Select
2-Escribir en la celda qu e estáseleccion ada en el mo men to actu al Activecell.FormulaR1C1="Pedro" la com bin ación los códig os 1 y 2 es equivalente a esta sola línea: Range("A1").Value=" Range("A1").Va lue=" p edro" El uso de FormulaR1C1 FormulaR1C1 sera sera explicado mas adelante adelante
3-Letra Negrita Selection.Font.Bold Sele ction.Font.Bold = True
4-Letra Curs iva Selection .Font.Itali .Font.Italicc = True
5-Letra Subr ayada Selection.Font.Underli Sele ction.Font.Underline ne = xlUnderlineStyleS xlUnderlineStyleSingle ingle
6-Centrar 6-Centrar Texto With Selection .HorizontalAlignm .Horiz ontalAlignm ent = xlCenter End With
7-Alinear a la izqu izqu ierda With Selection .HorizontalAlignm .Horiz ontalAlignm ent = xlLeft End With
8-Alinear a la Derecha With Selection .HorizontalAlignm .Horiz ontalAlignm ent = xlRight End With
9-Tipo 9-Tipo de Letra(Fuente) With Selection .Font .F ont .Na .Name me = " Arial" End With
10-Tam añ o de L etr a(Tam añ o d e Fu en te) With Selectio n.Font .Size = 12 12 End With
11-Copiar Selection.Copy
12-Pegar
ActiveSheet.Paste
13-Cortar Selection.Cut
14-Ordenar A scendente Selection.Sort K ey1:=Range("A 1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom :=1, MatchCase:=False, Orientation:=xlTopToBottom
15-Orden Descendent e Selection.Sort Key1:=Range("A1" ), Order1:=xlDescending, Header:=xlGuess, _ Ord erCustom:=1, MatchCase:=False, Orientation:=xlTopToBotto m
16-Buscar Cells.Find(What:=" Cé sar" , After:=Activ eCell, Loo kIn:=xlForm ulas , Loo kAt :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False).Activate
17-Ins ertar Fila Selection.EntireRow.Insert
18-Elimin ar Fila Selection.EntireRow.Delete
19-Insertar Colum na Selection.EntireColumn.Insert
20-Eliminar Colum na Selection.EntireColumn.Delete
21-Abrir un Libro Workb ooks.Open Filename:="C:\Mis docu mentos \Tablas dinamicas.xls"
22-Grabar un Libro ActiveWorkb ook.SaveAs Filename:="C:\Mis doc umento s\tablas.xls", FileFormat _ :=xlNormal, Password :="" , WriteResPassword:=" ", ReadOnlyRecomm ended:= _ False, CreateBackup:=False La mayoria de estos códigos se pu eden verificar con la grabadora de Macros. Significado de la FORMULA R1C1 La FORMULA R1C1 se emp lea para colo car el resu ltado d e una línea de códig o en la celd a que actu alm ent e estáacti va. Veamos el siguiente caso
supo ngamo s que querem os sum ar los números de de la colum na D y que el resultado aparezca en la celda F6 que es la qu e estáseleccio nada, el códig o q ue se debería escrib ir es el sig uiente
El paré ntesis destacad o en rojo tiene po r ob jetivo c ub rir el tan go don de están lo s n úmero s a sum ar, o sea, desplazarme 2 co lumn as a la izquierda [-2] con 5 y 2 filas hacia arriba es decir [-5] y [-2]. Se entiende qu e R significan filas y C colum nas y qu e anteponemos un - si nos desplazamos hacia la izquierda o hacia arriba. Cuando escribimos una func ión, como en el caso anterior, siempre d ebe ser escrita ActiveCell.Formu laR1C1 = " =SUM(R[]C[]:R[]C[])", p ues el segu nd o igu al es que car acteriza a la función y el paré ntesis el rango do nde s e aplica. Lo qu e se acaba de hacer es lo m ismo que do locar =SUMA(D1:D3) en la celda F6 Hasta ahora hemos h echo una breve intrcduccion a la program acion VBA , pero una cosa fundam ental es entender las estructuras de control de flujo de p ro grama, lo que haremos m ediante ejemplos
Estructuras d e iteracion Frecuentemente algunas líneas de código de repiten m uchas veces con el cons iguiente aumento del tamañ o del pro grama. Esto se so lucionado mediante los llamados estru cturas d e iteración, tamb ié n llam adas c iclos de repetic ión o buc les. Estos son:
While - Wend Do - While - Loop Do - Until --Loop For - Next For-Each-in-Next Estructuras de desicion: .If - Then - Else Select - Case Tipos de datos, funcion es y subrutinas: Tipos de datos Funciones Macros
Estructura de iteración Wile - Wend INTRODUCCION: Esta es un a iteración en la que no sabemos de antemano cuantas veces s e repetiráel ciclo p or lo tanto d ebe haber u na con dición p ara salir de el ya que en caso con trario el cic lo se repetiría en form a indefinida. Para explicar While - Wend me parece que lo m ejor es dar un ejemplo en el que iremos analizando cad a línea de códi go . Vamo s a sum ar un r ango d e número s qu e están ub icados en un a colum na. En la hoja de cálculo solo d ebemos p oner los n úmeros (sin dejar espacios en blanco) . Luego de aplicar l a macro el res ult ado deb eráqu edar en la pr im era celd a vacía. En este caso sumaremo s una cantidad indefinida de números n aturales los qu e introducim os en la colum na "D" empezando por la " D1" y finalizando con la introducción del Nº 283226 com o se ve en la figura
el programa VBA es
Explic ación del códig o (los n úmer os r epresentan las líneas de c ódigo) 1- Siempre se em pieza con Su b seg uida d el nom bre d e 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 cond ición para entr ar o salir del Wh ile y qu iere decir " mien tras la celda activa no es te v ac ía" , 5- Aqu íya entram os en el While do nde h ay 2 líneas qu e se repiten h asta qu e la cond ición no se cumpla. 6- La primer a lí nea dentr o del Wh ile hace bajar una po sición la celda selecc ionad a, de esta forma pod emos acceder a su contenido y la segunda agrega este contenido a la variable "su m" .
7-Con Wend s alimos o vo lvemos a entrar al ciclo según se cum pla o no la condic ión 8- Una vez que salimos del ciclo colocam os el resultado qu eda en una celda activa. 9-Tanbien mos tramos el resultado mediante un MsgB ox (caja de mensajes) 10- Con esta línea se cierra el pro gram a
Finalmente una vez que aplicamo s la macro, la hoja nos qu eda
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 un a iteración en la que no s abemo s de antem ano cu antas veces s e repetiráel ciclo al igu al en la estructura While-Wend y com o en esta debe haber una co ndición para salir de el ya que en caso c ont rario este se repetiría en form a indefinid a. La evaluación de la cond ición se prod uce antes de entrar al ciclo. Para explicar Do-Wile-Loop utilizaremos el m ismo ejemplo que en la estructura Wh ile-Wend. Vamo s a sum ar un r ango d e número s qu e están ub icados en un a colum na. En la hoja de cálculo solo d ebemos p oner los n úmeros (sin dejar espacios en blanco) . Luego de aplicar l a macro el res ult ado deb eráqu edar en la pr im era celd a vacía. En este caso sumaremo s una cantidad indefinida de número s naturales los que introdu cimos en la colum na "D" empezando por la " D1" y finalizando con la introducción del Nº 283226 com o se ve en la figura
el programa VBA es
Explic ación del códig o (los n úmer os r epresentan las líneas de c ódigo) 1- Siempre se emp ieza con Sub s eguid a del nom bre de la mac ro y 2 paré ntesis (Sum Colu mn a()). 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 cond ición para entr ar o salir del Whi le y quiere dec ir "h acer mien tras la celda acti va n o es te vac ía" , 5- Aquíya entram os en el Do-Wh ile dond e hay 2 lí neas qu e se repiten has ta que la con dición n o se cumpla. 6- La primer a lí nea dentr o del Wh ile hace bajar una p osic ión la celda seleccion ada, de esta forma podem os acceder a su con tenido y la segund a agrega este contenido a la variable "su m" . 7-Con L oop salimo s o volvem os a entrar al ciclo según se cum pla o no la condición.
8- Una vez que salimos del ciclo coloc amos el resultado q ueda en una celda activa. 9-Tanbien mo stramos el resultado mediante un MsgB ox (caja de mensajes). 10- Con es ta línea se cie rra el pr og ram a. Código para copiar y pegar Sub SumaColumna() Range("D1").Select Sum = Range("D1") Do While Ac tiveCell.Value <> " " Act iveCell.Offset(1, 0).Select Sum = Sum + ActiveCell.Value Loop Act iveCell.Value = Sum MsgBox Sum End Sub
Finalmente una vez que aplicamo s la macro, la hoja nos qu eda
Se puede ver que los resultados en la celda activa y en la caja de mensajes coinciden y lógicamenteal dan el mismo resu ltado que usando la estructura Wile-Wend.
Estructura de iteración Do- Until - Loop INTRODUCCION: Do-Until-Loo p es sim ilar a Do-While-Loop y a While-Wend, la diferencia esta en la en la form a en que expresamos la condicion : por ejemplo en Do-While-Loop y While-Wend la condicion po dria ser " ejecutar el codigo mientras que la celda no este vacia" y en Do-Until-Loop seria "ejecutar el codig o hasta que la celda este vacia".
Para comparar co n Do-While-Loop y While-Wend vam os a su mar un rango d e números que están ubicados en una co lumna. En la ho ja de cálculo so lo debemo s po ner los números (sin dejar espacio s en blanc o) . Lueg o de aplicar la macr o el resultado d eberáqued ar en la prim era celda v ac ía. Tambien en este caso sum aremos los m ismos n úmeros qu e en los ejemplo s de Do-While- Loo p y While-Wend que introduc imos en la columna "D" em pezando por la "D1" y finalizando con la intro duc ción del Nº 283226 com o se ve en la figur a
el programa VBA es
Explic ación del códig o (los n úmer os r epresentan las líneas de c ódigo) 1- Siempre se em pieza con Su b seg uida d el nom bre d e la macro y 2 paré ntesis (SumaColu mn a2()). 2- Seleccionamos la celda sup erior. "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 cond ición para entr ar o salir del Wh ile y quiere dec ir "ejecu tar el codig o hast a que la celda este vacia", 5- Aqu íya entram os en el While do nde h ay 2 líneas qu e se repiten h asta qu e la cond ición no se cumpla. 6- La primer a lí nea dentr o del Wh ile hace bajar una po sición la celda selecc ionad a, de esta forma podem os acceder a su con tenido y la segund a agrega este contenido a la variable "su m" . 7-Con Wend L oop s alimos o volvem os a entrar al ciclo según se cum pla o no la condic ión 8- Una vez que salimos del ciclo colocam os el resultado qu e queda en una celda activa. 9-Tanbien mos tramos el resultado mediante un Msg Box (caja de mensajes) 10- Con esta línea se cierra el pro gram a
Finalmente una vez que aplicamo s la macro, la hoja nos qu eda
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 un a iteración en la que sabem os d e antemano cuan tas veces se rep etiráel ciclo, po r lo tanto no h ace falta una condición para salir del mism o. Para explicar For daremos u n ejemplo muy simple: Vamos a sumar los prim eros 10 números naturales. En la ho ja de cálculo s olo debemo s po ner los número s (sin dejar esp acios en b lanco ) en una colu mn a, que en este caso serála D. Lu ego de aplicar la macr o el res ultado deber áqued ar en la p rim era celda v acía , este debe ser 55 com o se puede verificar haciendo la suma manu almente. Apro vechando las prop iedades de For podemo s poner los números d esde el código
el programa VBA es
Explic ación del códig o (los n úmer os r epresentan las líneas de c ódigo) 1- Siempre se em pieza con Su b seg uida d el nom bre d e la macro y 2 paré ntesis (Sum()). 2- El primer For es para colocar en la colum na D los diez primeros números n aturales y sign ifica: para la variable i yendo de 1 hasta 10 3-Se coloca en la celda (i,4) el valor actu al de i que se repite al entrar n uevam ente en el For 4- Con Next i se increm enta i en 1 y s e vuelve a entrar al For 5-Se seleccion a la celda "D1" 6- Se coloca en la variable sum el contenido de la celda "D1" ( Sum acum ula la suma de los 10 prim eros n º narut ales) 7-Se en tra al 2º For 8 y 9-Dentro d el For la prim era línea hace bajar u na po sición la celd a seleccion ada, de esta form a podem os acceder a su con tenido y la segund a agrega este contenido a la variable "su m" . 10-En esta línea pod emo s salir o volv er a entrar al For s egún se h aya llegado a 10 o no.
11- En la celda activa colocamo s el valor de sum . 12-Tambien mostram os el resultado mediante un MsgBox. 13-Se termina el pro grama.
Quedando la hoja de calculo com o se ve abajo
Estructura de iteración For - Each- In- Next Hay dos v ariantes de esta estructura 1-En el p rimer tipo debemos especificar el rango en el que s e realiza la iteración Como ejemp lo hallaremos el prom edio del rango A 1:D4,dejando el resultado en la celda C7, para este ejemplo pon dremo s valores enteros
Código:
La par te más im por tante del códig o es
que sign ifica: para cada celda del rango A 1:D4 ejecutar el bloque
y cu ando se llega a la última c elda del rang o, autom áticam ente se hace la cu enta
luego se colo ca el resultado en la celda C8
Código para copiar y pegar Sub PromedioRango() Dim cell As range D i m s u m A s I n t eg e r Dim cant As Integer D i m p r o m A s V a r i an t For Each cell In range("A1:D4").cells sum = sum + cell.Value cant = cant + 1 Next cell p r o m = s u m / c an t range("C8").Select Act iveCell.Value = prom End Sub 2-El segundo tipo utiliza la propiedad CurrentRegion, esta propi edad es muy interesante pues nos permite seleccionar un rango cu yos límites no se con ocen ya qu e CurrentRegion devuelve el rango q ue rodea a una celda seleccionada. Podemo s decir que CurrentRegion es un rango rodeado po r filas y columnas en blanco. En la figura se puede ver dos regiones de este tipo.
Utilizaremos estas regiones para obtener el prom edio de las mism as, para lo cual empleamos el código
Este código sirve para las dos regiones, siempre y cuando s e seleccione un a celda de una u otra de acuerdo en cual se quiera calcular el prom edio. Por ejemplo si queremo s calcular el promedio del rango d e la zona de co ntorno verde el resultado seria
En este caso hemos selecciona do la celda “ H3”, pero se podría haber seleccionado cualquier otra
La diferencia con el caso 1 es
en la que
devuelve el rango d e la región actual. Código para copiar y pegar
Sub PromedioRegion() Dim cell As range D i m s u m A s I n t eg e r Dim cant As Integer D i m p r o m A s V a r i an t For Each cell In A ctiveCell.CurrentRegion.cells sum = sum + cell.Value cant = cant + 1 Next p r o m = s u m / c an t range("D8").Select Act iveCell.Value = prom End Sub
Estructura de decisión If - Then - Else INTRODUCCION: La estructu ra de d ecisión se llama asípues p uede, luego de evaluar un a cond ición, ejecutar un bloque de código u otro. Vamos a ver alguno s ejemplos; 1- Comparar 2 números ubicados en 2 celdas, y responder, en un a tercera celda, si son iguales o n o Comp araremos los Nº 59 y 63 ubicados en las celdas D1 y E1 respectivamente
para respond er a la pregunta utilizaremos el siguiente código
Explicación del código 1-T ítu lo . 2-Si el valor del Nº qu e estáen la c elda " D1" es igu al al qu e estáen la c elda " E1" , enton ces s e ejerc ita el c ódig o d e la línea 3.
3-Se coloca en la celda "D4" el texto " Los v alores de D1 y E1 son iguales".. 4-Sino se d a la co nd ición de la línea 2 s e ejecu ta el cód igo de la l ínea 5. 5 -Se coloca en la celda "D4" el texto " D1 es distinto q ue E1". 6-Se cierra el If. 7-Se cierra el Sub Código para copiar y pegar Sub Condicion al() If ActiveSheet.Range(" D1").Value = Activ eSheet.Range("E1" ).Value Then ActiveSheet.Range("D4").Value = "Lo s Valores de D1 y E1 son iguales" Else ActiveSheet.Range("D4").Value = "D1 es distinto que E1" End If End Sub En nuestro c aso el resultado se tiene que ver como en la figura
Esta estru ctur a pued e anidarse, lo q ue qu iere decir p oner o tro If en la línea 3, 5 o ambas. Esto es necesario al querer averiguar si los Nº son mayores, iguales o d istintos, para hacerlo generamos otra macro en el mismo libro q ue llamaremos , por ejemplo, Anidamiento
Código:
Notar que el segund o If se puso en la parte corr espondiente al Else y se cierra antes que el prim er If. Se puede tam bié n ver qu e hemo s iden tado el código para m ayor clar idad (cos a que recom iendo en fátic am en te)
Resultado
Código para copiar y pegar: Sub Anidamiento() If ActiveSheet.Range(" D1").Value = Activ eSheet.Range("E1" ).Value Then ActiveSheet.Range("D4").Value = "Lo s Valores de D1 y E1 son iguales" Else If ActiveSheet.Range(" D1").Value > Activ eSheet.Range("E1" ).Value Then ActiveSheet.Range("D4").Value = " D1 es m ayor q ue E1" Else ActiveSheet.Range("D4").Value = " E1 es m ayor q ue D1" End If End If End Sub
Se puede ver qu e este código no estáidentado po r lo q ue sug iero hacerlo com o ejercicio.
Estructura de desición Select - Case INTRODUCCION: La estructura de decisión If-Then-Else puede anidarse y co mo este anidamiento se pu ede repetir tantas veces como el problema lo exija, a veces el código s uele hacerse confuso y frecuentemente da lugar a error es, en estos casos se p uede recurrir a la estructu ra de decisión Select-Case. En primer lugar veremos que funciona igual qu e If-Then-Else, para lo que utilizaremos el mism o ejemp lo qu e If-Then-Else en la parte en que co mp arábamo s 2 númer os ub icado s en las celdas D1 y E1 y el prog rama debía responder si estos s on igu ales, mayores o menor es, 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 d iferente de acuerdo al caso de qu e este valor sea = , > o < que el valor actual de l a celda "E1" CODIGO PARA COPIAR Y PEGAR Sub SelectCase() A1 = Range("E1").Value Select Case Range(" D1").Value Case Is = A1 ActiveSheet.Range("D4").Value = "Lo s Valores de D1 y E1 son iguales" Case Is > A1 ActiveSheet.Range("D4").Value = " D1 es m ayor q ue E1" Case Is < A1 ActiveSheet.Range("D4").Value = " E1 es m ayor q ue D1" End Select End Sub La utilidad esencial de esta estructura se m anifiesta cuando los casos q ue se evalúan son mas num erosos com o veremos en el siguiente ejemplo. Introducir en u na celda la nota de un alumn o y en o tra una leyenda que diga si esta aplazado, aprobado y en caso de estar aprobado si su n ota fue buena, muy buena, distinguida o sobresaliente, teniendo en cuenta que: Ap lazado= 1,2,3 Apro bado= 4,5 Bueno = 6,7
Muy bueno= 8 Distinguido= 9 Sobr esaliente= 10 se puede respon der a estas preguntas aplicando este código
CODIGO PARA COPIAR Y PEGAR Sub SelectCase() a = Range(" A2" ).Value Select Case a Case 1 To 3 ActiveSheet.Range("B2").Value = "A PLAZADO" Range("E1").Select Case 4 To 5 ActiveSheet.Range("B2").Value = "A PROBADO" Range("E1").Select Case 6 To 7 ActiveSheet.Range("B2").Value = "B UENO" Range("E1").Select Case 8 ActiveSheet.Range("B2").Value = "MUY BUENO" Range("E1").Select Case 9 Act iveSheet.Range("B 2").Value = " DISTINGUIDO" Range("E1").Select Case 10 Act iveSheet.Range("B 2").Value = " SOBRESAL IENTE" Range("E1").Select End Select End Sub El resultado final queda como se ve en la figura, en este caso hemo s agregado un b otón para disp arar la m acro, el c ual esta señ alado p or la flecha roja
Variables simples y Tipos de datos INTRODUCCION: Una variable simple es una po rción de memoria don de se puede almacenar un valor y se les debe dar u n n om br e para id enti fica rlas en tre sí, tamb ié n est án aso ciad os a u n tip o de d ato. Un tipo de dato es el rango de valores qu e las variables pueden aceptar o, dicho d e otra manera, la cantidad de m emoria 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 resum en en la tabla de abajo.
Funciones INTRODUCCION:
Las funcion es son un trozo de código inserto en el programa pr incipal que recibe uno, muchos o ningún v alor (parámetros o argu mentos ) y qu e a diferencia de las sub rutinas devu elven un único valor, por esta razón se debe especificar( aunque n o es obligatorio)de qu étipo de dato es dicho valor. Las funciones d eben tener un no mb re que las identifique y asípoder ser llamadas po r el prog rama pr incipal. Tambié n n os permiten am pliar el listado de las funciones que ya vienen po r defecto en Excel, estas fun cion es están asoc iadas a un lib ro o u na hoja d e Excel y las denom inamos Func iones person alizadas, son muy útiles,entre otras cosas, cuando la fórmu la que se requiere para resolver un pro blema usando las funciones pro pias de las hojas Excel resulta mu y larga y comp licada, haciendo casi imposible su comp rensión.
Funciones personalizadas: Empezaremos dand o u n ejemplo trivial de una func ión personalizada que p odríamos r esolver sin recurrir a ellas, este ejemplo es so lo para mostrar co mo fun cionan. Supon gamos que queremo s m ultiplicar 2 números enteros (en la figura el entero 12 y el 2)que están en las celdas A 1 y C1 y que el resultad o se devu elva en la celda B3, que ob viamen te se resuelve con la fórmula =A1*C1 ubicada en la celda B3, mentalmente pod emos d ecir que el resultado es 24
p e r o l o h a r e m o s c o n u n a f u n c i ó n d e fi n i d a p o r n o s o t r o s p r o g r a m a d a c o n V B A q u e l l a m a r em o s MULTIPLICA()
Esta función ya esta dispon ible junto con las demás,(solamente en la hoja don de la definimos ) com o se p uede ver en el recuad ro r ojo, tam bié n pu ede verse q ue su definic ión estáentre Fun ctio n y End Function
la usamos poniendo d os números co mo argum ento, tal como puede verse
Aho ra daremos un ejemplo de una fu nción definida por el usuario q ue tiene más utilidad. La ferretería EL BUL ON hace el 20% de desc uento si las vent as su peran las 100 un idades. Esto se puede resolver co n la función SI, com o se puede ver en la siguien te figura
Resolveremos el mism o prob lema definiendo una función, que llamaremos DESCUENTO, con el siguiente código
ya definida la fun ción DESCUENTO() la podem os aplicar
Se ve que el resultado es el mismo , pero si definimos la fun ción DESCUENTO el proceso es mas ráp id o . Com o se h abránot ado en el ejemplo an terior, estáperm itido om itir e l tipo de dato, pero es una buena costum bre ponerlos, ya que nos puede ahorrar much os prob lemas principalmente en la depuración del código en program as largos (En otros idiom as, como en C, esto es obligatorio) por surte VBA tiene la posibilidad de forzar el hecho de tener qu e pon er obligatoriamente los tipos de datos con la instrucción Opc ión Éxp lici t al principio de cada m ódulo y m ejor aún, se puede config urar el editor de VBA para que se p onga auto máticamente esta instrucción en tod os 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 enla siguiente imagen
Aho ra daréun ejemplo , que si bien p uede resolverse con funcion es (mas precisamente fun ciones matriciales) les puedo asegurar que la so lución es mu y com plicada y es aquídond e se ve la verdadera utilidad de las funcio nes person alizadas. Se trata de la obtención de las iniciarles de un n o m b r e c o m p l e to . Su código es el siguiente:
usaremos la funcion recien definida en la siguiente tabla
Llegando a este punto debem os hacer algunas aclaraciones del código En pr imer lu gar po dem os v er que se us an las func iones d e librería de VBA (fun cion es que ya están defin idas), más precis amente las fu ncio nes de cad ena Len(), Asc () y Mid(). Una cadena es una serie de caracteres tratados com o una m isma unid ad, estos caracteres pueden ser letras, números o caracteres especiales, como p ueden ser /, *, &, %, @ y otro s mu chos incluido el espacio. A tod os estos c aracteres les co rrespo nd e un códig o nu mé rico llam ado ASCII . Estas funciones sirven para el manejo de cadenas, hay otras que iremos ana lizando cuando sea necesario.
Función Len Esta función no s devuelve el número de caracteres de una cadena, por lo tanto retorna un número entero y r ecibe un parámetro que es u n tipo de dato string . Su sintaxis es: Len([cadena de caracteres]) Ejemplo: Si Texto="ho la como estas" Len(Texto) devuelve el valor 15.
Función Asc Con la función Asc p odemos obtener el código ASCII de un caracter
Función Mid Extrae par tes de un a cadena y r ecibe 3 parámetr os. Sintaxis: Mid(cadena, inicio, longitud ) El parámetr o c adena es la cad ena a extraer c aracteres. inicio es el carácter des de don de se com ienza la extracción. lon gitu d es la cantidad de caract eres devuelto s a partir del carácter de ini cio. Dicho esto el código se puede entender mas claramen te 1 Function INICIALES(Texto As String) As String 2 D im s t r L o n g A s L o n g , i A s L o n g 3 Dim textTemp A s String 5 strLong = Len(Texto) 7 For i = 1 To strLong 8 If Asc (Mid(Texto, i, 1)) >= 65 And As c(Mid(Texto, i, 1)) <= 90 Then 9 textTemp = textTem p & Mid (Texto, i, 1) 9 End If 10 Next i 12 INICIALES = textTem p 14 End Function Línea 1: se da el no mb re a la func ión (INICIALES) y se defin e el nom bre (Texto) y el tipo del parámetr o que recibe.
Líneas 2 y 3: se dec laran las v ariables q ue se v an a us ar.
Línea 5: se asigna a la variable strL ong la long itud d el string Texto, o sea que se cuen tan cu antos caracteres hay en la celda que co ntiene el nombre Línea 7: s e entr a en u n c iclo for-Next que recorre el string Texto, o sea que com ienza desde 1 y termina en strLong. Línea 8: esta e s la l ínea m ás im po rtan te. ya q ue en cad a cic lo s e evalúa cada c arácter y d eterm ina si es un a letra mayúscu la (Asc>=65 o Asc<=90). Línea 9: S i es m ayúsc ula ag reg a el car ácter a la var iable s trTem p. Línea 12: Al term inar la rut ina, la función INICIALES recib e el valor de s trTemp que es d on de se guardan las iniciales. Para comprob ar que funciona dejo el código para copiar y pegar Function INICIALES(Texto As String) As String Dim strLong As Lo ng, i As Long Dim textTemp As String strLon g = Len(Texto) For i = 1 To strLo ng If Asc (Mid(Texto, i, 1)) >= 65 And Asc (Mid(Texto, i, 1)) <= 90 Then textTemp = textTemp & Mid(Texto , i, 1) End If Next i INICIALES = textTem p End Function
FUNCIONES DE HOJ A( NA TIVAS): Para definir funcion es personalizadas, a demás de las funcion es prop ias de VBA , se pueden usar las llamadas fu ncio nes de hoja ( Work Sheet Func tion s en ingles ) tamb ié n llamad as func ion es nativas, es decir las func iones qu e norm almente están dis ponibles en las hojas d e Excel, como son , SUMA, BUSCA RV, MAX, PROMEDIO, COINCIDIR, po r no mb ras algun as. Para usarlas debemos anteponer al nom bre de la función( que debe estar en ingles) la expresión App lication.WorkSheetFunction.[nom bre d e la fu nción](parámetros).Si queremos usar la func ión BUACARV, la expresión debe ser:
App lication.WorkSheetFunction.VLookup (Valor a b uscar, Matriz de búsqueda; Colu mna, Valor lógico) Alternativamente: WorkSheetFunction.VLookup () o Function.VLookup () Como se puede ver los p arámetros de la función son lo s mism os qu e los de las funcion es nativas Empezaremos dando un ejemplo en el que se usa la función DESREF que en ingles es Match. Como todos s abemos la función BUACARV so lo puede traer valores que están en la misma fila del valor busc ado pero en colum nas a la derecha de este, el problema se podria resolver con u n anidamiento de las funcion e s INDICE y COINCIDIR , nuestro ob jetivo es definir una función muy parecida a BUSCARV pero qu e busq ue hacia la izquierda, a esta función la llamaremos BUSCARVIZQ Supon gamos q ue tenemos la siguiente tabla
y queremos: A) Introducir la tabla en una hoja se Excel B) Que dado el código d e produc to se devuelva en dos c eldas la herramienta y el precio de la misma C) No emp lear anidamiento de func iones Como vemos el código del artículo s e encuentra en la colum na central, por lo tanto para respond er debemos hacer una búsqueda a la izquierda y otra a la derecha, por lo tanto d ebemos recu rrir a BUSCARV y a una UDF( función definida por el usuario) que com o ya dijimos llamaremos BUSCARIZQ que definimos c on el siguiente código: Function BUSCARVIZQ(valor_a_buscar, matriz_de_busqueda As Range, indice_de_Col A s Integer, ValorExacto As Boolean) Dim NrFila As Lon g NrFila = Ap plicatio n.Work sheetFun ction .Match(valor_a_bu scar, matr iz_de_busq ueda.Resize( , 1), ValorExacto) BUSCA RVIZQ = matriz_de_bu squ eda(NrFila, 1).Offset(0, indice_de_Col) End Function ya estamos en con diciones de itro ducir la fórmu la BUSCARIZQ con sus p arámetros
que ub icamos en la celda D16 y BUSCARV
que ubicam os en la celda D15, haciendo esto po demos repo nder al punto B ) como pu ede verse en la figura
marcam os con un recuadro rojo la fórmula y el rango introdu cido, que como s e ve es el mismo para amb as fórmul as, no asíla colum na que para BUSCA RIZQ 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 nomb re a la función y los parámetros, prop orcion ando el tipo d e dato. Notar que no se da el tipo de d ato d el parámetro valor_a_buscar ya que este puede s er una cadena de caracteres, un número o una com binación de ambos. Lo m ismo podem os decir del parámetro q ue devuelve la función
Dim NrFila As Lon g Se define la variable NrFila NrFila = Ap plicatio n.Work sheetFun ction .Match(valor_a_bu scar, matr iz_de_busq ueda.Resize( , 1), ValorExacto) Se asigna a NrFila lo que devuelve la funcion Match (COINCIDIR) do nde se redimen cion a la matriz_de_busqueda con Recize matr iz_de_busq ueda.Resize( , 1) esto se h ace para que la m atriz de búsqueda seleccionada, que es rectangular, se transform e en una matriz column a, ya que Match solo b usca en rangos colum na. V e am o s c o n o f u n c i o n a : Selection.Resize(12,4).Select si el rango seleccionado inicialmente es C4:E12 , o sea 8 filas y 3 colum nas, luego aplicar Resize el Rango qu eda con 12 filas y 4 colum nas en nuestro caso el rango s eleccionado es 11 filas y 2 columnas, com o a las filas las queremos dejar igual no s e pone n ada com o pr imer parámetro y si,ademas, queremo s qu e el rango final sea de un a colum na se p one( ,1) así, el rango s eleccionado queda u n rang o co lumn a Se podr ía haber om itido el Resize seleccionan do so lo el rango c entral, esto se hizo para que los parámetr os sean ig uales a los de la fun ción BUSCA DV, salvo por el -1 de indice_de_Col finalmente el código BUSCA RVIZQ = matriz_de_bu squ eda(NrFila, 1).Offset(0, indice_de_Col)
asigna a BUSCARVIZQ el valor que estáen la c elda activ a matriz_de_busqueda(NrFila, 1) d esplazada una celda a la izquierda( i ndice_de_Col ). Esto se log ra con la PROPIEDAD Offset que seleciona celdas a cierta distancia de la celda activa p o r e j em p l o : ActiveCell.Offset(-5,2).Select selecciona la celda que se encuentra 5 filas hacia arriba y 2 c olum nas 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 c olum nas a la derecha, es decir C2 pasa a ser G4(C2 = G4), tener en cu enta que 2 es fila y 4 colum na.
com o se ve Offset hace lo mism o que DESREF. La programación VBA tiene sus pro pias funciones com o Mid y Len, que ya se describieron, estas permiten trabajar con cadenas de caracteres, con números, fechas, horas, mos trar mensajes por pantalla y muc has otras q ue pod emos listar por categorías, como sigue: 1-Funcion es de conversión de tipos (Conversion) 2-Funcion es Financieras (Financial) 3-Funcion es de cadenas (Strings) 4-Funcio nes matem áticas (Math) 5-Funcion es de compro bación (Information) 6-Funcion es de Interacción(Interaction) 7-Funcion es de Fecha y Hora (DateTime) 8-funciones d el sistema (FileSystem)
Macros INTRODUCCION: Las mac ro s so n p equ eñ os tro zos de c ódig o VB A q ue n o d eber ían ten er m ás d e 15 líneas y n o devuelven un valor en su n omb re, como las funcion es, sino qu e hacen tareas especificas, estas tareas muchas veces pu eden realizase manualmente y o tras 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 p or lo gen eral se ejecutan a pedid o del oper ador , pero tambié n pued en hacerlo autom áticamente, una form a es debido a que s e prod uzca algún cam bio en una h oja de Excel, com o puede ser el cambio en el valor de una celda. A estos cam bios se los deno mina EVENTOS y para que se ejecuten las macros, hay que pro gramar dicho s EVENTOS.
La for ma m ás práctica de po ner en acc ión una m acro es m ediante bo tones as ociad os a ellas. Para hacerlo vam os a la pestaña prog ramad or y d e allípu lsamo s el bo tón Insertar p ara que s e desplieguen los contro les de form ulario, como se ve en la figura
al apretar el ícon o del bo tón aparece una cr uz, ubicam os esta cr uz en el lugar qu e nos p arece con venient e y arrastrándo la, con el bo tón izquierd o del m ous e apretado, po dem os d arle el tamañ o adecuado. Al soltar el mous e tenemos algo p arecido a esta imagen
simu ltáneamente aparece un panel don de pod emos seleccionar la macro que queremo s asociar
al aceptar ya tenemos el botón asociado a la macro, poste riormente lo pod emos ro tular convenientemente. A c ontinuacion daremos un ejemp lo práctico sim ple:
Un b anco qu iere dar de b aja las cuentas q ue no tuviero n m ovim ientos po r 3 o m ás añ os, cons iderándolas in activas 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 po dría actualizar manu almente, pero s i imagin amo s qu e la lista tiene 5000 o m ás clien tes, se tardaría mu cho tiemp o, por tal mo tivo es un p rob lema para r e s o l v er c o n u n a m a c r o . Coloqu emos la lista en la hoja 1 de un libro de Excel 2007 o Excel 2003
insetamos el siguiente código
Luego d e de oprimir el botón que asociamos a la macro, que llamamos A ctualizarListado, el listado queda
Código para copiar y pegar Sub A ctualizarListado() Range("E3").Select Do Whi le ActiveCell.Value <> "" If ActiveCell.Value = "in activa" Then Selection.EntireRow.Delete Else Act iveCell.Offset(1, 0).Select End If Loop Range("A1").Select End Sub
Cuando se dispara una m acro no hay vuelta atrás, si se borra un dato, este se pierde(a no s er que se cierre el archivo no se gu arden los cambio s y se lo abra otra vez). Muchas veces podem os necesitar el listado original, por ejemplo para obtener, en el caso que estamo s tratando, otro co n los clien tes q ue fu ero n d ado s d e baja, el qu e se har ía con un a mac ro c asi id é ntic a a la dada m ás arriba, que dicho sea de paso la confeccion ó un empleado d el área de com putación del banc o, al
que le pidieron las dos listas a último m omento . Cacho (asíle dicen al empleado), que por suerte no h abía apretado el botón ACTUA LIZAR, decidió hacer las dos c osas al mis mo tiem po , es decir: dejar en la Hoja1un listado con los clientes activos y en la Hoja2 los clientes dados de baja, a esta ho ja la reno mb ro " Bajas" , tamb ié n cop io com o respald o, el listado orig inal en la Hoja3. Cuand o terminó el trabajo le quedaron las siguientes macro s
y para el rótulo de "B ajas"
"Co piaRotulo" 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 p ensó que d espué s de todo, se hubiera tom ado m enos tr abajo cerrando el archivo y abrié ndo lo otra vez, aun que pen sándo lo mejo r se dijo " ya teng o hech a la mac ro y segu ro qu e la voy a volver a usar”. Si, seg ur o q ue la ib a a vol ver u sar y esta v ez tod o el tr abajo ser ía más rápid o.
Macros para copiar y pegar Option Explicit Sub ActualizarListado2() Dim i A s Integer Dim k A s Integer k = 1 Dim j As Integer j = 1 Call CopiaRotulo Sheets("Hoja1").Select App lication.CutCopyMod e = False Range("E3").Select Do Whi le ActiveCell.Value <> "" If ActiveCell.Value = "in activa" Then Sheets("Bajas").Select Range(" E65536").End(xlUp ).Offset(1, 0).Select i = ActiveCell.Row Range("C" & i).Value = Works heets("hoja1").Range("C" & i + k - j).Value Range("C" & i).Interior.ColorIndex = 24 Range("C" & i).Borders(xlEdgeBottom ).LineStyle = xlContinuo us Range("C" & i).Borders(xlEdgeLeft).LineStyle = xlContinu ous Range("C" & i).Borders(xlEdgeTop).LineStyle = xlContinuou s Range("D" & i).Value = Works heets("hoja1").Range("D" & i + k - j).Value Range("D" & i).Interior.ColorIndex = 24 Range("D" & i).Borders(xlEdgeBottom ).LineStyle = xlContinuo us Range("D" & i).Borders(xlEdgeLeft).LineStyle = xlContinuo us Range("D" & i).Borders(xlEdgeTop).LineStyle = xlContinuous Columns("D:D").EntireColumn.AutoFit Range("E" & i).Value = Worksh eets("h oja1").Range("E" & i + k - j).Value Range("E" & i).Interior.ColorIndex = 24 Range("E" & i).Borders(xlEdgeBottom ).LineStyle = xlContinuo us Range("E" & i).Borders(xlEdgeLeft).LineStyle = xlContinu ous Range("E" & i).Bord ers(xlEdgeTop).LineStyle = xlContinuo us Range("E" & i).Bord ers(xlEdgeRight).LineStyle = xlContinuou s j = j + 1 Range("A1").Select Sheets("Hoja1").Select Selection.EntireRow.Delete Else k = k + 1 Act iveCell.Offset(1, 0).Select End If Loop Range("A1").Select End Sub Option Explicit Sub CopiaRotulo() Range("C2:E2").Select Selection.Copy Sheets("Bajas").Select Range("C2").Select ActiveSheet.Paste Columns("C:C").EntireColumn.AutoFit Columns("D:D").EntireColumn.AutoFit Columns("E:E").EntireColumn.AutoFit End Sub Nos p odríamos preguntar d e don de se sacó la tabla que u so Cacho, bueno, esta es realidad un a 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 ob tiene de los FORMULARIOS que tenemos qu e llenar cuando decidimo s sacar una cuenta corriente en un banco Este es un mod elo real de formu lario para la solicitud de un a cuenta bancaria de una empresa
De la mism a manera, una emp resa, pod ría generar su p rop ia BASE DE DATOS de clien tes, recu rriend o a la capacidad q ue tiene Excel par a generar FORMULARIOS, o pod ríamo s crear u n directorio telefónico y esto es justamente lo que haremo s en el próximo ejemplo de m acros pero sin recurrir a los form ularios, tema que dejaremos para despues.. En adelante, como se vio en caso del empleado del banco (Cacho), procu rarépresentar casos de la vida cotidiana, con los q ue se puede encontrar el empleado de una empresa, o de una pyme, situaciones con las que frecuentemente se ven involucrados pr ofesionales de cualquier orientación o de un u suario que en realidad no s abe que esta frente a una aplicación Excel
EJEMPL OS PRACTICOS DE MA CROS Y CODIGO VBA DIRECTORIO TELEFONICO Se puede enc arar el prob lema anterio r usan do fo rm ularios , este mé tod o tiene la desvent aja de que el código se co mplica u n po co, lo qu e no d eberí a sorprend ernos ya q ue una celda es u n ob jeto mas sim ple, pero como veremos, las ventajas superan a las desventajas
DIRECTORIO 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
Este directorio telefónico se harásin recurrir a formu larios, simplemente pasaremos los datos que introdu cimos en tres celdas en la Hoja1 y los p asaremos a la Hoja2, que llamaremos DIRECTORIO
Colocamo s los rótulos verticalmente en las celdas coloreadas en azul y en las c eldas F6,F7,F8 los dato s que serán pasado s a la Hoja DIRECTIRIO pero coloc ados h orizon talment e, luego d e aplicar la macro, disparada con el botón INTRODUCIR DATOS, todo debe quedar com o se ve en la figura de abajo
A medida que se van agregando datos, se va formando el directorio para hacer esto utilizaremos la sigu iente macro en el módulo 1
Para con sultar el telé fono y la dirección d e alguna per son a, en esta ocasión lo harem os u tilizando fórmulas
colocam os en la celda B6, el apellido y nom bre de la persona cuyos datos q ueremos ob tener y en la celda B7 la fórmula
para o btener el telé fono y p ara la dir ección la f órmu la
si la person a no estáen el directorio aparece la leyenda "NO ESTA EN EL DIRECTORIO" com o mu estra la figura
DIRECTORIO TELEFONICO (usando formularios) Este dir ectorio telefónico s e haráusand o FORMULA RIOS Esta manera de encarar el problem a tiene más ventajas ya que co n un solo fo rmu lario podrem os introdu cir los datos de nuestros con tactos, consultarlos y darlos de baja. Por otro lado se puede dar al for mu lario un aspecto más pro fesion al, lo qu e seráde mu cha uti lidad cu ando se encaren pro blem as más com plejos Accedem os al form ulario entrando al editor VBA (Alt+F11) luego v amos a Insertar y en el menú desplegable que se abre pulsamos en UserForm
y aparece el form ulario y los controles con los que podemo s configur arlo
Para nuestro form ulario vamos a utilizar los com andos: Etiqueta ( Label) Cuadro d e texto (TextBox ) y botón de com ando ( Command Button ) marcados en rojo en la imagen, estos com andos están num erados segun el orden en qu e los `pnemos
con c ada uno de ellos se insertan objetos cuyas prop iedades se pueden cambiar en el explorador de pr op iedades ( tamb ié n pu ede hacers e con c ódigo ), Para que aparezca las p rop iedades d e cada objeto solo debemos p ulsar en ellos, por ejemplo en la figura pueden verse las propiedad es de un botón al que se le han cambiado las propiedades Name y Caption, cada una de ellas t iene un nom bres por defecto; por ejemplo en la propiedad Capti on pusimo s" INSERTAR" (pues con este botón insertaremos los datos) y en nomb re "cm dInsertar" . Esto es muy imp ortante a la hora de prog ramar porq ue 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 mism o son los otr os controles por ejemplo al “TextBox1” lo cambiamos por “txtApellidoNombre”.
Como el formulario en si m ismo tambié n es un objeto le cambiam os el nom bre por "us fDirectorio" al que le camb iamos la pro piedad Caption p or " DIRECTORIO TELEFONICO" .
Tamb ié n n os h aráfalta insertar u n m ódulo al q ue llamarem os " Mostr arForm ulario " en el que pond remos este código
se asig naráa un bo tón en la Hoja1
que disparará la macro “ Iniciar_Captura” y como consecuencia se mostrara el formulario de la figura
Aho ra lo que nos resta hacer es programar todos los bo tones, que com o puede verse no nos hemo s privado a la hor a de ponerlos, la razón es que este directorio se pu ede adaptar para llenar y mantener una base de datos. D e b em o s n o t a r q u e s o l o h e m o s u s a d o t r e s c o n t r o l es . Para que los botones fun cionen hay qu e hacer Click en ellos, entonces debeos p rogramar el evento Click y para hacerlo hay dos maneras: hacer doble click en el objeto "c mdInsertar" o pulsar en este mismo objeto, con el botón derecho del mou se para que aparezca menú en el que apretamos la tecla ver código
en ambos casos vamo s a la siguiente pantalla
dond e podemo s ver en la parte superior, el nomb re del botón y el evento Click y el nomb re de la macro "c mdInsertar_Click" lista para que la program emos. Hay otros eventos a los q ue pod ríamos acceder
pero en este caso n os in teresa el evento Cick . Tamb ié n po dem os ver h aciend o do ble clic k en el form ulario( o con el botón derecho del mous e) todos los ob jetos que tenemos dentro d el mismo
de esta manera haciendo dob le Click en cada uno de los 6 boton es podemos prog ramarlos como puede verse abajo