Académique Documents
Professionnel Documents
Culture Documents
1. FUNDAMENTOS DE PROGRAMACION
1.1 Programa
Un Programa es u conjunto ordenado de instrucciones con un propsito determinado que cumplen con las reglas
semnticas y sintcticas de un lenguaje de programacin. El Objetivo del Programa es procesar datos generando
informacin para el usuario.
1.2 Instruccin
Una instruccin es un conjunto de caracteres que especifican una operacin a realizarse.
Cada instruccin se escribe en una lnea, pudindose colocar ms de una instruccin en una lnea separndolas por
el carcter : (dos puntos).
Las instrucciones pueden ser ejecutables o no ejecutables:
Ejecutables, indicarn al Programa que Hacer (Ej. Sumar, Restar, Finalizar, etc.)
No ejecutables, sirven para declarar variables o incluir comentarios, para ste ltimo caso se emplea la
palabra reservada Rem o el carcter (Apstrofe Simple). Los comentarios se muestran en color verde.
1.3 Variables
Una variable es un nombre asociado a un d
ato o conjunto de datos que se almacenarn en la memoria del computador.
Las variables son elementos empleados en las instrucciones de un programa que pueden cambiar de valor durante la
ejecucin del programa.
Las variables pueden representar datos, tales como: El nombre de una persona, el sueldo de un empleado, la nota de
un alumno, etc.
Las Variables se declaran utilizando previamente la instruccin DIM, el nombre de la Variable y el tipo de dato, de
esta manera:
DIM variable AS Tipo_Dato
Los Nombres de las variables deben seguir las siguientes reglas:
El Primer carcter ser siempre una letra.
Los Nombres de las variables pueden estar formados por letras y por dgitos y algunos otros caracteres
especiales, como por ejemplo el _ (guin bajo).
No se permiten el uso de espacios en blanco.
Nota.- Es conveniente declarar todas las variables empleadas en un programa.
Para declarar variables tome en cuenta lo siguiente:
Se declara una variable por lnea
Para declarar muchas variables en una sola lnea, debe indicar para cada una de ellas el tipo de dato
correspondiente y separarlas por comas ,
1.4 Tipos de datos
El Visual Basic permite el manejo de diversos tipos de datos, siendo estos: numricos, textos, lgicos,etc.
Visita: www.systematic.edu.pe
Tipos de datos Numricos: son datos que consisten en nmeros que pueden ser procesados
matemticamente por operadores de suma, resta, multiplicacin, divisin y otros.
En Visual Basic, los datos numricos son:
Enteros: byte, Integer y long
Reales: Single y Double
Tipos de datos No Numricos: Estos pueden ser:
Cadena de caracteres o texto
: String
Lgicos
: Boolean
Fecha
: Date
1.5 Operadores en Visual Basic
Los operadores en Visual Basic son usados para ejecutar diferentes instrucciones, condiciones y operaciones
diversas.
Los operadores se pueden agrupar en: Aritmticos, condicionales y Operadores de Relacin.
1.5.1 Operadores Aritmticos: Permiten Realizar operaciones tal como se muestra en la tabla. El orden en el
que se presentan reflejan su orden de precedencia (Orden para Operarlos matemticamente).
Operacin
Smbolo
Exponenciacin
Multiplicacin
Divisin
Divisin Entera(Cociente de la divisin entera)
Mdulo Aritmtico(Residuo de la divisin Entera)
Suma y Diferencia
^
*
/
\
MOD
+ -
Nota.- El smbolo &se usa para unir cadenas de caracteres (equivale a sumar o concatenar cadenas de
caracteres).
1.5.2 Operadores Condicionales: Las relaciones condicionales permiten comparar valores y decidir la accin
a tomar en la ejecucin de un programa. Estas condiciones darn como resultado un valor lgico de
VERDADERO o FALSO.
Relacin
Igualdad
Desigualdad
Menor
Mayor
Mayor o igual
Menor o igual
Smbolo
Expresin
=
<>
<
>
>=
<=
A=B
A<>B
A<B
A>B
A>=B
A<=B
Nota.- Estos operadores sirven para comparar todos los tipos de datos (numricos, textos, fechas, etc.).
1.5.3 Operadores Lgicos: Los operadores lgicos ayudan a precisar las operaciones condicionales con las
siguientes operaciones:
Operador
Smbolo
Negacin
Conjuncin
Disyuncin
Visita: www.systematic.edu.pe
NOT
AND
OR
Estos operadores se encargan de examinar relaciones y operaciones lgicas (Booleanas), dando como
resultado uno de los siguientes valores: Verdadero o Falso (True/False).
1.6 Instruccin para Asignar Valores
El smbolo utilizado para asignar valores o expresiones es el caracter = (igual).
El elemento ubicado a la izquierda recibe el valor ubicado al lado derecho del signo igual.
En este caso la variable A, recibe el valor 5.
Descripcin
Arco Tangente de x. (Angulo x en radianes)
Seno de x. (Angulo x en radianes)
Coseno de x. (Angulo x en radianes)
Tangente de x. (Angulo x en radianes)
Valor absoluto de x.
Parte entera de x.
Redondea x a n decimales
Logaritmo natural de x, con x>0.
Devuelve el signo de x.
Raz cuadrada de x, con x>0
Exponencial de x.
Nmero aleatorio entre [0, 1[
Visita: www.systematic.edu.pe
Len(cadena | nombrevariable).
Devuelve el nmero de caracteres en una cadena o el nmero de bytes requerido para almacenar una
variable.
LTrim (cadena), RTrim (cadena), Trim (cadena).
Devuelve una copia de una cadena sin espacios a la izquierda (LTrim), a la derecha (RTrim) o sin espacios
ni a la derecha ni a la izquierda (Trim).
Mid (cadena, inicio [, longitud]).
Devuelve un nmero especificado de caracteres de una cadena.
Rigth (cadena, longitud).
Devuelve un nmero especificado de caracteres del lado derecho de una cadena.
Space (nmero).
Devuelve una cadena que consiste en un nmero especificado de espacios.
Str (nmero).
Devuelve una representacin de cadena de un nmero.
String (nmero, carcter).
Devuelve una cadena de caracteres que se repite de la longitud especificada.
Ucase (cadena).
Devuelve una cadena que se ha convertido en mayscula. Slo se convierten en mayscula las letras
minsculas. Las letras maysculas o los caracteres que no son letras no sufren cambios.
Val (cadena).
Devuelve los nmeros contenidos en una cadena. Cadena es cualquier expresin de cadena vlida.
La funcin Val deja de leer la cadena en el primer carcter que no puede reconocer como parte de un
nmero.
1.10 Funciones de Fecha
Date.
Devuelve la fecha actual del sistema.
Day(fecha).
Devuelve un nmero entero entre 1 y 31, inclusive, que representa el da del mes.
Hour(horadigital).
Devuelve un nmero entero entre 0 y 23, inclusive, que representa la hora del da.
El argumento con nombre horadigital se limita a una hora o nmeros y cadenas, (en cualquier
Combinacin), que puedan representar una hora. Si horadigital contiene datos no vlidos, se
devuelve Null.
Minute(hora).
Devuelve un nmero entero entre 0 y 59, inclusive, que representa el minuto de la hora.
Month(fecha).
Devuelve un nmero entero entre 1 y 12, inclusive, que representa el mes del ao.
Visita: www.systematic.edu.pe
Now.
Devuelve la fecha y la hora de acuerdo a la configuracin de la fecha y la hora del sistema de su PC.
Second(hora).
Devuelve un nmero entero entre 0 y 59, inclusive, que representa el segundo del minuto.
Time.
Devuelve Date indicando la hora actual del sistema. Use Time para establecer la hora del sistema.
Year(fecha).
Devuelve un nmero entero que representa el ao.
El argumento fecha es cualquier expresin numrica o expresin de cadena (en cualquier
combinacin), que puedan representar una fecha. Si fecha contiene datos no vlidos devuelve Null.
2. ENTORNO DE PROGRAMACIN
2.1 Qu es una macro?
Una macro son un conjunto de instrucciones que sirven para automatizar procesos. Refirindonos a excel,
supongamos que realizamos frecuentemente la accin de seleccionar un rango para aplicarle negrita, cambio de
fuente y centrado. En lugar de hacer estas acciones manualmente, se puede elaborar una macro e invocarla para
que ejecute los tres procesos automticamente.
2.2 Objetos, propiedades y mtodos.
A la hora de trabajar con macros en excel, deben tenerse claros ciertos conceptos de lo que se llama programacin
orientada a objetos (OOP). No nos extenderemos demasiado sobre la OOP, pero si definiremos a continuacin los
conceptos de Objeto, Propiedades y Mtodos.
2.3 Objeto.
Cuando en el mundo real nos referimos a objeto significa que hablamos de algo ms o menos abstracto que puede
ser cualquier cosa. Si decidimos concretar un poco ms podemos referirnos a objetos coche, objetos silla, objetos
casa, etc. En OOP, la generalizacin (o definicin) de un objeto se llama Clase, as la clase coche seria como la
representante de todos los coches del mundo, mientras que un objeto coche seria un coche en concreto. De
momento, no definiremos ni estudiaremos las clases sino que nos concentraremos en los objetos, tenga en cuenta
pero que cualquier objeto est definido por una clase.
Cuando decimos que la clase coche representa a todos los coches del mundo significa que define como es un coche,
cualquier coche. Dicho de otra forma y para aproximarnos a la definicin informtica, la clase coche define algo que
tiene cuatro ruedas, un motor, un chasis,... entonces, cualquier objeto real de cuatro ruedas, un motor, un chasis,...
es un objeto de la clase coche.
2.4 Propiedades.
Cualquier objeto tiene caractersticas o propiedades como por ejemplo el color, la forma, peso, medidas, etc. Estas
propiedades se definen en la clase y luego se particularizan en cada objeto. As, en la clase coche se podran definir
las propiedades Color, Ancho y Largo , luego al definir un objeto concreto como coche ya se particularizaran estas
propiedades a, por ejemplo, Color = Rojo, Ancho = 2 metros y Largo = 3,5 metros.
2.5 Mtodos.
La mayora de objetos tienen comportamientos o realizan acciones, por ejemplo, una accin evidente de un objeto
coche es el de moverse o lo que es lo mismo, trasladarse de un punto inicial a un punto final. Cualquier proceso que
implica una accin o pauta de comportamiento por parte de un objeto se define en su clase para que luego pueda
Visita: www.systematic.edu.pe
manifestarse en cualquiera de sus objetos. As, en la clase coche se definiran en el mtodo mover todos los procesos
necesarios para llevarlo a cabo (los procesos para desplazar de un punto inicial a un punto final), luego cada objeto
de la clase coche simplemente tendra que invocar este mtodo para trasladarse de un punto inicial a un punto final,
cualesquiera que fueran esos puntos.
Repasemos a continuacin todos estos conceptos pero ahora desde el punto de vista de algunos de los objetos que
nos encontraremos en Excel como WorkSheet (Objeto hoja de clculo) o Range (Objeto casilla o rango de casillas).
Un objeto Range est definido por una clase donde se definen sus propiedades, recordemos que una propiedad es
una caracterstica, modificable o no, de un objeto. Entre las propiedades de un objeto Range estn Value , que
contiene el valor de la casilla , Column y Row que contienen respectivamente la fila y la columna de la casilla, Font
que contiene la fuente de los caracteres que muestra la casilla, etc.
Range, como objeto, tambin tiene mtodos, recordemos que los mtodos sirven llevar a cabo una accin sobre un
objeto. Por ejemplo el mtodo Activate, hace activa una celda determinada, Clear, borra el contenido de una celda o
rango de celdas, Copy, copia el contenido de la celda o rango de celdas en el portapapeles,...
2.6 Conjuntos.
Una conjunto es una coleccin de objetos del mismo tipo, para los que conozcan algn lenguaje de programacin es
un array de objetos. Por ejemplo, dentro de un libro de trabajo puede existir ms de una hoja (WorkSheet), todas las
hojas de un libro de trabajo forman un conjunto, el conjunto WorkSheets. Cada elemento individual de un conjunto
se referencia por un ndice, de esta forma, la primera, segunda y tercera hoja de un libro de trabajo, se referenciarn
por WorkSheets(1), WorkSheets(2) y WorkSheets(3).
2.7 Objetos de Objetos.
Es muy habitual que una propiedad de un objeto sea otro objeto. Siguiendo con el coche, una de las propiedades del
coche es el motor, y el motor es un objeto con propiedades como cubicaje, caballos, nmero de vlvulas, etc. y
mtodos, como aumentar_revoluciones, coger_combustible, mover_pistones, etc.
En Excel, el objeto WorkSheets tiene la propiedad Range que es un objeto, Range tiene la propiedad Font que es
tambin un objeto y Font tiene la propiedad Bold (negrita). Tenga esto muy presente ya que utilizaremos
frecuentemente Propiedades de un objeto que sern tambin Objetos. Dicho de otra forma, hay propiedades que
devuelven objetos, por ejemplo, la propiedad Range de un objeto WorkSheet devuelve un objeto de tipo Range.
2.8 Programacin Orientada a Objetos o Programacin Basada en Objetos.
Hay una sutil diferencia entre las definiciones del ttulo. Programacin orientada a Objetos, significa que el
programador trabaja con objetos fabricados por l mismo, es decir, el programador es quien implementa las clases
para luego crear objetos a partir de ellas. Lo que haremos nosotros, por el momento, ser utilizar objetos ya
definidos por la aplicacin Excel (WorkSheets, Range,...) sin implementar ninguno de nuevo, por lo que en nuestro
caso es ms correcto hablar de programacin basada en objetos. Observe que esta es una de las grandes ventajas de
la OOP, utilizar objetos definidos por alguien sin tener que conocer nada sobre su implementacin, slo debemos
conocer sus propiedades y mtodos y utilizarlos de forma correcta.
Bueno, despus de esta extensa pero necesaria introduccin pasemos ya a hacer alguna cosa en Excel. No es
necesario que se aprenda lo anterior al pi de la letra y tampoco es necesario que lo comprenda al cien por cien, slo
tngalo presente para las definiciones que vienen a continuacin y ver como va asimilando los conceptos de
Objeto, propiedades, mtodos, etc.
Visita: www.systematic.edu.pe
Visita: www.systematic.edu.pe
1
2
Barra de Mens.- Est compuesta por Archivo, Edicin, Ver entre otros, la cual contiene los comandos
necesarios para poder trabajar en el Editor de Visual Basic.
Barra de Herramientas Estndar.- Es la que contiene conos a modo de acceso directo de los comandos de la
barra de Mens.
Explorador de Proyectos.- En este Sector Visualizaremos todos los nombres de los objetos principales
(Formularios, mdulos, hojas) con los que estamos trabajando en nuestro Proyecto.
Ventana de Propiedades.- En este sector observaremos y controlaremos las propiedades de los objetos con
los que estamos trabajando en nuestro Proyecto.
5
Visita: www.systematic.edu.pe
rea de Trabajo.- En este Sector Visualizaremos todos los objetos con los que estamos trabajando, tambin
visualizaremos las reas de codificacin de cada objeto y de los mdulos.
Si nuestro Editor de Visual Basic carga sin el Explorador de Proyectos, podemos activarlo de la siguiente manera:
Click en el Men Ver y luego dar click en Explorador de Proyectos de una manera ms rpida usando la
combinacin de Teclas: Ctrl. + R.
Si nuestro Editor de Visual Basic carga sin la ventana de Propiedades, podemos activarlo de la siguiente manera:
Click en el Men Ver y luego dar click en Ventana de Propiedades de una manera ms rpida presionando la tecla
de funcin F4.
Visita: www.systematic.edu.pe
Visita: www.systematic.edu.pe
10
Observe el cdigo:
Range("A1").Value="Hola"
En esta lnea estamos indicando que trabajamos con un objeto Range. Para indicarle que nos referimos a la casilla
A1, encerramos entre parntesis esta referencia (ms adelante ver otra forma de referirnos a las casillas). De este
objeto, indicamos que queremos establecer un nuevo valor para la propiedad Value, observe que para separar el
objeto de su propiedad utilizamos la notacin punto.
Recuerde que el conjunto Range es un objeto que pende del objeto WorkSheets, as por ejemplo el siguiente cdigo
hara lo mismo que el anterior.
WorkSheets(1).Range("A1").Value = "Hola"
Bueno, de hecho no hace lo mismo, en la primera opcin, el texto "Hola" se pone dentro de la casilla A1 de la hoja
activa, mientras que en el segundo es en la casilla A1 de primera hoja ( del conjunto de hojas). La segunda notacin
es ms larga, pero tambin ms recomendable ya que se especifican todos los objetos. En muchas ocasiones se
pueden omitir algunos objetos precedentes, no le aconsejamos hacerlo, sus programas perdern claridad y
concisin.
Si desea hacer referencia a la hoja activa puede utilizar ActiveSheet, as, el primer ejemplo lo dejaremos de la
manera siguiente.
Visita: www.systematic.edu.pe
11
Para terminar con este primer ejemplo. WorkSheets estn dentro del Objeto WorkBooks (libros de trabajo) y
WorkBooks estn dentro de Application. Application es el objeto superior, es el que representa la aplicacin Excel.
As, el primer ejemplo, siguiendo toda la jerarqua de objetos quedara de la forma siguiente.
Insistiendo con la nomenclatura, Application casi nunca es necesario especificarlo, piense que todos los objetos
penden de este, WorkBooks ser necesario implementarlo si en las macros se trabaja con diferentes libros de
trabajo (diferentes archivos), a partir de WorkSheets, es aconsejable incluirlo en el cdigo, sobre todo si se quiere
trabajar con diferentes hojas, ver, sin embargo, que en muchas ocasiones no se aplica.
2.9.5 Ejecutar un procedimiento o funcin.
Pruebe ejecutar el primer procedimiento de ejemplo.
1. Site el cursor dentro del procedimiento.
2. Active opcin de la barra de mens Ejecutar/ Ejecutar Sub Userform.
Visita: www.systematic.edu.pe
12
Visita: www.systematic.edu.pe
13
True.
True, que traducido es verdadero, simplemente indica que la propiedad Bold est activada. Si se deseara desactivar,
bastara con igualarla al valor False.
2.9.7 La funcin RGB.
Observe que para establecer el color de la propiedad se utiliza la funcin RGB(Red, Green, Blue), los tres argumentos
para esta funcin son valores del 0 a 255 que corresponden a la intensidad de los colores Rojo, Verde y Azul
respectivamente.
Al ejecutar la macro tendremos lo siguiente:
Como ves el texto sale en negrita y de color rojo ya que tiene intensidad solo en el color rojo de la funcin RGB.
Referenciar un rango de celdas.
Slo tiene que cambiar a la forma Casilla_Inicial:Casilla_Final. Por ejemplo aplicar el ltimo ejemplo al rango de
casillas que va de la A1 a la A8, ponga:
Como ves se agrega el texto Hola en negrita y de color rojo en el rango A1:A8.
Visita: www.systematic.edu.pe
14
2.9.8 Variables.
A continuacin vamos a repetir el programa Ejemplo1, pero en lugar de poner "Hola" en la casilla A1 de la hoja
activa, dejaremos que el usuario entre un texto desde teclado y a continuacin guardaremos ese valor en esa casilla.
Observe que el valor que entre del usuario debe guardarse en algn lugar para poder ponerlo despus en la casilla
A1; pues bien, ese valor se guardar en una variable. Una variable es simplemente un trozo de memoria que la
funcin o procedimiento se reserva para guardar datos, la forma general de declarar una variable es:
DIM variable AS tipo.
Siendo variable el nombre que se asigna a la misma y Tipo el tipo de datos que se guardarn (nmeros, texto, fecha,
boleanos,...). En nuestro ejemplo, declararemos la variable de tipo String (tipo texto), y lo haremos de la forma
siguiente:
Dim Texto As String
Con esto estamos indicando que se reserve un trozo de memoria (el que sea) , que se llama Texto y que el tipo de
datos que se guardarn ah sern caracteres.
2.9.9 La Funcin InputBox.
Esta funcin muestra una ventana para que el usuario pueda teclear datos. Cuando se pulsa sobre Aceptar, los datos
entrados pasan a la variable a la que se ha igualado la funcin. Vea la lnea siguiente:
Texto = InputBox("Introduzca el texto", "Entrada de datos").
Si en la ventana que muestra InputBox pulsa sobre el botn Aceptar, los datos tecleados se guardarn en la variable
Texto.
Sintaxis de InputBox.
InputBox(Mensaje, Ttulo, Valor por defecto, Posicin horizontal, Posicin Vertical, Archivo ayuda, Nmero de
contexto para la ayuda).
Mensaje: Es el mensaje que se muestra en la ventana. Si desea poner ms de una lnea ponga
Chr(13) para cada nueva lnea, vea el ejemplo siguiente.
Ttulo : Es el ttulo para la ventana InputBox. Es un parmetro opcional.
Valor por defecto: Es el valor que mostrar por defecto el cuadro donde el usuario entra el valor.
Parmetro opcional.
Posicin Horizontal: La posicin X de la pantalla donde se mostrar el cuadro, concretamente es la
posicin para la parte izquierda. Si se omite el cuadro se presenta horizontalmente centrado a la
pantalla.
Posicin Vertical: La posicin Y de la pantalla donde se mostrar el cuadro, concretamente es la
posicin para la parte superior. Si se omite el cuadro se presenta verticalmente centrado a la
pantalla.
Archivo Ayuda: Es el archivo que contiene la ayuda para el cuadro. Parmetro opcional.
Visita: www.systematic.edu.pe
15
Nmero de contexto para la ayuda: Nmero asignado que corresponde al identificador del archivo
de ayuda, sirve para localizar el texto que se debe mostrar. Si se especifica este parmetro, debe
especificarse obligatoriamente el parmetro Archivo Ayuda.
Ejemplo 3
Al ejecutar la macro se mostrar una ventanita que es la que se genera con la funcin InputBox, en ella ingresaremos
un Texto y luego pulsamos el botn aceptar:
El resultado ser:
Visita: www.systematic.edu.pe
16
Este ejemplo tambin se puede hacer sin variables. Para eso Codificaremos de la siguiente manera:
Al ejecutar la macro nos mostrar las siguientes Ventanas donde ingresaremos los datos solicitados y pulsaremos
enter:
Visita: www.systematic.edu.pe
17
Ejecute el procedimiento y ponga respectivamente los valores 25 y 25. Observe que todo ha ido correctamente y en
la casilla A1 de la hoja activa aparece un 50.
InputBox 1
Visita: www.systematic.edu.pe
InputBox2
18
Ahora, vuelva a ejecutar el programa y cuando se le pide el primer valor teclee "Hola". Observe que el programa se
detiene indicando un error en el tipo de datos. Efectivamente, observe que la funcin InputBox devuelve siempre
datos tipo String, en el primer ejemplo no ha habido ningn problema, al entrar caracteres numricos1, estos
pueden asignarse a variables tipo Integer porque Visual Basic hace automticamente la conversin, pero al entrar
texto e intentarlo asignar a una variable Integer Visual Basic muestra un error indicando que la variable no es
adecuada para los datos que se desean guardar.
InputBox1
Para solucionar estos problemas se deben utilizar funciones de conversin de tipo. Estas funciones, como su nombre
indica, convierten datos de un tipo a otro, de String a Integer, de Integer a String, de Date a String ,... As el
procedimiento anterior quedara.
La funcin Val(Dato String), convierte una cadena de caracteres a valor numrico. Si la cadena a convertir contiene
algn carcter no numrico devuelve 0. As, si al pedir un valor se teclea "Hola", la funcin Val, devolver un cero.
Visita: www.systematic.edu.pe
19
Visita: www.systematic.edu.pe
20
Ejemplo 6.
Entrar una cantidad que representa el precio de algo por el teclado con la instruccin InputBox y guardarlo en la
celda A1 de la hoja activa. Si el valor entrado desde el teclado (y guardado en A1) es superior a 1000, pedir
descuento con otro InputBox y guardarlo en la casilla A2 de la hoja activa.
Calcular en A3, el precio de A1 menos el descuento de A2.
21
Nota que no nos muestra el InputBox solicitando el descuento ya que el valor ingresado no es mayor a 1000 y
tenemos el siguiente resultado:
Ahora en la celda A2 se muestra 200 que fue el valor de descuento que asignamos.
Visita: www.systematic.edu.pe
22
Ejemplo 7.
El mismo que el anterior pero utilizando variables.
Ejemplo 8.
Macro que compara los valores de las casillas A1 y A2 de la hoja activa. Si son iguales pone el color de la fuente de
ambas en azul.
Visita: www.systematic.edu.pe
23
Estructura If..Else
Esta estructura se utiliza cuando se requiere una respuesta alternativa a una condicin. Su estructura es la siguiente:
Si Condicin Entonces
Sentncia1
Sentncia2
.
.
SentnciaN
Sino
Sentncia1
Sentncia2
.
.
SentnciaN
Fin Si
Observe que, si se cumple la condicin, se ejecuta el bloque de sentencias delimitado por Si Condicin Entonces y Si
no se cumple la condicin se ejecuta el bloque delimitado por Sino y Fin Si. En Visual Basic la instruccin Si Condicin
Entonces ... Sino ... Fin Si se expresa con las instrucciones siguientes:
If Condicin Then
Sentncia1
Sentncia2
.
.
SentnciaN
Else
Sentncia1
Sentncia2
.
.
SentnciaN
End If
Visita: www.systematic.edu.pe
24
Ejemplo 9.
Entrar una cantidad que representa el precio de algo por el teclado con la instruccin InputBox y guardarlo en la
celda A1 de la hoja activa. Si el valor entrado desde el teclado (y guardado en A1) es superior a 1000, se aplica un
descuento del 10% sino se aplica un descuento del 5%, el descuento se guarda en la casilla A2 de la hoja activa.
Colocar en A3, el total descuento y en A4 el total menos el descuento.
25
Donde tenemos como descuento 0.5 (5%) ya que la cantidad no excede a 1000.
Ejemplo 10.
Restar los valores de las celdas A1 y A2. Guardar el resultado en A3. Si el resultado es positivo o 0, poner la fuente de
A3 en azul, sino ponerla en rojo.
Ahora ingresemos los siguientes datos en nuestra hoja de Excel y luego ejecutemos nuestra macro:
Visita: www.systematic.edu.pe
26
Visita: www.systematic.edu.pe
27
Estructuras If anidadas.
No tiene que sorprenderle, dentro de una estructura if puede ir otra, y dentro de esta otra, y otra... Vea el ejemplo
siguiente.
Ejemplo 11.
Comparar los valores de las casillas A1 y A2 de la hoja activa. Si son iguales, escribir en A3 "Los valores de A1 y A2 son
iguales", si el valor de A1 es mayor que A2, escribir "A1 mayor que A2", sino, escribir "A2 mayor que A1.
Nos muestra que los valores son iguales. T prueba cambiando los valores y vers que tambin cambiar el
resultado.
Observe que la segunda estructura If..Else..End If queda dentro del Else de la primera estructura. Esta es una regla
general, cuando pone un End If, este cierra siempre el ltimo If ( o Else) abierto.
Visita: www.systematic.edu.pe
28
Observe que para que se ejecute el bloque de instrucciones entre If.. End If deben cumplirse las dos condiciones que
se evalan, si falla cualquiera de las dos (o las dos a la vez), no se ejecuta dicho bloque.
Visita: www.systematic.edu.pe
29
Observe que para que se ejecute el bloque de instrucciones entre If.. End If slo es necesario que se cumpla alguna
de las dos condiciones que se evalan (o las dos a la vez). Slo cuando no se cumple ninguna de las dos no se
ejecutan las instrucciones del bloque.
Visita: www.systematic.edu.pe
30
Tablas de la verdad.
Vea las tablas siguientes para ver los resultados de evaluar dos condiciones con el operador And y con el operador
Or.
AND
OR
Condicin 1
Condicin 2
Resultado
Condicin 1
Condicin 2
Resultado
Falsa
Falsa
Cierta
Cierta
Falsa
Cierta
Falsa
Cierta
Falso
Falso
Falso
Cierta
Falsa
Falsa
Cierta
Cierta
Falsa
Cierta
Falsa
Cierta
Falso
Cierto
Cierto
Cierto
Observe que con el operador AND deben de cumplirse todas las condiciones (dos o veinticinco) para que el resultado
sea cierto. Con el operador OR slo es necesario que se cumpla una (de las dos o de las veinticinco) para que el
resultado sea cierto.
Visita: www.systematic.edu.pe
31
Debemos tener como resultado 169 ya que como operador tenemos x que indica la multiplicacin.
Visita: www.systematic.edu.pe
32
Observe que en el ejemplo anterior todas las instrucciones if evalan la misma variable. El programa funciona
correctamente pero para estos casos es mejor utilizar la instruccin Select Case, el motivo principal es por legibilidad
y elegancia. Select Case tiene la sintaxis siguiente:
Select Case Expresin
Case valores :
Instrucciones.
Case valores :
Instrucciones.
.
.
Case valores:
Instrucciones.
Case Else
Instrucciones en caso que no sean ninguno de los valores anteriores.
End Select
Vea el ejemplo anterior solucionado con esta estructura.
Ejemplo 16.
Al ejecutar la macro teniendo los datos anteriores obtendremos los mismos resultados.
Vea el ejemplo siguiente donde cada sentencia Case evala un rango de valores.
Visita: www.systematic.edu.pe
33
Ejemplo 17.
Programa que pide tres notas de un alumno mediante la funcin InputBox. Las notas van a parar respectivamente a
las casillas A1, A2 y A3 de la hoja activa. El programa calcula el promedio y lo deja en A4. Si el promedio est entre 0
y 8 deja en A5 el mensaje "Muy deficiente", si el promedio es 9 deja en A5 el mensaje "Deficiente", si el promedio es
10 deja "Insuficiente", si es 11 "Suficiente", si es 14 "Bien", si est entre 17 y 18 deja "Notable", si es mayor que 18
deja "Sobresaliente".
Visita: www.systematic.edu.pe
34
Imagine que en alguna de las casillas que se deben operar no hubiera ningn valor o bien datos alfanumricos. Al
ejecutar la macro se producir un error. Aunque con Visual Basic se puede controlar el flujo del programa cuando se
produce un error imprevisto, para solucionar este problema utilizaremos una funcin de comprobacin que nos diga
si en las casillas A1 y A2 hay valores adecuados (numricos) para proseguir con la ejecucin de la macro, en caso
contrario se mostrar un error y no se ejecutar ninguna de las operaciones.
La funcin que utilizaremos es IsNumeric(expresin), esta funcin devuelve un valor True si la expresin que se
evala es un valor numrico, en caso contrario devuelve False. Vea como quedara el programa. Tambin se utiliza la
funcin IsEmpty para comprobar si en B1 hay algo, IsEmpty(Expresin) evala si expresin est vaca, devuelve True
si es as y False en caso contrario.
Visita: www.systematic.edu.pe
35
Ejemplo 18.
En lugar de los tres If de comprobacin se hubiera podido utilizar el operador OR de la manera siguiente:
If not IsNumeric(ActiveSheet.Range("A1")) Or not IsNumeric(ActiveSheet.Range("A2")) _
Or IsEmpty(ActiveSheet.Range("B1")) Then
MsgBox Prompt:="Debe entrar nmeros en A1 y A2 y un signo (+,-,x, : ) en B1,
Title:="ERROR"
Else
' Instrucciones de las operaciones
.......
End if
Visita: www.systematic.edu.pe
36
Visita: www.systematic.edu.pe
37
El primer grupo de valores (0 a 5) describe el nmero y el tipo de los botones mostrados en el cuadro de dilogo; el
segundo grupo (16, 32, 48, 64) describe el estilo del icono, el tercer grupo (0, 256, 512) determina el botn
predeterminado y el cuarto grupo (0, 4096) determina la modalidad del cuadro de mensajes. Cuando se suman
nmeros para obtener el valor final del argumento buttons, se utiliza solamente un nmero de cada grupo.
Nota Estas constantes las especifica Visual Basic for Applications. Por tanto, el nombre de las mismas puede
utilizarse en cualquier lugar del cdigo en vez de sus valores reales.
Los valores que puede devolver la funcin msgbox en funcin del botn que pulse el usuario se muestran en la tabla
siguiente.
Tabla de valores que puede devolver MsgBox.
Ejemplos de MsgBox.
Visita: www.systematic.edu.pe
38
Algunas veces puede que le interese simplemente desplegar un cuadro MsgBox para mostrar un mensaje al usuario
sin que se requiera recoger ningn valor. En este caso puede optar por la forma siguiente:
MsgBox Prompt:="Hola usuaria, Ha acabado el proceso", Buttons:=VbOkOnLy _
Title:="Mensaje"
Lo que no puede hacer porque Visual Basic dara error es poner la primera forma sin igualarla a ninguna variable. Por
ejemplo, la expresin siguiente es incorrecta:
MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")
Sera correcto poner:
X= MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")
En este caso, aunque X reciba un valor, luego no se utiliza para nada, es decir simplemente se pone para que Visual
Basic no d error.
Otra forma tambin sera agregar el cuadro de mensaje con la siguiente expresin:
MsgBox "Hola Usuario, Ha acabado el Proceso", vbOKOnly, "Mensaje"
2.9.18 La instruccin With.
Suponemos que llegado a este punto le parecer engorroso tener que referirse a los objetos siguiendo toda o casi
toda la jerarqua. Ya hemos indicado que es mejor hacerlo de esta manera porque el programa gana en claridad y
elegancia y, consecuentemente, el programador gana tiempo a la hora de hacer modificaciones o actualizaciones. La
sentencia With le ayudar a tener que escribir menos cdigo sin que por esto el programa pierda en claridad.
Concretamente esta funcin sirve para ejecutar una serie de acciones sobre un mismo Objeto. Su sintaxis es la
siguiente:
With Objeto
Instrucciones
End With
Repetiremos el ejemplo 13 utilizando esta sentencia. Observe como con With se hace referencia al objeto
ActiveSheet.
Visita: www.systematic.edu.pe
39
Ejemplo 19.
Entrar el Nombre, la cantidad y el precio de un producto desde el teclado y guardarlos respectivamente en A1, A2 y
A3. Calcular el total y guardarlo en A4. Si el total es superior a 10000 o el nombre del producto es "Patatas", pedir un
descuento, calcular el total descuento y guardarlo en A5, luego restar el descuento del total y guardarlo en A6.
Visita: www.systematic.edu.pe
40
Visita: www.systematic.edu.pe
41
Visita: www.systematic.edu.pe
42
Ejemplo 23.
Llenar un rango de filas, empezando por una celda, que se debe especificar desde teclado, con una serie de 10
valores correlativos (comenzando por el 1).
43
Ejemplo 24.
El mismo con el que introducamos el tema (ejemplo 20), pero utilizando el for y propiedad Cells
Propiedad Offset.
Esta propiedad es tambin muy til a la hora de recorrer rango. Offset, que significa desplazamiento, es una
propiedad del objeto Range y se utiliza para referenciar una casilla situada a n Filas y n Columnas de una casilla dada.
Vea los ejemplos siguientes:
ActiveSheet.Range("A1").Offset(2, 2).Value = "Hola" ' Casilla C3 = Hola, 2 filas y 2 columnas desde A1.
ActiveCell.Offset(5,1).Value = "Hola" ' 5 Filas por debajo de la casilla Activa = Hola
ActiveCell.Offset(2,2).Activate 'Activar la casilla que est 2 filas y 2 columnas de la activa
Ejemplo 25.
El mismo con el que introducamos el tema (ejemplo 20), pero utilizando el For y propiedad Offset
Visita: www.systematic.edu.pe
44
Ejemplo 26.
El mismo con el que introducamos el tema (ejemplo 20), pero utilizando el For y propiedad Offset.
Observe que ahora vamos cambiando de celda activa.
Observe la diferencia entre los ejemplos 25 y 26, ambos utilizan la propiedad Offset de diferente forma, en el
ejemplo 25 la casilla activa siempre es la misma A1, Offset se utiliza para referenciar una casilla a partir de esta. En el
ejemplo 26 se va cambiando de casilla activa cada vez de forma que, cuando termina la ejecucin del programa la
casilla activa es A6.
Cuando utilizar cada mtodo, como casi siempre depende de lo que se pretenda hacer. Aqu es bastante claro, si le
interesa que no cambie la casilla utilice Offset como en el ejemplo 25, en caso que interese que vaya cambiando,
haga como en el Ejemplo 6. Por supuesto hay muchas variantes sobre el estilo de recorrer Celdas, tanto con Cells
como con Offset, solo tiene que ir probando y, como casi siempre, el que ms le guste.
Visita: www.systematic.edu.pe
45
Visita: www.systematic.edu.pe
46
Ejemplo 27.
Programa para entrar registros en la base de datos. Cada campo se entra con InputBox. El programa va pidiendo
datos mientras se entre un valor en el InputBox correspondiente al nombre, es decir cuando al preguntar el nombre
no se entre ningn valor, terminar la ejecucin del bloque encerrado entre Do While...Loop. Observe la utilizacin
de la propiedad Offset para colocar los datos en las celdas correspondientes.
Ejemplo 28.
Preste especial atencin a este ejemplo ya que seguro que el cdigo que viene a continuacin lo utilizar en muchas
ocasiones. Antes que nada observe el ejemplo anterior, fjese en que siempre empezamos a llenar el rango de la hoja
a partir de la celda A2, esto tiene una nefasta consecuencia, la segunda vez que ejecute la macro machacar los
datos de A2:D2 y si continua ejecutando machacar los datos de los rangos siguientes. Una solucin sera observar
cual es la casilla vaca siguiente y cambiar en la instruccin ActiveSheet.Range("A2").Activate , la referencia A2 por
la que corresponde a la primera casilla vaca de la columna A. El cdigo que le mostramos a continuacin har esto
por nosotros, es decir recorrer una fila de celdas a partir de A1 hasta encontrar una vaca y dejar a esta como celda
activa para que la entrada de datos comience a partir de ella.
Visita: www.systematic.edu.pe
47
Cuando se tienen que entrar desde el teclado conjuntos de valores, algunos programadores y usuarios prefieren la
frmula de que el programa pregunte si se desean entrar ms datos, la tpica pregunta Desea Introducir ms
datos?, si el usuario contesta S, el programa vuelve a ejecutar las instrucciones correspondientes a la entrada de
datos, si contesta que no se finaliza el proceso, observe como quedara nuestro bucle de entrada de datos con este
sistema.
Mas_datos = vbYes
Do While Mas_Datos = vbYes
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Entre la Edad : ", "Edad"))
Fecha=Cdate(InputBox("Entra la Fecha : ", "Fecha"))
With ActiveCell
.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).value = fecha
End With
ActiveCell.Offset(1,0).Activate
Preguntar al usuario si desea entrar otro registro.
Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")
Visita: www.systematic.edu.pe
48
Loop
** Observe que es necesaria la lnea anterior al bucle Mas_datos = vbYes, para que cuando se evale la condicin
por vez primera esta se cumpla y se ejecuten las sentencias de dentro del bucle, Mas_datos es una variable de tipo
Integer. Vea la seccin siguiente donde se estudia una variante de la estructura Do While que es ms adecuada para
este tipo de situaciones.
Estructura Do..Loop While.
El funcionamiento de esta estructura repetitiva es similar a la anterior salvo que la condicin se evala al final, la
inmediata consecuencia de esto es que las instrucciones del cuerpo del bucle se ejecutaran al menos una vez.
Observe que para nuestra estructura de entrada de datos vista en el ltimo apartado de la seccin anterior esta
estructura es ms conveniente, al menos ms elegante, si vamos a entrar datos, al menos uno entraremos, por tanto
las instrucciones del cuerpo del bucle se deben ejecutar al menos una vez, luego ya decidiremos si se repiten o no.
Do
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Entre la Edad : ", "Edad"))
Fecha=Cdate(InputBox("Entra la Fecha : ", "Fecha"))
With ActiveCell
.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).value = fecha
End With
ActiveCell.Offset(1,0).Activate
Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")
Mientras Mas_Datos = vbYes
Loop While Mas_Datos = vbYes
Observe que en este caso no es necesario la lnea Mas_Datos = vbYes antes de Do para forzar la entrada en el bucle
ya que la condicin va al final.
Estructura Do..Loop Until (Hacer.. Hasta que se cumpla la condicin).
Es otra estructura que evala la condicin al final observe que la interpretacin es distinta ya que el bucle se va
repitiendo HASTA que se cumple la condicin, no MIENTRAS se cumple la condicin. Cual de los dos utilizar, pues,
no se sorprenda, la que entienda mejor o le guste ms.
La entrada de datos con este bucle quedara:
Do
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Ent re la Edad : ", "Edad")
Fecha=Cdate("InputBox("Entra la Fecha : ", "Fecha")
With ActiveCell
.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).value = fecha
End With
ActiveCell.Offset(1,0).Activate
Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")
Visita: www.systematic.edu.pe
49
Ejemplo 32.
Visita: www.systematic.edu.pe
50
Ejemplo 29
Es el mismo programa que el visto en el ejemplo 28 pero el cdigo que salta casilla hasta que se encuentra una vaca
se implementa en un procedimiento llamado, Saltar_Celdas_Llenas. Observe que para entrar valores se ha sustituido
Do While..Loop por Do.. Loop While.
Visita: www.systematic.edu.pe
51
Este grupo de Controles cuenta con tres opciones muy importantes como:
Visita: www.systematic.edu.pe
52
Seleccione la hoja Men para all crear dos botones. Para trabajar con estos controles es necesario Activar el
modo de diseo y dar clic en Insertar, seleccione el Botn de comando.
Esta vez haremos un botn que cuando se presione pase a otra hoja del Excel. Por ejemplo se puede hacer un
men con varios botones que al presionarlos pasen a las distintas opciones. Comencemos... En la hoja Men
cree dos botones de comando. Por Ejemplo:
Seleccione el primer botn y de un clic derecho en la opcin y muestre las propiedades. Cambie la Propiedad
Caption por: Ventas En Name: btnventas
Seleccione el segundo botn y muestre las propiedades Cambie la Propiedad Caption por: Compras
En Name: btncompras
Si realiz bien estos pasos Ud. Debera ver lo siguiente:
Visita: www.systematic.edu.pe
53
Si desea colocar iconos en los botones seleccione la propiedad Picture e inserte una imagen de extensin .ico.
Para que visualice el texto cambie la posicin PicturePosition a: 5 Seleccione el primer botn y haga clic en ver
cdigo
En esta parte se abrir el Editor de Visual Basic y debe escribir lo siguiente: Hoja2.Activate Cierre el editor de Visual
Basic (nota: cada vez que cierre el editor de Visual Basic, hgalo del cuadro de cerrar X que est ms arriba, porque
puede confundirse y cerrar la ventana de editar cdigo, no se preocupe que no est cerrando Excel.)
Seleccione el segundo botn y haga clic en ver cdigo
Escriba: Hoja3.activate
Salga del modo de diseo y navegue con los botones que program. Ms adelante utilizaremos estos botones para
cargar formularios desde VBA en Excel.
2.9.23 CREANDO FORMULARIOS Y PROGRAMNDOLOS
Ahora aprenderemos a dominar lo mximo de Excel que es crear formularios y programarlos, bueno un formulario
es una ventana que se programa por medio de controles y estos controles responden a sucesos que nosotros
programamos. Todo esto se encuentra dentro de Visual Basic.
A continuacin se Muestra como crear un formulario y como programarlo:
1. Presione La Teclas Alt + F11, para entrar al editor de Visual Basic.
2. Activa las siguientes opciones:
De clic en el Men Ver y elija la opcin Explorador de Proyectos
De clic en el Men ver y elija la opcin Ventana Propiedades
3. Del Men Insertar elija la Opcin UserForm.
Visita: www.systematic.edu.pe
54
Esto inserta el Formulario que programaremos con controles. En el Explorador de Proyecto se observara que se
inserto el UserForm.
Tambin cuando de clic en el Formulario USERFORM1 se debe de activar el Cuadro de Herramientas, si no se activa
de clic en el Men Ver y elija la opcin Cuadro de Herramientas.
4. Elija del Cuadro de Herramientas el Control Etiqueta el que tiene la A y Arrastre dibujando en el Formulario
USERFORM1 la etiqueta. Quedara el nombre Label1, despus de un clic en la etiqueta dibujada y podr modificar el
nombre de adentro y pondremos ah Nombre.
5. Elija del Cuadro de Herramientas el control Cuadro de Texto el que tiene ab y arrastre dibujando en el formulario
USERFORM1 el cuadro de texto a un lado de la etiqueta que dice Nombre. El cuadro de texto debe de estar vaco y
su nombre ser Textbox1, el nombre solo aparecer en el control.
6. Haga los dos pasos anteriores igualmente poniendo Direccin en la Label2 y Telfono en la Label3 y tambin
dibjeles su Textbox. Esto quedara as despus de haberlo hecho.
Visita: www.systematic.edu.pe
55
7. Elija del Cuadro de Herramientas el control Botn de Comando y Arrastre dibujando en el Formulario
USERFORM1 el Botn, despus de un clic en el nombre del Botn dibujado y podr modificar el nombre y
pondremos ah Insertar. Si por error da doble clic en la Botn y lo manda a la pantalla de programacin de la
etiqueta, solo de doble clic en UserForm1 que se encuentra en el Explorador de Proyecto.
As quedara el Formulario formado por los controles:
8. Ahora de doble clic sobre el control Textbox1 para programarlo y despus inserte el siguiente cdigo:
Private Sub TextBox1_Change()
Range("A9").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Esto indica que se vaya a A9 y escriba lo que hay en el Textbox1
Nota.-Lo que est en azul lo genera Excel automticamente, usted solo escribir lo que est en Negrita.
Para volver al Formulario y programar el siguiente Textbox de doble clic en UserForm1 que se encuentra en el
Explorador de Proyecto, o simplemente de clic en Ver Objeto en el mismo Explorador de Proyecto.
9. Ahora de doble clic sobre el control Textbox2 para programarlo y despus inserte el siguiente cdigo:
Private Sub TextBox2_Change()
Range("B9").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Esto indica que se vaya a B9 y escriba lo que hay en el Textbox2.
10. Ahora de doble clic sobre el control Textbox3 para programarlo y despus inserte el siguiente cdigo:
Private Sub TextBox3_Change()
Range("C9").Select
ActiveCell.FormulaR1C1 = TextBox3
End Sub
Visita: www.systematic.edu.pe
56
Visita: www.systematic.edu.pe
57
11
10
2
13
12
4
1
15
5
14
8
6
Visita: www.systematic.edu.pe
58
59
Visita: www.systematic.edu.pe
60
Luego creamos el procedimiento activar. Recuerda que el procedimiento debe ser creado en un sector en
blanco del rea de codificacin donde Codificamos:
Public Sub activar()
txtcodigoc.Text = Empty
txtcliente.Text = Empty
txtdireccionc.Text = Empty
txtruc.Text = Empty
txtemail.Text = Empty
txtcodigoc.Enabled = True
txtcliente.Enabled = True
txtdireccionc.Enabled = True
txtruc.Enabled = True
txtemail.Enabled = True
cmdprimero.Enabled = False
cmdsiguiente.Enabled = False
cmdanterior.Enabled = False
cmdultimo.Enabled = False
cmdnuevo.Enabled = False
cmdguardar.Enabled = True
cmdcancelar.Enabled = True
cmdmodificar.Enabled = False
cmdeliminar.Enabled = False
cmdcerrar.Enabled = False
txtcodigoc.SetFocus
End Sub
Luego da doble click en el botn Guardar y codifica:
Private Sub cmdguardar_Click()
almacen = ActiveCell.Address
ActiveCell.Value = txtcodigoc.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtcliente.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtdireccionc.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtruc.Text
ActiveCell.Offset(0, 1).Select
Visita: www.systematic.edu.pe
61
ActiveCell.Value = txtemail.Text
desactivar
Range(almacen).Select
ActiveWorkbook.Save
numreg
cmdanterior_Click
End Sub
Nota. - Las lneas en azul son creadas por el editor de VBA.
Luego creamos el procedimiento desactivar. Recuerda que el procedimiento debe ser creado en un sector en
blanco del rea de codificacin donde Codificamos:
Public Sub desactivar()
txtcodigoc.Enabled = False
txtcliente.Enabled = False
txtdireccionc.Enabled = False
txtruc.Enabled = False
txtemail.Enabled = False
cmdprimero.Enabled = True
cmdsiguiente.Enabled = True
cmdanterior.Enabled = True
cmdultimo.Enabled = True
cmdnuevo.Enabled = True
cmdguardar.Enabled = False
cmdcancelar.Enabled = False
cmdmodificar.Enabled = True
cmdeliminar.Enabled = True
cmdcerrar.Enabled = True
End Sub
Visita: www.systematic.edu.pe
62
Luego creamos el procedimiento desactivar. Recuerda que el procedimiento debe ser creado en un sector en
blanco del rea de codificacin donde Codificamos:
Public Sub llenardatos()
ActiveCell.Offset(0, 1).Select
txtcliente.Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
txtdireccionc.Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
txtruc.Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
txtemail.Text = ActiveCell.Value
End Sub
Luego da doble click en el botn Eliminar y codifica:
Private Sub cmdeliminar_Click()
rpta = MsgBox("Est seguro que desea" & Chr(13) + " eliminar este registro?", 4 + 32, "seguridad")
If rpta = 6 Then
Selection.EntireRow.Delete
con = con - 1
Else
Cancel = True
End If
cmdprimero_Click
End Sub
Nota. - Las lneas en azul son creadas por el editor de VBA.
Luego da doble click en el botn Cerrar y codifica:
Private Sub cmdcerrar_Click()
Me.Hide
Unload Me
End Sub
Nota. - Las lneas en azul son creadas por el editor de VBA.
Visita: www.systematic.edu.pe
63
Ahora si ejecutamos nuestro formulario realizaremos los procesos de mantenimiento de nuestra hoja de
Clientes.
Visita: www.systematic.edu.pe
64
1
10
11
12
13
2
3
4
1
5
6
Visita: www.systematic.edu.pe
14
15
65
66
Visita: www.systematic.edu.pe
67
68
ActiveWorkbook.Save
numreg
cmdanterior_Click
End Sub
Nota. - Las lneas en azul son creadas por el editor de VBA.
Luego creamos el procedimiento desactivar. Recuerda que el procedimiento debe ser creado en un sector en
blanco del rea de codificacin donde Codificamos:
Public Sub desactivar()
txtcodigop.Enabled = False
txtproveedor.Enabled = False
txtdireccionp.Enabled = False
txtrucp.Enabled = False
txtemailp.Enabled = False
cmdprimero.Enabled = True
cmdsiguiente.Enabled = True
cmdanterior.Enabled = True
cmdultimo.Enabled = True
cmdnuevo.Enabled = True
cmdguardar.Enabled = False
cmdcancelar.Enabled = False
cmdmodificar.Enabled = True
cmdeliminar.Enabled = True
cmdcerrar.Enabled = True
End Sub
Luego da doble click en el botn cancelar y codifica:
Private Sub cmdcancelar_Click()
cmdultimo_Click
desactivar
End Sub
Visita: www.systematic.edu.pe
69
Luego creamos el procedimiento llenardatos. Recuerda que el procedimiento debe ser creado en un sector en
blanco del rea de codificacin donde Codificamos:
Public Sub llenardatos()
ActiveCell.Offset(0, 1).Select
txtproveedor.Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
txtdireccionp.Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
txtrucp.Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
txtemailp.Text = ActiveCell.Value
End Sub
Visita: www.systematic.edu.pe
70
Ahora si ejecutamos nuestro formulario realizaremos los procesos de mantenimiento de nuestra hoja de
Proveedores.
Hoja Productos:
Visita: www.systematic.edu.pe
71
Una hoja
Y otra hoja
1
4
2
7
6
15
12
10
11
13
14
Visita: www.systematic.edu.pe
72
15.- aqu se insertar un listview, objeto que no se encuentra en el cuadro de herramientas por defecto, as es que
lo tenemos que insertar de la siguiente manera:
Click derecho sobre un lugar en blanco del cuadro de herramientas y click sobre controles adicionales:
Te mostrar una ventana, busca el objeto como se muestra en la imagen de abajo y dale click para seleccionarlo
luego da click en aceptar.
Visita: www.systematic.edu.pe
73
Luego en la ficha Column Headers debers insertar las columnas que se usarn en el diseo como son:
CODIGO, PRODUCTO, CANTIDAD, IMPORTE.
Visita: www.systematic.edu.pe
74
6
3
Visita: www.systematic.edu.pe
75
Luego da doble click al primer formulario creado y en el evento actvate codifica lo siguiente:
Visita: www.systematic.edu.pe
76
Visita: www.systematic.edu.pe
77
Visita: www.systematic.edu.pe
78
Luego da doble click al listview y codifcalo de tal manera que al dar doble click se muestre el segundo formulario
creado.
En el segundo formulario en el evento actvate del formulario codifica lo siguiente:
Visita: www.systematic.edu.pe
79
Visita: www.systematic.edu.pe
80
De sta manera queda programado nuestro formulario que controla el proceso de Facturacin.
Visita: www.systematic.edu.pe
81
3
4
Visita: www.systematic.edu.pe
82
Nota: En la instruccin Userform9.show deber ir el nombre del formulario el cual contiene a los botones que llaman
a los dems formularios.
Visita: www.systematic.edu.pe
83
Visita: www.systematic.edu.pe
84
Ahora tenemos que hacer que al cargar el libro se muestre automticamente el formulario de acceso, para
eso debemos realizar lo siguiente:
En el explorador de proyectos elige el libro de trabajo y dale doble click.
Nota:
Visita: www.systematic.edu.pe
85