Sunteți pe pagina 1din 87

PROGRAMACION VBA PARA EXCEL

INTRODUCCION:

Si bien la grabadora de macros es muy til y genera un cdigo siempre


correcto, tiene dos desventajas:

genera ms cdigo que el necesario.

slo puede hacer macros con instrucciones secuenciales y sin nada


de lgica, o sea que no pueden tomar decisiones ante un evento.

Ambas desventajas se pueden solucionar con la programacin VBA que


quiere decir programacin visual basic para aplicaciones, lo lamento pero
aqu no tenemos ms remedio que aprender a programar y eso es lo que
van a ir aprendiendo con los tutorarles de este apartado.

VBA es una programacin que est ntimamente relacionada con los libros
y las hojas de clculo y para esto Excel cuenta con un editor de
programacin donde se pone el cdigo, a este se puede acceder, en Excel
2007, yendo a la pestaa programador y luego a la seccin cdigo 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
Las macros que se escriban aqu, estarn relacionadas con la Hoja1.

Comencemos por lo ms simple y escribamos una macro que seleccione la


celda B5de la Hoja1 del libro VBAProject (Libro2)

Donde podemos ver que el cdigo


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

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

que es la seleccin de la celda B5.

Otro cdigo 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 cdigos:

En la programacin 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 cdigos 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 nmero (2007) y despues estar vaca.

CODIGOS MS 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 combinacin los cdigos 1 y 2 es equivalente a esta sola lnea:

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 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

10-Tamao de Letra(Tamao de Fuente)

With Selection.Font .Size = 12

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.

Significado de la FORMULA R1C1

La FORMULA R1C1 se emplea para colocar el resultado de una lnea de


cdigo en la celda que actualmente est activa.

Veamos el siguiente caso

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 se 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:

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

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 iteracin Do-While-Loop

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.

Cdigo para copiar y pegar

Sub SumaColumna()
Range("D1").Select
Sum = Range("D1")
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Sum = Sum + ActiveCell.Value
Loop
ActiveCell.Value = Sum
MsgBox Sum
End 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 lgicamenteal dan el mismo resultado que usando la
estructura Wile-Wend.

Estructura de iteracin 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".

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
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 (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.

4- Esta lnea es la condicin 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 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 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 que queda en una
celda activa.

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

10- Con esta lnea 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 iteracin For-Next

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

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- El primer For es para colocar en la columna D los diez primeros


nmeros 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 lnea 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".

10-En esta lnea podemos salir o volver a entrar al For segn se haya
llegado a 10 o no.

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 iteracin 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


iteracin

Como ejemplo hallaremos el promedio del rango A1:D4,dejando el


resultado en la celda C7, para este ejemplo pondremos valores enteros

Cdigo:
La parte ms importante del cdigo es

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

y cuando se llega a la ltima celda del rango, automticamente se hace la


cuenta

luego se coloca el resultado en la celda C8

Cdigo para copiar y pegar

Sub PromedioRango()

Dim cell As range


Dim sum As Integer
Dim cant As Integer
Dim prom As Variant
For Each cell In range("A1:D4").cells
sum = sum + cell.Value
cant = cant + 1
Next cell
prom = sum / cant
range("C8").Select
ActiveCell.Value = prom

End Sub

2-El segundo tipo utiliza la propiedad CurrentRegion, esta propiedad es


muy interesante pues nos permite seleccionar un rango cuyos lmites 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.
Utilizaremos estas regiones para obtener el promedio de las mismas, para
lo cual empleamos el cdigo

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

La diferencia con el caso 1 es

en la que

devuelve el rango de la regin actual.

Cdigo para copiar y pegar

Sub PromedioRegion()

Dim cell As range


Dim sum As Integer
Dim cant As Integer
Dim prom As Variant
For Each cell In ActiveCell.CurrentRegion.cells
sum = sum + cell.Value
cant = cant + 1
Next
prom = sum / cant
range("D8").Select
ActiveCell.Value = prom

End Sub

Variables simples y Tipos de datos

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.

Excel 2007 (bsico)

Introduccin

Tutoriales

Excel 2003 (bsico)

Introduccin

Tutoriales
TUTORIALES (medio)

Generales

Funcines

Frmulas lgicas

Frmulas

Frmulas matriciales

Anidamiento de funcines

Filtros

Formato condicional

Tablas Dinmicas

Grficos

Macros

Programacin VBA

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


Se ve que el resultado es el mismo, pero si definimos la funcin
DESCUENTO el proceso es mas rpido.

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 depuracin del cdigo 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 instruccin Opcin xplicit al
principio de cada mdulo y mejor an, se puede configurar el editor de
VBA para que se ponga automticamente esta instruccin en todos los
nuevos mdulos, esto se hace yendo a Herramientas->Opciones->Solapa
Editor y en ella tildando la casilla Requerir declaracin de variables,
como se puede ver en la siguiente imagen
Ahora dar un ejemplo, que si bien puede resolverse con funciones (mas
precisamente funciones matriciales) les puedo asegurar que la solucin es
muy complicada y es aqu donde se ve la verdadera utilidad de las
funciones personalizadas. Se trata de la obtencin de las iniciarles de un
nombre completo.

Su cdigo es el siguiente:
usaremos la funcion recien definida en la siguiente tabla

Llegando a este punto debemos hacer algunas aclaraciones del cdigo

En primer lugar podemos ver que se usan las funciones de librera de VBA
(funciones que ya estn definidas), ms 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, nmeros o
caracteres especiales, como pueden ser /, *, &, %, @ y otros muchos
incluido el espacio. A todos estos caracteres les corresponde un cdigo
numrico llamado ASCII . Estas funciones sirven para el manejo de
cadenas, hay otras que iremos analizando cuando sea necesario.

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.

Lneas 2 y 3: se declaran las variables que se van a usar.

Lnea 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 nombre

Lnea 7: se entra en un ciclo for-Next que recorre el string Texto, o sea que
comienza desde 1 y termina en strLong.
Lnea 8: esta es la lnea ms importante. ya que en cada ciclo se evala
cada carcter y determina si es una letra mayscula (Asc>=65 o Asc<=90).

Lnea 9: Si es mayscula agrega el carcter a la variable strTemp.

Lnea 12: Al terminar la rutina, la funcin INICIALES recibe el valor de


strTemp que es donde se guardan las iniciales.

Para comprobar que funciona dejo el cdigo para copiar y pegar

Function INICIALES(Texto As String) As String


Dim strLong As Long, i As Long
Dim textTemp As String

strLong = Len(Texto)

For i = 1 To strLong
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 = textTemp

End Function

FUNCIONES DE HOJA( NATIVAS):

Para definir funciones personalizadas, a dems de las funciones propias de


VBA , se pueden usar las llamadas funciones de hoja ( Work Sheet
Functions en ingles) tambin llamadas funciones nativas, es decir las
funciones que normalmente estn disponibles en las hojas de Excel, como
son , SUMA, BUSCARV, MAX, PROMEDIO, COINCIDIR, por nombras
algunas. Para usarlas debemos anteponer al nombre de la funcin( que
debe estar en ingles) la expresin Application.WorkSheetFunction.[nombre
de la funcin](parmetros).Si queremos usar la funcin BUACARV, la
expresin debe ser:

Application.WorkSheetFunction.VLookup(Valor a buscar, Matriz de


bsqueda; Columna, Valor lgico)

Alternativamente:

WorkSheetFunction.VLookup() o Function.VLookup()
Como se puede ver los parmetros de la funcin son los mismos que los de
las funciones nativas

Empezaremos dando un ejemplo en el que se usa la funcin DESREF que


en ingles es Match. Como todos sabemos la funcin BUACARV solo puede
traer valores que estn 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 funcin muy parecida a BUSCARV pero que busque hacia la
izquierda, a esta funcin la llamaremos BUSCARVIZQ

Supongamos que tenemos la siguiente tabla

y queremos:

A) Introducir la tabla en una hoja se Excel

B) Que dado el cdigo de producto se devuelva en dos celdas la


herramienta y el precio de la misma

C) No emplear anidamiento de funciones

Como vemos el cdigo del artculo se encuentra en la columna central, por


lo tanto para responder debemos hacer una bsqueda a la izquierda y otra
a la derecha, por lo tanto debemos recurrir a BUSCARV y a una
UDF( funcin definida por el usuario) que como ya dijimos llamaremos
BUSCARIZQ que definimos con el siguiente cdigo:

Function BUSCARVIZQ(valor_a_buscar, matriz_de_busqueda As Range,


indice_de_Col As Integer, ValorExacto As Boolean)
Dim NrFila As Long

NrFila = 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 frmula BUSCARIZQ con sus


parmetros

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

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
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 funcin y los parmetros, proporcionando el tipo de


dato. Notar que no se da el tipo de dato del parmetro valor_a_buscar ya
que este puede ser una cadena de caracteres, un nmero o una
combinacin de ambos. Lo mismo podemos decir del parmetro que
devuelve la funcin

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 la matriz_de_busqueda con Recize

matriz_de_busqueda.Resize( , 1)

esto se hace para que la matriz de bsqueda 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 parmetro y
si,ademas, queremos que el rango final sea de una columna se pone( ,1)
as, el rango seleccionado queda un rango columna

Se podra haber omitido el Resize seleccionando solo el rango central, esto


se hizo para que los parmetros sean iguales a los de la funcin
BUSCADV, salvo por el -1 de indice_de_Col

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

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 programacin VBA tiene sus propias funciones como Mid y Len, que ya
se describieron, estas permiten trabajar con cadenas de caracteres, con
nmeros, fechas, horas, mostrar mensajes por pantalla y muchas otras
que podemos listar por categoras, como sigue:

1-Funciones de conversin de tipos (Conversion)

2-Funciones Financieras (Financial)

3-Funciones de cadenas (Strings)


4-Funciones matemticas (Math)

5-Funciones de comprobacin (Information)

6-Funciones de Interaccin(Interaction)

7-Funciones de Fecha y Hora (DateTime)

8-funciones del sistema (FileSystem)

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

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

Este listado tiene 14 clientes y se lo podra actualizar manualmente, pero


si imaginamos que la lista tiene 5000 o ms clientes, se tardara 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


insetamos el siguiente cdigo

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"

"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 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

DIRECTORIO TELEFONICO (usando formularios)

Este directorio telefnico se har usando FORMULARIOS

Esta manera de encarar el problema tiene ms 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 ms profesional, lo que ser de mucha utilidad cuando se encaren
problemas ms 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

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 botn de comando ( CommandButton)
marcados en rojo en la imagen, estos comandos estn numerados segun el
orden en que los `pnemos
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.

Como el formulario en si mismo tambin es un objeto le cambiamos el


nombre por "usfDirectorio" al que le cambiamos la propiedad Caption por
"DIRECTORIO TELEFONICO" .
Tambin nos har falta insertar un mdulo al que llamaremos "
MostrarFormulario" en el que pondremos este cdigo

se asignar a un botn en la Hoja1


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

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

CONSULTA EN UNA LIBRERIA

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

"PRINCIPAL" es la pantalla con la que se encuentra el eventual comprador


al iniciar su consulta. Para que tenga un aspecto ms profesional hemos
diseado la pgina quitado los encabezados de fila y columna y puesto la
pantalla completa, tambin hemos colocado un cartel que oriente al cliente
y un botn. Luego de poner un color que me pareci adecuado, finalmente
la pgina quedo como se muestra
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
no son muchos datos pero servirn

AUTOR es la pgina donde va a ir una tabla solo con los datos del autor
consultado. Por ejemplo si se pregunta por Ray Bradbury la tabla debera
ser

TABLA 2

que es el resultado de la consulta. Si se quiere hacer otra consulta se debe


vaciar la tabla anterior y volver a la pgina principal, esto se hace con un
botn que llamaremos NUEVA CONSULTA que est asociado a una
macro ubicada en el mdulo3

TABLA 3
Lo que ve al usuario despus de apretar el BOTON DE CONSULTA es
una pantalla que le pide que introduzca un autor

al aceptar vamos a la pgina "AUTOR", con el resultado de la consulta


como se ve en la TASLA 2

Lo que nos resta es decir cul es el cdigo de las macros que van en los
mdulos

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

TICKET DE COMPRA

Este es un tutorial que programa los tickets de compra de un supuesto


delivey que vende plantas y flores, llamado BestFlowers, 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"

que es la que tiene que llamar a "Copiaformula" y "AgregaFila". Finalmente


la macro Worcksheet_Change es la siguiente, una vez que se le inserta el
cdigo
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.

Vaciar el contenido del Ticket

Para vaciar el contenido, vamos a la pestaa "Programador" y en la seccin


"Controles" pulsamos "ModoDiseo y luego "Insertar" para insertar un
botn Active x.
que colocamos en el lugar que nos parezca conveniente

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.

Como antes aparece una macro "cmdBorrar_Click" automticamente

en la que se llama a la macro "Borrar", cuyo cdigo es

Incrementar automaticamente el N del Ticket

Aqu tambin recurrimos a objetos y eventos. El objeto es el cuaderno que


contiene la "Hoja1" donde est el ticket, por lo tanto hacemos doble click
en "ThisWorkBook" seleccionamos el objeto" WorkBook" y como evento
"befoPrint", como se puede ver en el editor VBA, o sea que despus de
imprimir el Ticket, este cambia la numeracin

Finalmente el cdigo que ponemos es

Una cosa importante es no olvidarse, despus de imprimir, de vaciar los


contenidos con el botn Borrar.

Nota: lo mas pronto que pueda, explicar detalladamente los cdigos.


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

FLOTA DE VEHICULOS (consulta)


En esta pantalla se busca la marca y modelo del vehculo que aparece en
una lista ordenada alfabticamente en forma descendente en un
comboBox, luego de seleccionar un vehculo, aparecen algunas
caractersticas del mismo que le pueden interesar al cliente; entre otras,
una foto y si esta disponible para ser alquilado( textBox DISPONIBLE) etc.

AGREGAR VEHICULOS

En esta pantalla se agregan nuevas unidades, en este punto se existe la


posibilidad de agregar una misma marca y modelo, pudiendo surgir un
problema si no se los diferencia de alguna manera ya que al buscarlos y
querer hacer una consulta sobre ellos, solo aparecer el primero que este
en la lista. La solucin es muy simple, tomemos como ejemplo el SALEEN
S331, si quisiramos agrega el mismo modelo podramos diferenciarlo
ponindole el nombre SALEEN S331-2, como se ve en la imagen
.de esta manera aparecen las dos unidades.

CAMBIAR ESTADO DE UN VEHICULO


Aqu el vehculo ha cambiado el estado de estar en disposicin de ser
alquilado a lo contrario.

SACAR VEHICULO DE LA FLOTA


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.

INFORME SOLICITADO POR UN USUARIO

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.

PANTALLA PRINCIPAL: al apretar el botn "TIPO DE VEHICULO EN


AGENCIA" aparecer la pantalla emergente donde quien maneja el
programa puede introducir el tipo de vehculo solicitado, en este caso un
SEDAN, luego de oprimir el botn aceptar
debe aparecer una pantalla con la informacin

para suerte del cliente hay 2 SEDANES disponibles, uno gris y otro rojo.
Podamos haber incluido en la pantalla el modelo, que es una informacin
que podra Interesar. Si apareciera la pantalla en blanco significa que no
hay ningn SEDAN en la agencia, aunque sera mas prolijo que apareciera
la leyenda " EL MODELO SOLICITADO NO ESTA DOSPONIBLE" o " LA
AGENCIA NO DIPONE DE ESE MODELO" o mejor an " LO SENTIMOS,
EN LA AGENCIA NO HAY UN MODELO SEDAN", nos decidimos por esta
ltima leyenda. Hacer esto es muy simple, solo hay que modificar un poco
el cdigo que ya existente.

Cambiamos el siguiente trozo de cdigo cuando se sale del Loop

por este otro

Tambin debemos agregar un userform2 codificado como sigue


Con estos cabios cuando preguntamos por un modelo que la agencia no
tiene, por ejemplo "RURAL", aparece la siguiente pantalla

que queda mucho mejor que una pantalla vaca

Dejo para descargar ambos archivos, el modificado y el anterior.

S-ar putea să vă placă și