Академический Документы
Профессиональный Документы
Культура Документы
INTRODUCCION:
Si bien la grabadora de macros es muy til y genera un cdigo siempre correcto, tiene dos
desventajas:
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
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)
no tiene espacios y termina con "( )" . Para ejecutar este cdigo pulsamos en el icono o en la
tecla F5 para que aparezca el panel Macros
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
y si lo queremos borrar
3-Letra Negrita
Selection.Font.Bold = True
4-Letra Cursiva
Selection.Font.Italic = True
5-Letra Subrayada
Selection.Font.Underline = xlUnderlineStyleSingle
6-Centrar Texto
With Selection
.HorizontalAlignment = xlCenter
End With
7-Alinear a la izquierda
With Selection
.HorizontalAlignment = xlLeft
End With
8-Alinear a la Derecha
With Selection
.HorizontalAlignment = xlRight
End With
9-Tipo de Letra(Fuente)
With Selection
.Font .Name = "Arial"
End With
11-Copiar
Selection.Copy
12-Pegar
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:="Csar", 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:=False
La mayoria de estos cdigos se pueden verificar con la grabadora de Macros.
supongamos que queremos sumar los nmeros de de la columna D y que el resultado aparezca en
la celda F6 que es la que est seleccionada, el cdigo que se debera escribir es el siguiente
El parntesis destacado en rojo tiene por objetivo cubrir el tango donde estn los nmeros 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 funcin, 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 funcin y el parntesis 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 lneas de cdigo de repiten muchas veces con el consiguiente aumento
del tamao del programa. Esto se solucionado mediante los llamados estructuras de iteracin,
tambin llamadas ciclos de repeticin o bucles.
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, funciones y subrutinas:
Tipos de datos
Funciones
Funciones propias de VBA
Eventos
Metodos
Macros
Grficos en VBA
Estructura de iteracin Wile - Wend
INTRODUCCION:
Esta es una iteracin en la que no sabemos de antemano cuantas veces se repetir el ciclo por lo
tanto debe haber una condicin para salir de el ya que en caso contrario el ciclo se repetira en
forma indefinida.
Para explicar While - Wend me parece que lo mejor es dar un ejemplo en el que iremos analizando
cada lnea de cdigo.
Vamos a sumar un rango de nmeros que estn ubicados en una columna. En la hoja de clculo
solo debemos poner los nmeros (sin dejar espacios en blanco) . Luego de aplicar la macro el
resultado deber quedar en la primera celda vaca.
En este caso sumaremos una cantidad indefinida de nmeros naturales los que introducimos en la
columna "D" empezando por la "D1" y finalizando con la introduccin del N 283226 como se ve en
la figura
el programa VBA es
Explicacin del cdigo (los nmeros representan las lneas de cdigo)
1- Siempre se empieza con Sub seguida del nombre de la macro y 2 parntesis (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 lnea es la condicin para entrar o salir del While y quiere decir "mientras la celda activa no
este vaca",
5- Aqu ya entramos en el While donde hay 2 lneas que se repiten hasta que la condicin no se
cumpla.
6- La primera lnea dentro del While hace bajar una posicin la celda seleccionada, de esta forma
podemos acceder a su contenido y la segunda agrega este contenido a la variable "sum".
7-Con Wend salimos o volvemos a entrar al ciclo segn se cumpla o no la condicin
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 lnea se cierra el programa
INTRODUCCION:
Esta es una iteracin 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 condicin para salir de el ya que en
caso contrario este se repetira en forma indefinida. La evaluacin de la condicin 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 nmeros que estn ubicados en una columna. En la hoja de clculo
solo debemos poner los nmeros (sin dejar espacios en blanco) . Luego de aplicar la macro el
resultado deber quedar en la primera celda vaca.
En este caso sumaremos una cantidad indefinida de nmeros naturales los que introducimos en la
columna "D" empezando por la "D1" y finalizando con la introduccin del N 283226 como se ve en
la figura
el programa VBA es
Explicacin del cdigo (los nmeros representan las lneas de cdigo)
1- Siempre se empieza con Sub seguida del nombre de la macro y 2 parntesis (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 lnea es la condicin para entrar o salir del While y quiere decir "hacer mientras la celda
activa no este vaca",
5- Aqu ya entramos en el Do-While donde hay 2 lneas que se repiten hasta que la condicin no se
cumpla.
6- La primera lnea dentro del While hace bajar una posicin 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 segn se cumpla o no la condicin.
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 lnea se cierra el programa.
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".
Para comparar con Do-While-Loop y While-Wend vamos a sumar un rango de nmeros que estn
ubicados en una columna. En la hoja de clculo solo debemos poner los nmeros (sin dejar
espacios en blanco) . Luego de aplicar la macro el resultado deber quedar en la primera celda
vaca.
Tambien en este caso sumaremos los mismos nmeros 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 introduccin del N 283226 como se ve en la figura
el programa VBA es
Se puede ver que los resultados en la celda activa y en la caja de mensajes coinciden.
INTRODUCCION:
Esta es una iteracin en la que sabemos de antemano cuantas veces se repetir el ciclo, por lo
tanto no hace falta una condicin para salir del mismo.
Para explicar For daremos un ejemplo muy simple:
Vamos a sumar los primeros 10 nmeros naturales. En la hoja de clculo solo debemos poner los
nmeros (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 vaca , este debe ser 55 como se
puede verificar haciendo la suma manualmente.
Aprovechando las propiedades de For podemos poner los nmeros desde el cdigo
el programa VBA es
Cdigo:
La parte ms importante del cdigo es
que significa: para cada celda del rango A1:D4 ejecutar el bloque
Este cdigo 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 podra haber seleccionado cualquier otra
en la que
INTRODUCCION:
La estructura de decisin se llama as pues puede, luego de evaluar una condicin, ejecutar un
bloque de cdigo u otro.
Vamos a ver algunos ejemplos;
1- Comparar 2 nmeros ubicados en 2 celdas, y responder, en una tercera celda, si son iguales o
no
Compararemos los N 59 y 63 ubicados en las celdas D1 y E1 respectivamente
Esta estructura puede anidarse, lo que quiere decir poner otro If en la lnea 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
Cdigo:
Notar que el segundo If se puso en la parte correspondiente al Else y se cierra antes que el primer
If. Se puede tambin ver que hemos identado el cdigo para mayor claridad (cosa que recomiendo
enfticamente)
Resultado
Sub Anidamiento()
If ActiveSheet.Range("D1").Value = ActiveSheet.Range("E1").Value Then
ActiveSheet.Range("D4").Value = "Los Valores de D1 y E1 son iguales"
Else
If ActiveSheet.Range("D1").Value > ActiveSheet.Range("E1").Value Then
ActiveSheet.Range("D4").Value = "D1 es mayor que E1"
Else
ActiveSheet.Range("D4").Value = "E1 es mayor que D1"
End If
End If
End Sub
Se puede ver que este cdigo no est identado por lo que sugiero hacerlo como ejercicio.
INTRODUCCION:
La estructura de decisin If-Then-Else puede anidarse y como este anidamiento se puede repetir
tantas veces como el problema lo exija, a veces el cdigo suele hacerse confuso y frecuentemente
da lugar a errores, en estos casos se puede recurrir a la estructura de decisin 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 comparbamos 2 nmeros ubicados en las celdas D1 y
E1 y el programa deba responder si estos son iguales, mayores o menores, ubicando la respuesta
en la celda D4
El cdigo es
escencialmente este cdigo evala el valor actual de la celda "D1" y se escribe un cdigo diferente
de acuerdo al caso de que este valor sea = , > o < que el valor actual de la 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 = "Los Valores de D1 y E1 son iguales"
Case Is > A1
ActiveSheet.Range("D4").Value = "D1 es mayor que E1"
Case Is < A1
ActiveSheet.Range("D4").Value = "E1 es mayor que D1"
End Select
End Sub
La utilidad esencial de esta estructura se manifiesta cuando los casos que se evalan 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
Muy bueno= 8
Distinguido= 9
Sobresaliente= 10
se puede responder a estas preguntas aplicando este cdigo
INTRODUCCION:
Una variable simple es una porcin de memoria donde se puede almacenar un valor y se les debe
dar un nombre para identificarlas entre s, tambin estn 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:
Las funciones son un trozo de cdigo inserto en el programa principal que recibe uno, muchos o
ningn valor (parmetros o argumentos) y que a diferencia de las subrutinas devuelven un nico
valor, por esta razn 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. Tambin nos permiten ampliar el listado de las funciones que ya vienen por
defecto en Excel, estas funciones estn asociadas a un libro o una hoja de Excel y las
denominamos Funciones personalizadas, son muy tiles,entre otras cosas, cuando la frmula que
se requiere para resolver un problema usando las funciones propias de las hojas Excel resulta
muy larga y complicada, haciendo casi imposible su comprensin.
Funciones personalizadas:
Empezaremos dando un ejemplo trivial de una funcin personalizada que podramos resolver sin
recurrir a ellas, este ejemplo es solo para mostrar como funcionan.
Supongamos que queremos multiplicar 2 nmeros enteros (en la figura el entero 12 y el 2)que
estn en las celdas A1 y C1 y que el resultado se devuelva en la celda B3, que obviamente se
resuelve con la frmula =A1*C1 ubicada en la celda B3, mentalmente podemos decir que el
resultado es 24
pero lo haremos con una funcin definida por nosotros programada con VBA que llamaremos
MULTIPLICA()
Esta funcin ya esta disponible junto con las dems,(solamente en la hoja donde la definimos)
como se puede ver en el recuadro rojo, tambin puede verse que su definicin est entre Function
y End Function
la usamos poniendo dos nmeros como argumento, tal como puede verse
Ahora daremos un ejemplo de una funcin definida por el usuario que tiene ms utilidad.
La ferretera EL BULON hace el 20% de descuento si las ventas superan las 100 unidades.
Esto se puede resolver con la funcin SI, como se puede ver en la siguiente figura
Resolveremos el mismo problema definiendo una funcin, que llamaremos DESCUENTO, con el
siguiente cdigo
ya definida la funcin DESCUENTO() la podemos aplicar
Funcin Len
Esta funcin nos devuelve el nmero de caracteres de una cadena, por lo tanto retorna un nmero
entero y recibe un parmetro 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.
Funcin Asc
Con la funcin Asc podemos obtener el cdigo ASCII de un caracter
Funcin Mid
Extrae partes de una cadena y recibe 3 parmetros.
Sintaxis: Mid(cadena, inicio, longitud)
El parmetro cadena es la cadena a extraer caracteres.
inicio es el carcter desde donde se comienza la extraccin.
longitud es la cantidad de caracteres devueltos a partir del carcter de inicio.
Dicho esto el cdigo se puede entender mas claramente
1 Function INICIALES(Texto As String) As String
2 Dim strLong As Long, i As Long
3 Dim textTemp As String
5 strLong = Len(Texto)
7 For i = 1 To strLong
8 If Asc(Mid(Texto, i, 1)) >= 65 And Asc(Mid(Texto, i, 1)) <= 90 Then
9 textTemp = textTemp & Mid(Texto, i, 1)
9 End If
10 Next i
12 INICIALES = textTemp
14 End Function
Lnea 1: se da el nombre a la funcin (INICIALES) y se define el nombre (Texto) y el tipo del
parmetro que recibe.
End Function
que ubicamos en la celda D15, haciendo esto podemos reponder al punto B) como puede verse en
la figura
marcamos con un recuadro rojo la frmula y el rango introducido, que como se ve es el mismo
para ambas frmulas, no as la columna que para BUSCARIZQ es -1
Estas funciones convierten una proposicion lgica o expresion en un tipo de dato especfico
Su sintxis es:
CBool(expr)
CByte(expr)
CMoneda(expr)
CFecha(expr)
CDoble(expr)
CDec(expr)
CEntero(expr)
CLargo(expr)
CSimple(expr)
CCadena(expr)
CVariante(expr)
Macros
INTRODUCCION:
Las macros son pequeos trozos de cdigo VBA que no deberan tener ms de 15 lneas 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 cdigos mas grandes
Estos cdigos por lo general se ejecutan a pedido del operador, pero tambin pueden hacerlo
automticamente, una forma es debido a que se produzca algn 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.
La forma ms prctica de poner en accin una macro es mediante botones asociados a ellas. Para
hacerlo vamos a la pestaa programador y de all pulsamos el botn Insertar para que se
desplieguen los controles de formulario, como se ve en la figura
al apretar el cono del botn aparece una cruz, ubicamos esta cruz en el lugar que nos parece
conveniente y arrastrndola, con el botn izquierdo del mouse apretado, podemos darle el tamao
adecuado. Al soltar el mouse tenemos algo parecido a esta imagen
simultneamente aparece un panel donde podemos seleccionar la macro que queremos asociar
al aceptar ya tenemos el botn asociado a la macro, posteriormente lo podemos rotular
convenientemente.
A continuacion daremos un ejemplo prctico simple:
Un banco quiere dar de baja las cuentas que no tuvieron movimientos por 3 o ms aos,
considerndolas inactivas en dicho caso y activas en caso contrario.
El banco tiene un listado con las cuentas activas y no activas
Luego de de oprimir el botn que asociamos a la macro, que llamamos ActualizarListado, el listado
queda
Cdigo para copiar y pegar
Sub ActualizarListado()
Range("E3").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = "inactiva" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("A1").Select
End Sub
Cuando se dispara una macro no hay vuelta atrs, 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 hara con una macro casi idntica a la dada ms
arriba, que dicho sea de paso la confeccion un empleado del rea de computacin del banco, al
que le pidieron las dos listas a ltimo momento. Cacho (as le dicen al empleado), que por suerte
no haba apretado el botn 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", tambin copio como respaldo, el listado original en la Hoja3. Cuando
termin el trabajo le quedaron las siguientes macros
y para el rtulo de "Bajas"
Cacho pens que despus de todo, se hubiera tomado menos trabajo cerrando el archivo y
abrindolo otra vez, aunque pensndolo 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 sera ms rpido.
Macros para copiar y pegar
Option Explicit
Sub ActualizarListado2()
Dim i As Integer
Dim k As Integer
k=1
Dim j As Integer
j=1
Call CopiaRotulo
Sheets("Hoja1").Select
Application.CutCopyMode = False
Range("E3").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = "inactiva" Then
Sheets("Bajas").Select
Range("E65536").End(xlUp).Offset(1, 0).Select
i = ActiveCell.Row
Range("C" & i).Value = Worksheets("hoja1").Range("C" & i + k - j).Value
Range("C" & i).Interior.ColorIndex = 24
Range("C" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("C" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("C" & i).Borders(xlEdgeTop).LineStyle = xlContinuous
Range("D" & i).Value = Worksheets("hoja1").Range("D" & i + k - j).Value
Range("D" & i).Interior.ColorIndex = 24
Range("D" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("D" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("D" & i).Borders(xlEdgeTop).LineStyle = xlContinuous
Columns("D:D").EntireColumn.AutoFit
Range("E" & i).Value = Worksheets("hoja1").Range("E" & i + k - j).Value
Range("E" & i).Interior.ColorIndex = 24
Range("E" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("E" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("E" & i).Borders(xlEdgeTop).LineStyle = xlContinuous
Range("E" & i).Borders(xlEdgeRight).LineStyle = xlContinuous
j=j+1
Range("A1").Select
Sheets("Hoja1").Select
Selection.EntireRow.Delete
Else
k=k+1
ActiveCell.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 podramos 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 rtulo 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
De la misma manera, una empresa, podra generar su propia BASE DE DATOS de clientes,
recurriendo a la capacidad que tiene Excel para generar FORMULARIOS, o podramos crear un
directorio telefnico y esto es justamente lo que haremos en el prximo 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
orientacin o de un usuario que en realidad no sabe que esta frente a una aplicacin Excel
TICKET DE COMPRA
INFORMES
DIRECTORIO TELEFONICO
Este directorio telefnico 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 rtulos verticalmente en las celdas coloreadas en azul y en las celdas F6,F7,F8 los
datos que sern pasados a la Hoja DIRECTIRIO pero colocados horizontalmente, luego de aplicar
la macro, disparada con el botn INTRODUCIR DATOS, todo debe quedar como se ve en la figura
de abajo
Para consultar el telfono y la direccin de alguna persona, en esta ocasin lo haremos utilizando
frmulas
colocamos en la celda B6, el apellido y nombre de la persona cuyos datos queremos obtener y en
la celda B7 la frmula
con cada uno de ellos se insertan objetos cuyas propiedades se pueden cambiar en el explorador
de propiedades ( tambin puede hacerse con cdigo), Para que aparezca las propiedades de cada
objeto solo debemos pulsar en ellos, por ejemplo en la figura pueden verse las propiedades de un
botn 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
botn insertaremos los datos) y en nombre "cmdInsertar" . Esto es muy importante a la hora de
programar porque ayuda la claridad del cdigo (aunque ahora que lo pienso, hubiera sido ms
claro poner "btnInsertar", esto es a nuestro criterio), hemos hecho lo mismo son los otros
controles por ejemplo al TextBox1 lo cambiamos por txtApellidoNombre.
Tambin nos har falta insertar un mdulo al que llamaremos " MostrarFormulario" en el que
pondremos este cdigo
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 razn 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 botn derecho del mouse para que aparezca men en el que
apretamos la tecla ver cdigo
en ambos casos vamos a la siguiente pantalla
donde podemos ver en la parte superior, el nombre del botn y el evento Click y el nombre de la
macro "cmdInsertar_Click" lista para que la programemos. Hay otros eventos a los que podramos
acceder
pero en este caso nos interesa el evento Cick. Tambin podemos ver haciendo doble click en el
formulario( o con el botn 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
En programacin no hay una sola forma de hacer las cosas, y es probable que haya otro algoritmo
ms eficiente, el que est arriba me pareci fcil de entender, pero ms adelante haremos otra
versin
Una de las tantas veces que fui a una librera, me encontr con una computadora en la que se
podan consultar, entre otras cosas, los libros que haba en existencia, de un determinado autor.
No s cmo lo habrn hecho pero ahora lo vamos a hacer con las macros de Excel en una suerte
de interaccin usuario computadora.
Lo primero que hacemos es renombrar tres hojas como se ve en la figura
El BOTON DE CONSLTA tiene adjuntada la macro principal en el mdulo1 y hay otras dos
macros en el mdulo 2 y 3 como se puede ver el inspector de proyectos
"AUTORES" es la hoja donde se debera poner una base de datos con todos los autores sus
respectivos libros y el precio de cada uno. Dije se debera colocar una base de datos yo me voy a
conformar colocando una tabla con algunos autores de ciencia ficcin, genero que, por cierto, me
gusta mucho
TABLA 1
Lo que ve al usuario despus de apretar el BOTON DE CONSULTA es una pantalla que le pide
que introduzca un autor
mdulo1
mdulo2
mdulo3
Como se puede ver, esta no es una macro aislada sino una aplicacin completa con cierto aspecto
profesional, que por cierto, puede mejorarse
La consulta de un autor en una librera usando formularios, es una aplicacin completa muy
similar a la que no los usa, podramos decir que es solo la manera en que se muestran los
informes, aun as podremos aprender muchas cosas tiles que nos podrn servir en el futuro
Empezamos cambiando el nombre de tres Hojas como se ve en la figura
Y aqu viene la diferencia, luego de aceptar aparece otra pantalla con el informe
Esta pantalla no es otra cosa que un formulario que contiene un cuadro de lista y el botn
"VUEVO INFORME" para hacer otra consulta,
Vamos a las macro: en la imagen podemos ver el inspector de proyectos
Como se ve tenemos muchos lugares donde colocar las macros como sin ThisWorkbook,
UserForm1 y los mdulos Copia Rotulo, LimpiaInforme, "MuestraFormulario" y "Principal"
Este objeto pertenece a la clase "CommandButton" como cualquier botn que est en un
formulario
2-ListBox1: pertenece a la clase "ListBox" y no hemos cambiado su nombre por defecto como se
muestra en la figura
Como vemos en la imagen estos dos objetos pertenecen a una clase mas general llamada
UserForm
2- LimpiaInforme : esta macro (Macro1) limoia los datos del rango "LIBROS" que est en la Hoja
"AUTOR"
3 Copia Rotulo: en este ndulo est la macro "CopiaRotulo" cuya funcin es copiar el rtulo de
la base de datos de la Hoja"autores" (en nuestro caso es una tabla) en la Hoja "AUTOR"
4-"Principal": este mdulo tiene la macro "LibrosAutor" que es casi idntica a la macro principal
de CONSULTA EN UNA LIBRERIA , la diferencia es que al final, cuando se sale del while, se
llama a la macro "MostrarFormulario" como se muestra con la flecha
TICKET DE COMPRA
Este es un tutorial que programa los tickets de compra de un supuesto delivey que vende plantas
y flores, llamadoBestFlowers, este negocio pega estos Tickets en las cajas donde pone la
mercadera con el detalle de los productos y su importe antes de enviarlos a destino.
Una caracterstica, general de los tickets es su baja calidad esttica y de impresin, con Excel esto
se mejora ya que se pueden insertar imgenes de logotipos o hacerlos con WordArt y tiene a su
disposicin una amplia variedad de fuentes, por otro lado la impresin se har con una impresora
comn, papel de alta densidad y no con una ticketeadora (que por cierto tiene otras ventajas). Otra
caracterstica de los tickets es que no se dejan filas vacas, como pasa con las facturas, nuestro
ticket cumplir con esto tambin. Veamos dos ejemplos de lo que tenemos que hacer
;
.
como se ve los nmeros de ticket son consecutivos y no hay filas vacas ya que estas se agregan
a medida que se integran nuevos productos. Obviamente para imprimir el segundo ticket hay que
vaciar los contenidos del primero.
Para agregar filas se parte poniendo en la fila 12 las siguientes frmulas:
Celda B12:
Celda D12:
estas frmulas deben ser copiadas, automticamente, a las celdas B13 y D13 al colocar el cdigo
de un producto en la celda A13, completndose la fila al colocar la cantidad de unidades. El
proceso continua a medida que se agregan nuevos cdigos en las filas subsiguientes.
Estas acciones se hacen con la siguientes macros "Copiaformula" (mdulo 1) y "AgregaFila"
(mdulo 2).las cuales deben entrar en accin sin nuestra intervencin, puesto que de lo contrario
se perdera el carcter automtico.
Para hacer esto, "Copiaformula" y "AgregaFila" deben ser llamadas dentro de otra macro que se
activa cuando en un objeto cambia alguna propiedad, En nuestro caso puede ser el cambio de las
celdas D13 a D33 de la Hoja1, que podran cambian de estar vacas a tener el cdigo de un
producto en su interior. A este cambio se lo denomina EVENTO, en este caso nos interesa los
eventos de las Hojas o "Worksheet events" que responden a cambios en una Hoja, como el cambio
en una celda o rango de celdas (en nuestro caso sera el rango D13 : D33), pero este no es el nico
evento. Podemos unvestigar todos los eventos disponibles para Worksheet, para esto hacemos
doble click en la Hoja1 del esplorador de proyectos veremos que si desplegamos la ventana
"General" aparecer el objeto Worksheet asociado solo a esta Hoja, como se ve en la imagen
y haciendo click en el botn desplegable de la ventana que est al lado podemos elegir entre todos
los eventos del objeto Worksheet
por defecto est "SelectionChange", que es el evento que se produce cuando se selecciona una
celda o un rango de celdas. Pero podramos haber usado cualquier otro de la lista que
considerasemos conveniente, en nuestro caso elegimos Change y automticamente se genera la
macro "Workseet_Change"
Nos falta hacer dos cosas, indispensables para que nuestro Ticket este preparado para un prximo
cliente, vaciar su contenido e incrementar su numeracin en una unidad.
Pulsando en "propiedades" podemos cambiar la propiedad Caption por Borrar y tambin cambiar
el nombre con que se lo identifica por "cmdBorrar" en lugar de "CommandButton1", esto ltimo es
una buena costumbre ya que si hubieran muchos botones(cosa que ocurre con mucha frecuencia)
podramos identificar rpidamente su funcin
El "cmdBorrar" es un objeto y est disponible en la ventana de objetos, luego haciendo click en el
botn desplegable lo seleccionamos y elegimos el evento Click.
COMBOBOX(CUADRO COMBINADO)ORDENADO
ALFABETICAMENTE
Es muy til ordenar un ComboBox alfabticamente, porque nos facilita enormemente encontrar los
datos, espacialmente cuando estos son muchos.
Supongamos que una agencia de alquiler de autos tiene todo su stock cargado en un ComboBox
inserto en un FORMULARIO, de manera tal que cuando se elige un marca aparezcan todas sus
caractersticas, tales como: estado, ao, kilometraje, color, si esta en servicio o en el taller, si tiene
aire acondicionado, etc. Las marcas y modelos se buscaran por orden alfabtico en un cuadro
combinado, apareciendo las caractersticas en los respectivos cuadros de texto (textBox). Para
esto la agencia disponen de una planilla con los datos antes mencionados que sern la fuente de
donde se cargar el ComboBox, como se muestra en la figura
el listado podra ser mucho ms extenso amplindolo mediante otro formulario.
Como se puede ver la planilla tiene 7 columnas, por lo tanto debemos elegir por cul de ellas se
har el orden. En este caso nos decidimos por la columna "B" en orden ascendente.
Empezamos abriendo el editor de VBA (Alt+F11) y diseamos un Formulario al que renombramos
"usfMarcasyModelos", asimismo insertamos el modulo1 y el modulo2. El Formulario deber ser
semejante al de la figura.
Luego cambiamos los nombres de los objetosTextBox1, TextBox2, TextBox3, TextBox4, TextBox5,
TextBox6 por txtCodigo, txtAo, txtColor, txtAire, txtDisponibilidad, txtUbicacion respectivamente
y al ComboBox1 por cmbMarcaModelo. Estos cambios de nombres son muy tiles para saber qu
es lo que contiene cada TextBox, en especial cuando hay muchos. Lo siguiente es cargar el
ComboBox con la columna
segn la cual queremos hacer el orden, para esto hacemos doble cick en el formulario(que es un
objeto) y nos aparece por defecto lo siguiente
que nos invita a programar el UserForm con el evento click, pero nosotros queremos el evento
initialize, por lo tanto lo buscamos en la parte superior derecha (donde dice click)
apareciendo, una vez borrada la macro "Userform_Click, la macro que tenemos que programar
Para que esto ocurra debemos llamar a la macro ordenar_arrastre, sealada por la flecha(ubicada
en el mdulo2)
descomentando la lnea de la flecha roja. Ahora s aparece ordenado
Casi lo nico que nos falta es programar una macro para que aparezca el estado del vehculo con
sus caractersticas, esta macro involucra al objeto "cmbMarcaModelo" y al evento "change"
Lo que viene es asignar una macro a un boton ( en la Hoja1) para que aparezca el Formulario
Esto es todo, en el prximo TUTORIAL veremos cmo agregar datos a la planilla y que estos sigan
ordenados.
ALTAS, BAJAS Y MODIFICACIONES
No se me ocurre que una empresa puede no necesitar una aplicacin de ALTAS, BAJAS Y
MODIFICACIONES, en nuestro caso continuaremos con la empresa de renta de autos, que
apropsito se llama RODANDO RENTA CAR.
La descripcin de la aplicacin consiste en cuatro botones que al oprimirlos hacen surgir cuatro
pantallas (formularios), el primero muestra en que situacin se encuentra cada vehculo en el
momento presente. El segundo es el formulario de ALTAS, el tercero el de MODIFICACIONES y por
ltimo el de BAJAS, como se muestra
Esta es la pantalla en la que por mltiples motivos se considera que el vehculo ya no puede
pertenecer a la flota (destruccin total, mucho kilometraje, modelo antiguo, etc.)
Es de fundamental importancia que cuando se haga algn cambio en las pantallas de ALTAS,
BAJAS o MODIFICACIONES, este se actualice inmediatamente en cualquiera de los formularios.
Tambin hay una advertencia en la pantalla de altas que nos alerta si algn campo quedo sin
llenar, otra advertencia en la pantalla de modificaciones que tambin nos advierte si estamos
seguros de las modificaciones que hicimos y por ltimo una advertencia en la pantalla de bajas
que nos dice si estamos seguros de la eliminacin.
Debo aclarar que las fotos de los autos se deben colocar en este caso en una carpeta junto con el
archivo de la aplicacin, esto no sera necesario si ponemos la ruta completa donde se encuentra
la carpeta con los vehculos siendo muy sencilla la modificacin del cdigo.
Por ltimo podramos insertar la totalidad de la flota desde el formulario de ALTAS.
Ahora vamos a mostrar los cdigos correspondientes a cada uno de los FORMULARIOS, con
algunos comentarios
CODIGO DE FLOTA DE VEHICULOS (INFORME)
CODIGO DE ALTAS
CODIGO DE BAJAS
CODIGO DE MODIFICACIONES
Como ya se dijo, al descargar el archivo, poner las imgenes en la misma carpeta que la
aplicacin. He puesto muchas imgines para que se puedan agregar y eliminar.
Una de las cosas ms importantes que una buena aplicacin puede brindarnos es una correcta y
abundante informacin, en la que juega un papel central la correcta actualizacin de los datos
(ALTAS BAJA Y MODIFICACIONES).
Vamos a hacer un informe solicitado por un usuario: si un cliente desea alquilar un SEDAN, el
programa debera poder informar si hay disponibilidad de algn vehculo de este tipo y de no
haberla, la fecha ms cercana para la cual podremos disponer de uno (este informe no lo daremos
aqu), solo por dar un ejemplo de las preguntas que se pueden formular y las respuestas que el
programa puede dar.
Siguiendo el ejemplo, un cliente podra solicitar un SEDAN de cualquier marca, sera interesante
que se desplegara una pantalla informando si hay uno o no; pues esto, no muy complicado, es lo
que ser nuestro primer informe, en este caso los datos estn en la hoja Flota.
Con estos cabios cuando preguntamos por un modelo que la agencia no tiene, por ejemplo
"RURAL", aparece la siguiente pantalla