You are on page 1of 96

UNIVERSIDAD DE ORIENTE

NÚCLEO DE ANZOÁTEGUI

ESCUELA DE INGENIERÍA Y CIENCIAS APLICADAS

DEPARTAMENTO DE SISTEMAS INDUSTRIALES

MICROSOFT EXCEL AVANZADO


(NIVEL PROGRAMACIÓN)

Realizado por: Msc. Ing. Pedro Salazar

Puerto La Cruz, Diciembre de 2013


CONTENIDO

SECCIÓN 1, USANDO LA GRABADORA DE MACROS


Conceptos Básicos
Qué es una Macro
Qué es la Grabadora de Macros
Qué es VBA (Visual Basic para aplicaciones)

Macros Simples
Definición

Macros Inteligentes
Definición
Estructuras básicas de programación en Visual Basic
Asignando datos a celdas desde una Macro

Manejo de Variables
Qué son las Variables
Declaración de Variables

SECCIÓN 2, MANEJO DE OBJETOS


Conceptos Básicos
Programación de Eventos sobre Objetos
Qué es un Evento
Qué es un Objeto
Tipos de objetos en VBA
Propiedades de los objetos
Métodos de los Objetos

Manejar Colecciones de Objetos


Definición
Colecciones de Libros y Hojas de Cálculo

Explorando Objetos Rango


Definición
Propiedad Range
ii
Rangos como Colecciones de Objetos
Rangos Derivados o Calculados

Asistencia en la Exploración de Objetos


Definición
Uso de la Ayuda del Excel Visual Basic
Uso de las Listas Automáticas
Uso del Examinador de Objetos

SECCIÓN 3, MACROS INTERACTIVAS


Conceptos Básicos
Qué es una Macro Interactiva
Qué es una Caja de Diálogo
Qué es un Formulario Personalizado
Qué son los Controles

Cajas de Diálogo Prediseñadas


InputBox
MsgBox

Formularios diseñados por el Usuario


Objeto UserForm
Objeto Control

SECCIÓN 4, DEPURANDO LAS MACROS


Tipos de Errores
Errores Sintácticos
Errores de Compilación
Errores Lógicos
Errores en Tiempo de Ejecución
Herramientas para Detectar y Corregir Errores
El Editor de Visual Basic
Comando Compilar <Proyecto>
Comando Paso a Paso por Instrucciones
Ventana Sugerencia de Datos

iii
APÉNDICES
Apéndice A: Funciones de Manejo de Datos
Apéndice B: Expresiones y Operadores
Apéndice C: Propiedades de los Formularios
Apéndice D: Propiedades de los Controles
Apéndice E: Eventos de los Objetos

iv
Sección
USANDO EL GRABADOR DE MACROS
1
CONCEPTOS BÁSICOS

 QUÉ ES UNA MACRO:


Es una serie de pasos que se almacenan siguiendo cierta secuencia y
estructura, que luego se pueden repetir incontables veces activándolos con
una combinación de teclas o algún botón programado para ello.

 QUÉ ES LA GRABADORA DE MACROS:


Es una herramienta con la que cuenta el Excel, como toda aplicación de
Microsoft Windows, que le permite al usuario desarrollar macros de una
manera transparente y fácil; lo cual solo consiste en: encender la grabadora,
desarrollar el proceso a grabar como habitualmente lo hacemos en el Excel, y
finalmente detener la grabación; paralelamente, a medida en que avanzamos
en los pasos anteriores, la grabadora de macros va codificando el programa
correspondiente en VBA (Visual Basic para Aplicaciones).

 QUÉ ES EL VBA (VISUAL BASIC PARA APLICACIONES):


Es un lenguaje de programación que trae integrado las aplicaciones Windows,
como el Excel, y que nos permite manejarlas independientemente como a
través de un control remoto. Hay que resaltar que a pesar de que el VBA viene
dentro del Excel (u otra aplicación Windows) no tiene ningún vínculo especial
que le ate a él. De hecho, el Excel expone sus destrezas a Visual Basic a
través de una serie de órdenes especiales denominadas biblioteca de objetos,
y Visual Basic a su vez se comunica con esa biblioteca de objetos del Excel. Lo
cual garantiza que cualquiera que supiera trabajar con Visual Basic, como
lenguaje de propósito general, cuente con una gran ventaja para comenzar con
la automatización del Excel, y cualquiera que aprendiera a escribir macros de
Excel en Visual Basic podría aplicar estos conocimientos a otros tipos de
programación Visual Basic.

MACROS SIMPLES
 DEFINICIÓN:
Son las que repiten una serie de pasos ejecutados durante la grabación, sin
toma de decisiones ni estructuras personalizadas de programación.

Ejercicio 1: Crear y probar una macro simple, que centre simultáneamente el


contenido de una celda tanto vertical como horizontalmente.

5
1. Ampliar el alto de la fila #1
a) Seleccionar toda la fila # 1 (Clic en el identificador de fila)
b) Clic en la tarjeta: Inicio I Sección: Celdas / Menú: Formato / Opción:
Alto de Fila...
c) Cambiar el valor del campo Alto de Fila: por el doble.

2. Seleccionar la celda A1.


3. Escriba su primer nombre y dele entrada sin mover el puntero (Clic en el
confirmador ).
4. Iniciar grabación de la macro con la grabadora:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Grabar macro
b) Definir campos:
 Nombre de la macro: Tipear una sola cadena de caracteres como
nombre, ejemplo CentrarTodo
 Método abreviado: Pulsar combinación de teclas que se le sumará al
Control (ctrl.), ejemplo Mayúscula () + C
 Guardar macro en: Este libro (opción por defecto).
Como alternativa tenemos: Libro de macros personal (libro que se
activa automáticamente al cargar el Excel y que por lo tanto estará
disponible para cualquier otro libro), o Libro nuevo.

c) Clic en Aceptar para iniciar grabación.


5. Ejecutar todas las acciones de menú y teclado que se quieren grabar:
a) Clic en la tarjeta: Inicio I Sección: Celdas / Menú: Formato / Opción:
Formato de celdas...

6
d) Clic en Aceptar.
6. Finalizar la grabación del macro: clic en botón Detener grabación ( ),
buscarlo en: Tarjeta: Vista I Sección: Macros o en la barra de estado.
7. Probar el macro:
a) Seleccionar la celda B1.
b) Escriba su Apellido y dele entrada sin mover el puntero: Clic en
c) Ejecutar macro: Control (ctrl.) + Mayúscula () + C

Ejercicio 2: Editar una macro generada con la grabadora.

7
1. Clic en la Tarjeta: Vista I Sección: Macros / Opción Ver Macros

2. Clic en el botón Modificar

3. Eliminar las instrucciones innecesarias:


a) Seleccionar las líneas a eliminar (ver ilustración anterior)
b) Pulsar tecla Suprimir (Supr).
4. Regresar al Excel: clic en el botón (Ver Microsoft Excel).
5. Probar nuevamente la macro:
a) Seleccionar la celda C1
b) Escriba su segundo Apellido y dele entrada sin mover el puntero: Clic en

c) Ejecutar macro: Control (ctrl.) + Mayúscula () + C

MACROS INTELIGENTES
 DEFINICIÓN:
Macros con estructura lógica de programación, que pueden tomar decisiones e

8
interactuar con el usuario, lo que garantiza su flexibilidad.

 ESTRUCTURAS BÁSICAS DE PROGRAMACIÓN EN VISUAL BASIC:


Como pudimos comprobar en la sección anterior, las macros generadas con la
grabadora son demasiado elementales. Pueden repetir lo que hemos hecho
mientras las grabábamos, pero no son capaces de adaptarse a circunstancias
variables; o sea, no son capaces de tomar decisiones ni de desarrollar
procesos repetitivos. La única forma de transformar las macros simples en
macros inteligentes, es añadiéndoles a mano las estructuras de control
(elementos del lenguaje de programación que permiten generar bloques de
decisión y bucles repetitivos) de las que adolecen. Estas estructuras en Visual
Basic, son las siguientes:
1. Bloques de Decisión (elementos para toma de decisiones):
a) IF...THEN (Selección Simple)
SINTAXIS:
IF <Condición> THEN
Bloque de Instrucciones
END IF
b) IF...THEN...ELSE (Selección Binaria).
SINTAXIS:
IF <Condición> THEN
Bloque de Instrucciones (Caso Positivo)
ELSE
Bloque de Instrucciones (Caso Negativo)
END IF.

c) SELECT CASE (Selección Múltiple)


SINTAXIS:
SELECT CASE <Expresión - Prueba>
CASE <Lista 1 - Expresiones>
Bloque 1 - Instrucciones
CASE <Lista 2 - Expresiones>
Bloque 2 - Instrucciones
CASE <Lista 3 - Expresiones>
Bloque 3 - Instrucciones
END SELECT.

2. Bucles Repetitivos (elementos para procesos iterativos):


a) DO...WHILE...LOOP (Hacer Mientras La Condición Sea Cierta)
SINTAXIS:
DO WHILE <Condición>
Bloque de Instrucciones

9
LOOP

DO
Bloque de Instrucciones
LOOP WHILE <Condición>

b) DO UNTIL (Hacer Hasta Que La Condición Se Haga Cierta)


SINTAXIS:
DO UNTIL <Condición>
Bloque de Instrucciones
LOOP

DO
Bloque de Instrucciones
LOOP UNTIL <Condición>

c) FOR NEXT (Repetición Controlada De Un Bloque De Instrucciones)


SINTAXIS:
FOR <Contador = Inicio> TO <final> [STEP <incremento>]
Bloque de Instrucciones
[EXIT FOR]
Bloque de Instrucciones
NEXT < Contador>

Ejercicio 3: Generar una macro que resalte en color amarillo, el fondo de las
celdas cuyo contenido sea mayor a 50.000, seleccionadas de entre un bloque
de datos aislados.
1. Generar data según se indica (Generar fórmula F1 y copiarla según flechas):

10
2. Calcule el TOTAL GASTOS de Enero en la celda C9, seleccionando la
Tarjeta: Fórmulas I Sección: Biblioteca de funciones / Botón
3. Rellenar hacia la derecha la fórmula de TOTAL GASTOS, hasta completar
los datos del mes de Febrero y Marzo.

4. Crear Una macro sencilla que rellene el fondo de la celda: C6 en amarillo.


a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Grabar macro

11
b) Definir campos y hacer clic en Aceptar
c) Seleccionar la celda: C6.
d) Clic en la Tarjeta: Inicio I Sección: Celdas / Menú Formato I Opción
Formato de celdas...

e) Seleccionar Tarjeta: Relleno I Color de fondo: Amarillo y hacer clic en


Aceptar.
f) Finalizar la grabación del macro: clic en botón Detener grabación ( )
g) Borrar el formato de la celda C6 y seleccionar la celda A1
h) Probar el macro: pulsar teclas Control (ctrl.) + Mayúscula () + R
5. Editar la macro y modificarla para que repita un proceso, y aplique una
función según una condición: Resaltar las celdas mayores de 50,000.00 en
el rango de datos C6:E9.
a) Clic en la Tarjeta: Programador I Sección: Código / Opción Macros
b) Seleccionar la macro ResaltarCelda y hacer clic en el botón Modificar
6. Añadir las instrucciones de control al macro y eliminar el código innecesario:

12
TRADUCCIÓN DEL CÓDIGO
Sub ResaltarCelda()  Inicio del procedimiento ResaltarCelda
Range("C6").Select  Selección de una celda (C6) con referencia absoluta
Do Until ActiveCell = ""  Hacer hasta que la celda activa esté vacía
(bucle1)
Do Until ActiveCell = ""  Hacer hasta que la celda activa esté vacía
(bucle2)
If ActiveCell > 50000 Then  Si la celda activa es mayor que 50000
entonces
With Selection.Interior  Con el interior de la selección actual aplicar
.Pattern = xlSolid  Patrón de relleno sólido
.Color = 65535  Índice de color # 65535 (Amarillo)
End With  Fin del bloque Con
End If  Fin del bloque Si
ActiveCell.Offset(1, 0).Range("a1").Select  Selección relativa a la celda
activa: celda ubicada 1 fila
abajo y en la misma columna
Loop  Repetir bucle2
ActiveCell.Offset(-1,1).Range("a1").Select  Selección relativa a la celda
activa: celda ubicada 1 fila
arriba y 1 columna a la
derecha

13
Selection.End(xlUp).Select  Selecc. la última celda del bloque hacia
arriba
Loop  Repetir bucle1
End Sub  Fin del procedimiento ResaltarCelda

7. Regresar al Excel: clic en el botón (Ver Microsoft Excel).


8. Borrar formato de celda C6
9. Ejecutar la macro: pulsar teclas Control (ctrl.) + Mayúscula () + R

 ASIGNANDO DATOS A CELDAS DESDE UNA MACRO:


La comunicación más crítica de una macro en Visual Basic con el Excel, es la
que debe darse entre los módulos del programa y las celdas de las hojas de
cálculo, por lo tanto, es fundamental conocer bien los métodos básicos para
establecer tal comunicación, entre los cuales tenemos:
1. Escribir en una celda desde una macro:
ActiveCell.FormulaR1C1 = Número, Rótulo (entre comillas), Fórmula
(entre comillas) o variable.
2. Notación de rangos como argumentos de funciones en una macro:
a) Referencia absoluta:
“=FUNCIÓN(R#filaC#columna:R#filaC#columna)"
b) Referencia relativa:
“=FUNCIÓN(R[#fila]C[#columna]:R[#fila]C[#columna])"

Ejercicio 4: Generar una macro que sin importar el número de Alumnos de la


lista, escriba debajo del último nombre de alumno el rótulo: Promedio:, y debajo
de la última nota (al lado derecho del rótulo anterior) una fórmula que calcule el
promedio de todas las notas de la lista.
1. Generar data según se indica:

14
2. Grabar con la grabadora de macros, las funciones de teclado y menú propios
del Excel, que se desean automatizar:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Grabar macro
b) Definir campos según se indica:

c) Clic en el botón Aceptar (se inicia la grabación)


d) Seleccionar celda A6 (ubicada debajo del último nombre de alumno)
e) Escribir el rótulo: Promedio:, darle entrada sin mover el puntero (Clic en
) y aplicarle formato de negritas (Ctrl + N)
f) Seleccionar celda B6
g) Clic en el botón Insertar función (ubicado en la barra de entrada)
h) Seleccionar una categoría: Estadísticas / Seleccionar una función:
Promedio
i) Clic en el botón Aceptar (ventana: Insertar función) para confirmar la
función seleccionada, y clic en botón Aceptar (ventana: Argumentos de
función) para confirmar el rango sugerido
j) En caso de ser necesario, ajuste el formato a 2 decimales fijos( )
k) Finalizar la grabación: clic en botón Detener grabación ( )
6. Editar la macro:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Ver Macros
b) Clic en el botón Modificar (previa selección del nombre de macro:
Promediar)

15
7. Añadir las instrucciones de control y los cambios requeridos, a la macro,
según se muestra:

TRADUCCIÓN DEL CÓDIGO


Sub Promediar()  Inicio del procedimiento Promediar
Range("B2").Select  Selección de una celda (B2) con referencia absoluta
Selection.End(xlDown).Select  Seleccionar la última celda del bloque,
en la dirección hacia abajo
ActiveCell.Offset(1, -1).Range("a1").Select  Selección relativa a la celda
activa: celda ubicada 1 fila
hacia abajo y 1 columna a la
izquierda
ActiveCell.FormulaR1C1 = "Promedio:"  Escribir en la celda activa el
rótulo: Promedio:
Selection.Font.Bold = True  Aplicar a la selección actual el formato de
fuente: Negritas
ActiveCell.Offset(0, 1).Range("a1").Select  Selección relativa a la celda
activa: celda ubicada 0 filas
hacia abajo y 1 columna a la
derecha
ActiveCell.FormulaR1C1 = "=AVERAGE(R2C2:R[-1]C)"  Escribir en la
celda activa la
fórmula:
promediar rango
desde B2 hasta
la celda ubicada
in-mediatamente
en-cima de la
celda activa

16
Selection.NumberFormat = "0.00"  Aplicar formato de 2 decimales fijos
a la selección actual
End Sub  Fin del procedimiento Promediar

8) Regresar al Excel: clic en el botón (Ver Microsoft Excel)


9) Borrar rango de celdas B6:C6
10) Escribir otras filas de datos (Alumno + nota), bajo los datos iniciales
11) Probar la macro: pulsar teclas Control (ctrl.) + Mayúscula () + P

MANEJO DE VARIABLES

 QUÉ SON LAS VARIABLES:


Son posiciones o lugares en la memoria del computador en donde los
programas pueden almacenar información dinámica, o sea, cuyo contenido
puede variar durante la ejecución de los mismos.
 DECLARACIÓN DE VARIABLES:
En Visual Basic es recomendable declarar las variables antes de usarlas, ya
que, esto nos permite controlar eficientemente los tipos de datos y su manejo
en la memoria del computador. La forma de declarar las variables es la
siguiente:
Dim I Public I Static nombre_variable As tipo
En donde:
Dim: Se utiliza cuando se desea que la variable sea local al ámbito en que se
declara. Puede ser dentro de un procedimiento o dentro de un formulario, de
esta forma no sería accesible desde los demás procedimientos o formularios.
Public: Se utiliza cuando se desea que la variable sea pública y pueda estar
accesible desde todos los formularios de la aplicación. Para conseguirlo
tendremos que declararlas en un módulo de código, no en la sección
declaraciones de cualquier formulario de los que conste la aplicación.
Static: Se utiliza cuando se desea que las variables locales no se creen ni se
destruyan al entrar y salir de los procedimientos donde fueron declaradas, sino
que mantengan su valor durante todo el periodo de ejecución de la aplicación.
De esta forma al entrar en algún procedimiento las variables recuerdan el valor
que tenían cuando se salió de él.
Tipos de variables (tipo):
1. Boolean: Solo admite 2 valores TRUE o FALSE
2. Byte: Admite valores entre O y 255
3. Integer: Admite valores entre -32.768 y 32.767
4. Long: Admite valores entre -2.147.483.648 y 2.147.483.647

17
5. Single: Admite valores decimales con precisión simple (4 bytes)
6. Double: Admite valores decimales con precisión doble (8 bytes)
7. Currency: Válido para valores de tipo moneda
8. String: Válido para cadena de caracteres
9. Date: Válido para datos tipo fecha (permite operar con ellas)
10. 0bject: direcciones de 32 bits (4 bytes) que hacen referencia a objetos
11. Variant: Tipo genérico, puede almacenar información numérica, de un string
o de fecha.
Es importante resaltar que no es imprescindible declarar todas las variables
que se usan en cualquier macro. Cuando creamos una palabra nueva y la
usamos como variable, Visual Basic la asume por defecto del tipo Variant. Lo
cual nos simplifica el trabajo y nos ofrece una gran flexibilidad en el manejo de
los datos, pero a costa de perder parte del control total sobre ellos, que
siempre es deseable.

Ejercicio 5: Generar una macro que desarrolle una tabla de conversiones, que
tome los “N” primeros valores enteros múltiplos de 5, en grados centígrados
(partiendo de O°C), y los traduzca a grados Fahrenheit (°F=9/5°C+32) o grados
Kelvin (°K=°C+273). La macro debe ordenar todos los datos en forma
columnar, según se muestra en la ilustración anexa; y adaptarse al valor de "N”
y el tipo de traducción, que indique el usuario en las celdas correspondientes.
1. Generar data según se indica (solo los datos en negritas):

2. Grabar con la grabadora de macros, las funciones de teclado y menú


propios del Excel, que se desean automatizar:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Grabar macro
b) Definir campos en caja de diálogo Grabar macro: Nombre de la macro:
Conversión / Método abreviado: Ctrl. + Mayúsc. + C
c) Clic en el botón Aceptar (se inicia la grabación)
d) Seleccionar celda D2 (número de valores de la tabla)

18
e) Seleccionar celda E1 (tipo de conversión: °Fahrenheit o °Kelvin)
f) Seleccionar celda D4 (título de grados a convertir en la tabla)
g) Finalizar la grabación: clic en botón Detener grabación ( )
3. Editar el macro:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Ver Macros
b) Clic en el botón Modificar (previa selección del nombre de macro:
Conversión)
4. Añadir las instrucciones de control al macro:

TRADUCCIÓN DEL CÓDIGO


Dim n, c As Integer  Declarar variables n y c como locales tipo
Entero_____
Sub Conversión()  Inicio del procedimiento Conversión
Range("D2").Select  Selección de una celda (D2) con referencia absoluta
n = ActiveCell.FormulaR1C1  Asignar a la variable n el contenido de la
celda activa
Range("E1").Select  Selección de una celda (E1) con referencia absoluta
tipo = UCase(ActiveCell.FormulaR1C1)  Asignar a la variable tipo el
contenido en mayúscula de la
celda activa
Range("D4").Select  Selección de una celda (D4) con referencia absoluta
ActiveCell.FormulaR1C1 = tipo + ":"  Escribir en la celda activa el
contenido de la variable tipo + el
carácter dos puntos (:)
For c = 1 To n  Para c igual a 1 hasta n Repetir
ActiveCell.Offset(1, -1).Range("A1").Select  Selección relativa a la celda
activa: ubicada 1 fila abajo

19
y una columna a la
izquierda
centigrado = (c - 1) * 5  Asignar a la variable centigrado el resultado de
la fórmula (c -1 ) * 5
ActiveCell.FormulaR1C1 = centigrado  Escribir en la celda activa el
contenido de la variable
centigrado
ActiveCell.HorizontalAlignment = xlCenter  Centrar horizontalmente el
contenido de la celda activa
ActiveCell.Offset(0, 1).Range("A1").Select  Selección relativa a la celda
activa: ubicada en la misma
fila y una columna a la
derecha
If tipo = "KELVIN" Then  Si el contenido de la variable tipo es igual a
KELVIN entonces
ActiveCell.FormulaR1C1 = centigrado + 273  Escribir en la celda activa
el resultado de sumar 273
al contenido de la variable
centigrado
Else  De lo contrario (si tipo no es igual a KELVIN)
ActiveCell.FormulaR1C1 = (centigrado * 9 / 5) + 32  Escribir en la celda
activa el resultado
de multiplicar por
9/5 el contenido de
la variable
centigrado y
sumarle 32

TRADUCCIÓN DEL CÓDIGO (CONTINUACIÓN)


End If  Fin del Si
ActiveCell.HorizontalAlignment = xlCenter  Centrar horizontalmente el
contenido de la celda activa
Next  Incrementar contador c y repetir bucle
End Sub  Fin del procedimiento Conversión

5. Regresar al Excel: clic en el botón (Ver Microsoft Excel)


6. Borrar celda D4 y todas las celdas con datos que correspondan a una lista
de conversión previa
7. Escribir en la celda D2 el número de datos que se requiere para la lista de
conversión, y en la celda E1 el tipo de conversión que se requiere (Kelvin o
Fahrenheit)
20
8. Ejecutar la macro: pulsar teclas Control (ctrl.) + Mayúscula () + C.

21
Sección
MANEJO DE OBJETOS
2
CONCEPTOS BÁSICOS
 PROGRAMACIÓN DE EVENTOS SOBRE OBJETOS:
El Visual Basic es un lenguaje orientado a la programación de eventos sobre
objetos. Esto significa que su filosofía principal en el desarrollo de programas,
se basa en la posibilidad de asignar código a los diferentes eventos que deban
manejarse o ejecutarse, sobre los objetos contemplados en el diseño de una
aplicación; de tal manera, que dichos códigos se ejecuten en el instante en que
el usuario del programa produzca los eventos sobre tales objetos.

 QUÉ ES UN EVENTO:
Un evento es una acción (hacer clic, arrastrar, pulsar una tecla, cargar una
ventana, etc.) que se realiza sobre un objeto y que provoca la ejecución del
procedimiento (código) asociado a ese suceso en particular.

 QUÉ ES UN OBJETO:
Un objeto es un elemento que desempeña una función y que es utilizado para
lograr un objetivo preestablecido; no importando, como fueron construidos ni
cómo funcionan, sino solamente el saber para qué se usan.

 TIPOS DE OBJETOS EN VBA:


En Visual Basic para Aplicaciones, tendremos que manejar dos tipos de
objetos: en primer lugar los objetos que normalmente maneja Visual Basic,
como son los controles, formularios, cajas de texto o menús; y adicionalmente
los objetos propios de la aplicación, en este caso los del Excel (Libros, Hojas
de cálculo, Rangos y Celdas). Pero a pesar de esta tipificación, hay que
resaltar que Visual Basic interactúa con el Excel trabajando con todos estos
objetos; y que en consecuencia, hay que conocerlos y manejarlos a todos.

 PROPIEDADES DE LOS OBJETOS:


La propiedad de un objeto es un atributo que define una de sus características,
tal como: tamaño, color, localización en la pantalla, o algún aspecto de su
comportamiento, por ejemplo si esta visible o activado. Para cambiar las
características de un objeto, se cambia el valor de sus propiedades (si no es de
solo lectura), siguiendo la siguiente sintaxis:
Objeto. Propiedad = Valor

 MÉTODOS DE LOS OBJETOS:


Son procedimientos asociados a los objetos, es decir, rutinas ya establecidas
que podemos invocar desde nuestras macros para que se realice alguna

22
operación sobre el objeto. Los métodos pueden requerir información adicional
en forma de argumento. Su sintaxis es la siguiente:
Objeto. Método Arg1, Arg2 ... ArgN
A veces, distinguir entre un método y una propiedad es una labor imprecisa.
Ya que hay métodos que pueden cambiar propiedades, por ejemplo: el método
ChartWizard puede cambiar algunas propiedades del gráfico; y hay
propiedades que pueden implicar acciones, por ejemplo: en el Excel la acción
de esconder una hoja de cálculo es establecer una propiedad (ya que la hoja
de cálculo todavía está y puede volver a cambiarse su estatus).
Afortunadamente, la mayoría de las veces no tendremos que preocuparnos de
estos deslindes; pues, el Excel cuenta con herramientas interactivas que nos
permiten encontrar los métodos y propiedades de los objetos, sin necesidad de
saber cuál es cuál.

MANEJAR COLECCIONES DE OBJETOS


 DEFINICIÓN:
Una colección de objetos es un conjunto ordenado de elementos relacionados,
a los que se les puede hacer referencia como una unidad. La posición de un
objeto en la colección puede cambiar, ya que las colecciones de objetos
admiten los métodos de añadir y eliminar elementos a su conjunto. Además,
siempre debemos considerar la posibilidad de que un objeto individual dentro
de una colección, constituya a su vez, otra colección de elementos más
pequeños.

 COLECCIONES DE LIBROS y HOJAS DE CÁLCULO:


Todos los libros de trabajo abiertos en un momento dado, constituyen la
colección de libros de trabajo del Excel; y cada uno de ellos, contienen a su
vez, una colección de hojas de cálculo, formadas por todas las hojas de cálculo
abiertas dentro de cada libro.
Las colecciones de objetos se manipulan como conjunto a través de
métodos o propiedades de gestión global, entre las cuales podemos resaltar
los siguientes ejemplos, que son típicas para los libros y hojas de cálculo:
1. WorkBooks.Add (método que añade un nuevo libro a la colección)
2. Sheets.Add (método que añade una nueva hoja a la colección del
libro de trabajo activo)
3. WorkBooks.Count (propiedad de solo lectura que cuenta cuántos libros
hay en la colección)
4. Sheets.Count (propiedad de solo lectura que cuenta cuántas hojas
hay en la colección del libro de trabajo activo)
5. WorkBooks.Close (método que permite cerrar todos los libros de la
colección)

23
Para hacer referencia a un elemento individual dentro de una colección, se
puede utilizar su posición, su nombre o su estatus. A continuación listaremos
los ejemplos más comunes de cada método:
1. Llamando a un libro o a una hoja de cálculo, individualmente, por su
posición o por su nombre (para ambos casos se usa el método Ítem; el cual
crea un enlace entre el elemento individual y la colección a la cual
pertenece, a través de un argumento simple, que puede ser la posición del
elemento o algún rótulo que lo identifique):
a) WorkBooks.Item(#).Close (Cerrar el libro que está en la posición #)
b) Sheets.ltem(#).Delete (Borrar la hoja de cálculo que está en la
posición # del libro de trabajo activo)
c) WorkBooks.ltem("LibroX”).Activate (Activar el libro de nombre LibroX)
d) Sheets.ltem("HojaX”).Select (Seleccionar la hoja de nombre
HojaX del libro de trabajo activo)
2. Llamando a un libro o a una hoja de cálculo, individualmente, por su estado
o estatus (para este caso se usa básicamente el prefijo Active):
a) ActiveWorkBook.Close (Cerrar el libro de trabajo activo)
b) ActiveWorkBook.Saved = False (Asignar a la propiedad Saved del libro
de trabajo activo, el valor False)
c) ActiveSheet.Paste (Pegar los datos previamente copiados
en la hoja activa del libro de trabajo
activo)
d) ActiveSheet.Name = "HojaX" (Asignar a la propiedad Name de la
hoja activa del libro de trabajo activo, el
valor HojaX)

Ejercicio 6: Generar una macro que añada una hoja al final de la colección de
hojas de cálculo del libro activo, y genere en ella un encabezado genérico a
partir de la celda A1; luego se regrese a la hoja inmediata anterior, la cual
contiene los datos de las facturas en trámite del último mes, corte de ella las
filas correspondientes a las facturas no canceladas y simultáneamente las valla
pegando a la nueva hoja, en un proceso iterativo que culmine cuando se revise
la última factura de la lista.
1. Generar los datos que se indican, en la Hoja3:

24
2. Grabar con la grabadora de macros, las funciones de teclado y menú
propios del Excel, que se desean automatizar:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Grabar macro
Definir campos según se indica:

b) Clic en Aceptar (se inicia la grabación)


c) Clic en la Tarjeta: Inicio I Sección: Celdas / Menú Insertar / Opción
Insertar hoja
d) Arrastrar la Etiqueta de la hoja de cálculo insertada a la última posición
e) Seleccionar la Hoja de cálculo # 3: clic en la etiqueta Hoja3
f) Seleccionar las 3 primeras filas de la hoja de cálculo (Hoja3)
g) Clic en el botón Copiar : Tarjeta: Inicio I Sección: Portapapeles
h) Seleccionar la Hoja de cálculo # 4: clic en la etiqueta Hoja4
i) Clic en la celda A1

25
j) Pulsar la tecla Enter
k) Arrastrar desde el punto caliente de la celda C2 hasta la celda D2
l) Cortar el contenido de la celda D2 y pegarlo en la celda C2
m)Seleccionar la Hoja de cálculo # 3: clic en la etiqueta Hoja3
n) Seleccionar la fila correspondiente a la primera factura no cancelada
o) Clic en el botón Copiar : Tarjeta: Inicio I Sección: Portapapeles
p) Seleccionar la Hoja de cálculo # 4: clic en la etiqueta Hoja4
q) Clic en la celda A4
r) Pulsar la tecla Enter
s) Seleccionar la Hoja de cálculo # 3: clic en la etiqueta Hoja3
t) Clic en la Tarjeta: Inicio I Sección: Celdas / Opción Eliminar
u) Finalizar la grabación: clic en botón Detener grabación ( )
3. Editar el macro:
a) Clic en la Tarjeta: Programador I Sección: Código / Opción Macros
b) Clic en el botón Modificar (previa selección del nombre de la macro:
Hoja_Facturas)
4. Añadir las instrucciones de control y modificar las instrucciones necesarias
para cumplir con los requerimientos del ejercicio:

TRADUCCIÓN DEL CÓDIGO

26
Sub Hoja_Facturas()  Inicio del procedimiento Hoja_Facturas
n = Sheets.Count  Hacer a la variable n igual al número de hojas de
hojas de cálculo que existen en el libro de trabajo
activo.
Sheets.Add After:=Sheets(n)  Añadir una nueva hoja de cálculo al libro
de trabajo activo, después de la última
hoja existente.
Sheets.Item(n).Select  Seleccionar la hoja de cálculo ubicada en la
penúltima posición.
Rows("1:3").Select  Seleccionar las 3 primeras filas de la hoja de cálculo
activa.
Selection.Copy  Copiar la selección.
Sheets.Item(n + 1).Select  Seleccionar la hoja de cálculo ubicada en la
última posición.
TRADUCCIÓN DEL CÓDIGO (CONTINUACIÓN)
ActiveSheet.Paste  Pegar en la hoja activa la selección copiada
Application.CutCopyMode = False  Desactivar la selección copiada
Range("C2").Select  Seleccionar la celda C2 de la hoja de cálculo activa
Selection.AutoFill Destination:=Range("C2:D2"),
Type:=xlFillDefault  Extender una posición a la derecha la serie C2
(Meses)
Range("C2:D2").Select  Seleccionar rango C2:D2
Range("D2").Select  Seleccionar celda D2
Selection.Cut  Cortar el contenido de la selección (celda D2)
Range("C2").Select  Seleccionar celda C2
ActiveSheet.Paste  Pegar la selección cortada en la celda activa (C2) de
la hoja activa
Range("a4").Select  Seleccionar celda A4 de la hoja de cálculo activa
Sheets.Item(n).Select  Seleccionar la hoja de cálculo ubicada en la
penúltima posición
Range("a4").Select  Seleccionar celda A4 de la hoja de cálculo activa
Do Until ActiveCell = ""  Hacer hasta que la celda activa esté vacía
ActiveCell.Offset(0, 4).Range("a1").Select  Seleccionar la celda ubicada
en la misma fila y 4
columnas a la derecha de la
celda activa
If ActiveCell = "" Then  Si la ceda activa está vacía entonces hacer

27
ActiveCell.EntireRow.Select  Seleccionar la fila completa de la celda
activa
Selection.Copy  Copiar el contenido de la selección
Sheets.Item(n + 1).Select  Seleccionar la hoja de cálculo ubicada en la
última posición
ActiveSheet.Paste  Pegar en la celda activa de la hoja de cálculo activa el
contenido de la selección copiada
Application.CutCopyMode = False  Desactivar la selección copiada
ActiveCell.Offset(1, 0).Range("a1").Select  Seleccionar la celda ubicada
una celda debajo de la celda
activa
Sheets.Item(n).Select  Seleccionar la hoja de cálculo ubicada en la
penúltima posición
Selection.Delete Shift:=xlUp  Eliminar la selección (fila) y mover los
datos en las celdas subsiguientes hacia
arriba
ActiveCell.Offset(-1, 4).Range("a1").Select  Seleccionar la celda ubicada
1 fila hacia arriba y 4
columnas a la derecha de la
celda activa
TRADUCCIÓN DEL CÓDIGO (CONTINUACIÓN)
End If  Fin del bloque Si
ActiveCell.Offset(1, -4).Range("a1").Select  Seleccionar la celda ubicada
1 fila hacia abajo y 4
columnas a la izquierda de
la celda activa
Loop  Repetir bucle HACER HASTA
Sheets.Item(n + 1).Select  Seleccionar la hoja de cálculo ubicada en la
última posición
End Sub  Fin del procedimiento Hoja_Facturas

5. Regresar al Excel: clic en el botón (Ver Microsoft Excel)


6. Ejecutar la macro: pulsar teclas Control (ctrl.) + Mayúscula () + H.

EXPLORANDO OBJETOS RANGO


 DEFINICIÓN:
Los objetos Rango son aquellos representados por: una celda, una fila, una
columna, una selección de celdas que contienen uno o más bloques contiguos

28
de celdas o un rango 3D. Estos objetos son probablemente la clase de objetos
más importante en Excel. Los valores se introducen en rangos, las fórmulas
también. Los informes son rangos formateados. Los gráficos se construyen a
partir de los números incluidos en rangos. Los dibujos se colocan encima de
los rangos. Las tablas dinámicas se manipulan sobre rangos. De tal manera
que, el trabajo básico en Excel se circunscribe al manejo de objetos Rango. Lo
cual justifica las múltiples propiedades y facilidades que nos ofrece el Excel,
para trabajar con ellos.

 PROPIEDAD RANGE:
La propiedad Range es, consecuencialmente, la principal propiedad que
devuelve un objeto rango en el Excel. Puede definirse de dos formas: a través
de dos argumentos correspondientes a sus límites, o con un único argumento
formado por algo que el Excel pueda interpretar como la dirección de un rango.
Como se muestra en los siguientes ejemplos:
1. Range(“A1", "B2").Select (Excel selecciona el rango desde A1 hasta B2)
2. Range(ActiveCell, "C4”).Select (Excel selecciona el rango desde la celda
activa hasta C4)
3. Range(“D5:E6").Select (Excel selecciona el rango desde D5 hasta E6)
4. Range(“F7:G8").Name = “R_Prueba" (Asignar el nombre R_Prueba al
rango F7:G8)
5. Range(“R_Prueba").Select (Excel selecciona el rango R_Prueba  F7:G8)
6. Range(“H9").Select (Excel selecciona la celda H9)
7. ActiveCell.Range(“B3").Select (Selecciona la celda ubicada 1 columna a
la derecha. y 2 filas debajo de la celda
activa)
8. Range(“R_Prueba").Range(“A1").Select (Excel selecciona la celda F7, la
primera del rango “R_Prueba”)

 RANGOS COMO COLECCIONES DE OBJETOS:


Al igual que al conjunto de colecciones que ya hemos visto. También a un
objeto rango se le puede manipular como a un conjunto de celdas, o sea,
considerársele como un objeto colección de celdas. No obstante, este último
tipo de conjunto es un tanto más complejo que una colección de hojas de
cálculo, ya que las celdas poseen dos dimensiones (filas y columnas) mientras
que las hojas de cálculo solo una. Siempre será posible interpretar un rango de
celdas, no solo como un conjunto finito de celdas, sino también como un
conjunto de filas o de columnas. De la afirmación anterior, se derivan las tres
propiedades con que cuenta el Excel, para manejar un rango como una
colección de objetos. Estas propiedades son:
1. Propiedad Cells: devuelve un conjunto de celdas, las cuales pueden
referirse como grupo o individualmente. Ejemplo:

29
a) Range("A1:E4").Cells.Count (Excel cuenta el número de celdas dentro
del rango A1:E4)
b) Cells(1,4).Select (Excel selecciona la celda D1, celda
ubicada en la primera fila y cuarta columna
de la hoja de cálculo)
2. Propiedad Rows: devuelve un conjunto de filas con las mismas cualidades
de referencia que la propiedad anterior. Ejemplo:
a) A = Rows.Count (Excel asigna a la variable A el número
total de filas que contiene la hoja de
cálculo)
")
b) Range("A1:E4 .Rows(2).Select (Excel selecciona la segunda fila del
rango, desde A2 hasta E2)
3.Propiedad Columns: devuelve un conjunto de columnas, que a pesar de lo que
pudiéramos pensar, constituye un objeto de la misma clase (objeto rango) que el
de las dos anteriores. Ejemplo:
a) Columns(2).Select (Excel selecciona toda la columna B)
b) Colums(Columns.Count).Select (Excel selecciona la última columna de
la Hoja de cálculo, la columna IV)

 RANGOS DERIVADOS O CALCULADOS:


Todas las propiedades y métodos que hemos estudiado hasta ahora,
pertenecientes al objeto Application, trabajan con toda la hoja de cálculo
usando como punto de referencia inicial la celda A1. Sin embargo, en los casos
en que aplicamos la propiedad Range pudimos seleccionar un rango relativo a
otro rango más pequeño, dentro de la hoja de cálculo. Adicionalmente a éste,
el Excel tiene otras propiedades que le permiten calcular, con total exactitud,
un nuevo rango a partir de uno existente. Estas propiedades son:
1. Propiedad Offset: Devuelve un objeto Range que representa un rango
desplazado (número de filas arriba o abajo, número de columnas a la izquierda
o a la derecha) con respecto al rango especificado. Ejemplo:
a) Range("C3:E6”).Offset(1,0).Select (Excel selecciona el rango C4:E7,
desplazando el rango Range una fila
hacia abajo).
2. Propiedad Resize: Cambia el tamaño del rango especificado. Devuelve
un objeto Range que representa el rango redimensionado (nuevo
número e filas, nuevo número de columnas). Ejemplo:
a) Range("C3:E6”)Resize(,4). Select (Excel selecciona el rango C3:F6,
una columna más ancha que el
rango Range)
3. Propiedades EntireColumn y EntireRow: Devuelven un objeto Range que
representa todas las columnas (EntireColumn) o todas las filas (EntireRow) que
contiene el rango especificado. Ejemplos:

30
a) Range("C3:E6").EntireColumn.Select (Excel selecciona el rango de
columnas C:E)
b) Range("C3:E6”)EntireRow.Select (Excel selecciona el rango de
filas 3:6)

Ejercicio 7: Generar una macro que explore la hoja de cálculo asociada, para
determinar el rango de datos numéricos, correspondientes a los resultados de
las pruebas de Bowling (lista de tamaño variable), y le asigne un nombre; para
finalmente hacer una revisión exhaustiva de todas las celdas de dicho rango, y
resaltar los valores por debajo del promedio en color rojo (formato fuente).
1. Generar los datos según se indica:

2. Grabar con la grabadora de macros, las funciones de teclado y menú


propios del Excel, que se desean automatizar:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Grabar macro
b) Definir campos según se indica:

31
c) Clic en Aceptar (se inicia la grabación)
d) Seleccionar la celda A5 (clic sobre la celda)
e) Pulsar las teclas Fin +  (flecha del cursor hacia a la derecha)
f) Pulsar las teclas Fin +  (flecha del cursor hacia abajo)
g) Clic en la Tarjeta: Inicio I Sección: Celdas / Menú Formato I Opción
Formato de celdas... I Tarjeta: Fuente I Color: Rojo y hacer clic en
Aceptar
h) Finalizar la grabación: clic en botón Detener grabación ( )
3.Editar el macro:
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Ver Macros
b) Clic en el botón Modificar (previa selección de macro:
RangoResultados)
c) Añadir las instrucciones de control y modificar las instrucciones
necesarias para cumplir con los requerimientos del ejercicio:

TRADUCCIÓN DEL CÓDIGO


Sub RangoResultados()  Inicio del procedimiento RangoResultados
Range("A5").Select  Seleccionar la celda A5 (Referencia Absoluta)
TRADUCCIÓN DEL CÓDIGO (CONTINUACIÓN)
Selection.End(xlToRight).Select  Seleccionar la última celda con datos
en dirección hacia la derecha
Selection.End(xlDown).Select  Seleccionar la última celda con datos en
dirección hacia abajo
cf = ActiveCell.Address  Asignar a la variable cf la dirección de la celda
activa (celda final del rango de datos
numéricos)
Range("B5").Select  Seleccionar la celda B5 (Referencia Absoluta)

32
ci = ActiveCell.Address  Asignar a la variable ci la dirección de la celda
activa (celda inicial del rango de datos
numéricos)
Range(ci, cf).Name = "Datos"  Asignar el nombre de Datos al rango
ci:cf
For n = 1 To Range("Datos").Cells.Count  Para n = 1 hasta el valor
correspondiente al número
de celdas del rango Datos
Sum = Sum + Range("Datos").Cells(n).Value  Acumular en la variable
Sum el valor de las
celdas del rango Datos
Next  Incrementar el contador n y repetir el bucle Para
Prom = Sum / Range("Datos").Cells.Count  Asignar a la variable Prom
el valor de la variable Sum
dividido entre el número de
celdas del rango Datos
(promedio del rango Datos)
For c = 1 To Range("Datos").Cells.Count  Para c = 1 hasta el valor
correspondiente al número
de celdas del rango Datos
Range("Datos").Cells(c).Select  Seleccionar la celda número c del
rango Datos
If ActiveCell.Value < Prom Then  Si el valor de la celda activa es menor
que el valor de la variable Prom
Entonces Hacer:
Selection.Font.ColorIndex = 3  Asignar al color de la fuente de la
selección el valor 3 (Rojo)
Else  De lo contrario Hacer:
Selection.Font.ColorIndex = 1  Asignar al color de la fuente de la
selección el valor 1 (Negro)

TRADUCCIÓN DEL CÓDIGO (CONTINUACIÓN)


End If  Fin del Si
Next  Incrementar el contador c y repetir el bucle Para
End Sub  Fin del procedimiento RangoResultados

4. Regresar al Excel: clic en el botón (Ver Microsoft Excel)


5. Agregar otros registros a la lista de resultados (pruebas de clasificación)
6. Ejecutar la macro: pulsar teclas Control (ctrl.) + Mayúscula () + R.

33
ASISTENCIA EN LA EXPLORACIÓN DE OBJETOS
 DEFINICIÓN:
Como hemos podido notar en los distintos ejemplos y ejercicios, que hemos
revisado en esta sección. Existe un abundante número de objetos en el Excel,
que junto a la gran variedad de propiedades y métodos que combinan,
constituyen un conjunto de herramientas enorme; que naturalmente no
podemos abarcar eficientemente, solo con el uso de nuestra memoria, ni con
asistentes rígidos como manuales o textos. Afortunadamente el Visual Basic
para aplicaciones, cuenta con varios asistentes automáticos, que gracias a su
alto diseño gráfico, nos permiten un manejo flexible de todos esos elementos.
Entre estos asistentes podemos resaltar, como imprescindibles, los siguientes:
La ayuda del Excel Visual Basic, las Listas Automáticas y el Examinador
de Objetos.

 USO DE LA AYUDA DEL EXCEL VISUAL BASIC:


La ayuda del Excel Visual Basic contiene una amplia información sobre los
objetos del Excel, sus propiedades y métodos; organizado todo en forma
diagramática, lo que resulta de gran utilidad para aprender el esquema general
de dichos objetos, y acceder rápidamente a sus detalles.

Ejercicio 8: Usando la ayuda del Excel Visual Basic, ubique las propiedades
del objeto Names (Conjunto de todos los objetos Name del libro o la
aplicación):
1. Pulsar la tecla F1 desde el editor de Visual Basic del Excel, y tipear dentro
de la caja de búsqueda el nombre del objeto a consultar (names):

2. Hacer Clic sobre el botón Buscar ( ), para acceder a la información


referida:

34
3. Hacer Clic en el resultado de búsqueda: Names(objeto), y bajar hasta el
final de la ventana de ayuda:

4. Hacer Clic en la opción: Miembros del objeto Names, de la sección Vea


también, y desplace el deslizador vertical hasta ubicar las propiedades de
Names:

 USO DE LAS LISTAS AUTOMÁTICAS:


Las listas automáticas son facilidades gráficas, que nos ofrece el Visual Basic,
para permitirnos editar código dentro de un módulo con la mayor eficiencia y
seguridad posible. Se activan automáticamente al ejecutar algunas de las
siguientes acciones:
1. Pulsar CTRL + ESPACIADOR: para abrir la lista automática de objetos y
colección de objetos locales, al inicio de una línea de código.
2. Tipear un punto después del nombre de una colección u objeto válido: para
mostrar la lista automática de métodos y propiedades que aplican a la
colección u objeto que precede al punto.
3. Tipear un espacio en blanco después de un método con argumentos
opcionales: para mostrar un cuadro de información con la sintaxis y formato
de los argumentos opcionales que aplican al método precedente.

35
4. Tipear el signo de igualdad (=) después de una propiedad con un número
limitado de valores: para mostrar una lista enumerada de valores que aplica
a la propiedad precedente.

Ejercicio 9: Genere las dos siguientes líneas de código, con la ayuda de las
lista
automáticas: ActiveWindow. WindowState = xlMinimized
Windows.Arrange xlArrangeStyleCascade
1. Pulsar CTRL. + ESPACIADOR, y luego haga clic sobre el objeto
ActiveWindow:

2. Pulsar la tecla TAB para insertar el objeto en la línea de código.


3. Tipear un punto (.), y luego la letra W para ubicar la propiedad
WindowState:

4. Hacer doble clic sobre la propiedad referida para insertarla en la línea de


código.
5. Tipear el signo de igualdad (=) para abrir la lista enumerada de la propiedad
WindowState.

6. Hacer doble clic en la opción xlMinimized para insertarla en la línea de


código, y luego pulsar la tecla Enter () para generar una nueva línea.

36
7. Repetir los pasos del 1 al 4 para generar con las listas automáticas la
instrucción Windows.Arrange, y luego tipear un espacio en blanco.

8. Pulsar la tecla ESC, para despejar la lista enumerada, y hacer doble clic
sobre la opción xlArrangeStyleCascade, para culminar la instrucción:

 USO DEL EXAMINADOR DE OBJETOS:


El Examinador de objetos constituye la herramienta más potente con la que
cuenta el Excel-VBA para explorar y estudiar objetos; nos permite examinar
todos los objetos disponibles en el proyecto (macro de Excel) y ver sus
propiedades, métodos y eventos. Además, permite ver los procedimientos y
constantes que están disponibles en las bibliotecas de objetos del proyecto.
Puede mostrar fácilmente Ayuda en pantalla cuando se examina el proyecto.
Puede utilizar el Examinador de objetos para encontrar y utilizar objetos que ha
creado y también objetos de otras aplicaciones.

Ejercicio 10: A través del Examinador de objetos del Excel Acceda a los
argumentos opcionales del método Copy del objeto Range.
1. Active un módulo.
2. En el menú Ver, elija Examinador de objetos (F2), o haga Clic en el botón
Examinador de Objetos ( ) en la barra de herramientas del Microsoft
Visual Basic
3. Seleccione en la lista Proyecto/Biblioteca la opción: Excel:

37
4. Seleccione de la lista Clases, la opción Range (hacer clic dentro de la lista
y pulsar la tecla R hasta ubicar el objeto requerido).

5. Seleccione de la lista Miembros de’Range’, la opción Copy (ubique el


cursor dentro de la lista, y pulse la tecla C hasta ubicar el método requerido).

38
6. Vea información acerca de la clase o miembro que seleccionó en la sección
Detalles (parte inferior de la ventana). Para este ejemplo podremos leer el
argumento Destination, el cual se identifica como opcional, ya que en la
sintaxis se muestra dentro de corchetes.
7. Utilice el botón Ayuda ( ) para mostrar el tema de Ayuda para la clase o
el miembro que seleccionó.

39
Sección
MACROS INTERACTIVAS
3

CONCEPTOS BÁSICOS

 QUÉ ES UNA MACRO INTERACTIVA:


Son aquellas Macros que requieren datos del usuario, para luego usarlos en la
ejecución y toma de decisiones del programa.

 QUÉ ES UNA CAJA DE DIÁLOGO:


Las cajas de diálogo son elementos gráficos de las aplicaciones Windows,
constituidas por ventanas rectangulares, a través de las cuales se implementa
la comunicación entre el usuario y la aplicación. La caja de diálogo requiere
datos al usuario y/o le muestra información del programa.

 QUÉ ES UN FORMULARIO PERSONALIZADO:


Los formularios Personalizados son los elementos básicos de desarrollo de
una aplicación en Visual Basic, y forman la parte visual de la aplicación
(interfaz) con la que va interactuar el usuario. Un formulario es una ventana
que se programa por medio de controles y estos controles responden a
sucesos (eventos) que nosotros programamos, personalizándolos de acuerdo
al proceso que deseamos desarrollar.

 QUÉ SON LOS CONTROLES:


Los controles son objetos (cuadros de texto, botones de comando, barra de
desplazamiento, etc.) que se colocan en el formulario y cuya misión es mostrar
información, recibir datos del usuario, desencadenar la ejecución del código
ligado a ese control, etcétera. Todo lo cual nos permite desarrollar y controlar
nuestras aplicaciones.

CAJAS DE DIÁLOGO PREDISEÑADAS


 INPUTBox:
Muestra un mensaje en una caja de diálogo, espera que el usuario escriba un
texto o haga elle en un botón y devuelve un tipo String con el contenido del
cuadro de texto, el cual puede capturarse en una variable para luego aplicarlo
a la ejecución del macro.
Sintaxis:
InputBox(prompt[, title][, defaultj[, xpos][, ypos][, helpfile, context])
En donde:
Prompt: Requerido. Cadena de caracteres (String) que se muestra como
mensaje en la caja de diálogo. La longitud máxima de prompt es de

40
aproximadamente 1024 caracteres, según el ancho de los
caracteres utilizados. Si prompt consta de más de una línea, puede
separarlos utilizando un carácter de retorno de carro (Chr(13)), un
carácter de avance de línea (Chr(10)) o una combinación de los
caracteres de retorno de carro-avance de línea (Chr(13) y Chr(10))
entre cada línea y la siguiente.
Title: Opcional. Cadena de caracteres que se muestra en la barra de
título del cuadro de diálogo. Si omite title, en la barra de título se
coloca el nombre de la aplicación.
Default: Opcional. Cadena de caracteres que se muestra en el cuadro de
texto como respuesta predeterminada cuando no se suministra una
cadena. Si omite default, se muestra el cuadro de texto vacío.
Xpos: Opcional. Expresión numérica que especifica, en twips, la distancia
en sentido horizontal entre el borde izquierdo del cuadro de diálogo
y el borde izquierdo de la pantalla. Si se omite xpos, el cuadro de
diálogo se centra horizontalmente.
Ypos: Opcional. Expresión numérica que especifica, en twips, la distancia
en sentido vertical entre el borde superior del cuadro de diálogo y el
borde superior de la pantalla. Si se omite ypos, el cuadro de diálogo
se coloca a aproximadamente un tercio de la altura de la pantalla,
desde el borde superior de la misma.
Helpfile: Opcional. Cadena de caracteres que identifica el archivo de Ayuda
que se utilizará para proporcionar ayuda interactiva para el cuadro
de diálogo. Si se especifica helpfile, también deberá especificarse
context.
Context: Opcional. Expresión numérica que es el número de contexto de
Ayuda asignado por el autor al tema de Ayuda correspondiente. Si
se especifica context, también deberá especificarse helpfile.

Ejercicio 11: Para el Ejercicio # 3, editar la macro y agregar las instrucciones


necesarias para que el usuario seleccione el color con que se resaltarán las
celdas, a través de una caja InputBox.
1. Editar la macro y agregarle las instrucciones de control:

41
TRADUCCIÓN DEL CÓDIGO (MODIFICACIONES EN NEGRITAS)
Sub ResaltarCelda()  Inicio del procedimiento ResaltarCelda
Range("C6").Select  Selección de una celda (C6) con referencia absoluta
Micolor = InputBox("Resaltar Celda con
Color: Amarillo(6), Azul(5) O Rojo(3)")  Asignar a la variable Micolor el
valor que devuelve la caja de
diálogo InputBox (6, 5 ó 3).
Do Until ActiveCell = “”  Hacer hasta que la Celda Activa esté vacía (bucle1)
Do Until ActiveCell = “”  Hacer hasta que la Celda Activa esté vacía (bucle2)
If ActiveCell > 50000 Then  Si la Celda Activa es mayor que 50000 entonces
With Selection.Interior  Con el interior de la selección actual Aplicar
.Colorlndex = Micolor  Índice de color igual al valor almacenado en la
variable Micolor
.Pattern = xlSolid  Patrón del relleno Sólido
End With  Fin del bloque Con
End If  Fin del bloque Si
ActiveCeII.Offset(1, 0).Range("a1").Select  Selección relativa a la celda activa:
celda ubicada 1 fila hacia abajo y o
columnas a la derecha
Loop  Repetir bucle2
ActiveCeII.Offset(-1, 1).Range("a1").Select  Selección relativa a la celda activa:
celda ubicada 1 fila hacia arriba y 1
columna a la derecha
Selection.End(xIUp).Select  Seleccionar la última celda con datos del bloque, en
la dirección hacia arriba.
Loop  Repetir bucle 1.
End Sub  Fin del procedimiento ResaltarCelda.

2. Regresar al Excel: clic en el botón: Ver Microsoft Excel (Alt + F11)


3. Ejecutar la macro: pulsar teclas Control + Mayúscula + R
4. Tipear el número correspondiente al color que se desea usar para resaltar
las celdas.

42
5. Pulsar la tecla Enter o hacer clic en el botón Aceptar para ver los
resultados.
6. Repetir los pasos: 3, 4 y 5 para probar otro color.
 MSGBOX:
Muestra un mensaje en una caja de diálogo, espera a que el usuario haga clic
en un botón y devuelve un tipo Integer correspondiente al botón elegido por el
usuario.
Sintaxis:
MsgBox(prompt[, buttons][, title][, helpfile, context])
En donde:
Prompt: Requerido. Cadena de caracteres (String) que representa el prompt
en la caja de diálogo. La longitud máxima del prompt es de
aproximadamente 1024 caracteres, según el ancho de los
caracteres utilizados. Si el prompt consta de más de una línea,
puede separarlos utilizando un carácter de retorno de carro
(Chr(13)) o un carácter de avance de línea (Chr(10)), o una
combinación de caracteres de retorno de carro - avance de línea
(Chr(13) y Chr(10)) entre cada línea y la siguiente.
Buttons: Opcional. Expresión numérica que corresponde a la suma de los
valores que especifican el número y el tipo de los botones que se
pretenden mostrar, el estilo de icono que se va a utilizar, la
identidad del botón predeterminado y la modalidad del cuadro de
mensajes. Si se omite este argumento, el valor predeterminado para
buttons es 0.
Title: Opcional. Cadena de caracteres que se muestra en la barra de
título de la caja de diálogo. Si se omite title, en la barra de título se
coloca el nombre de la aplicación.
Helpfile: Opcional. Cadena de caracteres que identifica el archivo de Ayuda
que se utiliza para proporcionar ayuda interactiva en la caja de
diálogo. Si se especifica helpfile, también se debe especificar
contexto
Context: Opcional. Expresión numérica que es igual al número de contexto
de Ayuda asignado por el autor al tema de Ayuda correspondiente.
Si se especifica context, también se debe especificar helpfile.

Ejercicio 12: Para el Ejercicio # 11, editar la macro y agregar las


instrucciones necesarias, para validar los datos que se ingresen en la caja
InputBox; y en el caso de que se ingrese un valor no válido, la macro use una
caja MsgBox para advertir al usuario del error.
1. Editar la macro y agregarle las instrucciones de control:

43
TRADUCCIÓN DEL CÓDIGO (MODIFICACIONES EN NEGRITAS)
Sub ResaltarCelda()  Inicio del procedimiento ResaltarCelda
Repetir = True  Asignar a la variable Repetir el valor True
Range("C6").Select  Selección de una celda
(C6) con referencia absoluta
Do Until Repetir = False  Hacer hasta que la Variable Repetir sea igual a
False (bucle O)
MICOLOR = InputBox("Resaltar Celda
con Color: Amarillo(6), Azul(5) O Rojo(3)")  Asignar a la variable MICOLOR el valor
que devuelve la caja de diálogo
InputBox (6, 5 ó 3)
IF MICOLOR Like "[6, 5, 3]" Then  Si la variable MICOLOR vale 6, 5 ó 3
Entonces hacer:
Repetir = False  Asignar a la variable Repetir el valor False
Else  De lo contrario Hacer:
MsgBox ("Recuerde, solo puede
tipear los números: 6, 5 ó 3")  Mostrar en una caja MsgBox el mensaje
entre comillas
End If  Fin del bloque Si
Loop  Repetir bucle 0
Do Until ActiveCell = “”  Hacer hasta que la Celda Activa esté vacía (bucle1)
Do Until ActiveCell = “”  Hacer hasta que la Celda Activa esté vacía (bucle2)
If ActiveCell > 50000 Then  Si la Celda Activa es mayor que 50000 entonces
With Selection.lnterior  Con el interior de la selección actual Aplicar
.Colorlndex = MICOLOR  índice de color igual al valor almacenado en la variable
MICOLOR
.Pattern = xlSolid  Patrón del relleno Sólido
End With  Fin del bloque Con
End If  Fin del bloque Si

44
TRADUCCIÓN DEL CÓDIGO (CONTINUACIÓN)
ActiveCeII.Offset(1, Q).Range("a1").Select  Selección relativa a la celda activa:
celda ubicada 1 fila hacia abajo y 0
columnas a la derecha
Loop  Repetir bucle2
ActiveCeII.Offset(-1, 1).Range("a1").Select  Selección relativa a la celda activa:
celda ubicada 1 fila hacia arriba y 1
columna a la derecha
Selection.End(xIUp).Select  Seleccionar la última celda con datos del bloque,
en la dirección hacia arriba
Loop  Repetir bucle 1
End Sub  Fin del procedimiento ResaltarCelda

2. Regresar al Excel: clic en el botón: Ver Microsoft Excel (Alt + F11)


3. Ejecutar la macro: pulsar teclas Control + Mayúscula + R
4. Tipear un dato diferente a los valores válidos (por ejemplo el número 9),
para forzar el caso negativo.

5. Pulsar la tecla Enter o hacer clic en el botón Aceptar para avanzar al


siguiente paso. Deberá aparecer el siguiente mensaje:

6. Hacer clic en Aceptar, para cerrar el mensaje.


7. Cuando se repita el InputBox indicar un dato válido: 6, 5 ó 3, para forzar el
caso positivo.

45
8. Pulsar la tecla Enter o hacer clic en el botón Aceptar para terminar de
ejecutar el resto de la macro.

Ejercicio 13: Para el Ejercicio # 5, editar la macro y agregar las instrucciones


necesarias, para que la macro solicite al usuario el Tipo de Conversión y el
número de datos de la lista (obvie la validación); además incluya un bucle que
permita repetir el programa todas las veces que el usuario lo quiera (hasta que
defina una Lista Definitiva), implementando la pregunta a través de una caja
MsgBox con botones Si / No.
1. Modificar la hoja de cálculo asociada (Hoja1 del libro Tabla de Conversión)
a) Tipear en la celda E1 la fórmula: =D4
b) Tipear en la celda C4 el rótulo: ºC

46
TRADUCCIÓN DEL CÓDIGO (MODIFICACIONES EN NEGRITAS)
Dim n, c As Integer  Declarar variables n y c como locales tipo Entero
Sub Conversión ()  Inicio del procedimiento Conversión
Do  Hacer (Bucle hacer Hasta)
n = Val(InputBox("indique el nú-
mero de datos que tendrá la lista:"))  Asignar a la variable "n" el valor
introducido por el usuario en el InputBox
Range("D2").Select  Selección de una celda (D2) con referencia absoluta
ActiveCell.FormulaR1C1 = n  Escribir en la celda activa el valor de la
variable "n"
tipo = UCase(InputBox("lndique el tipo de
conversión °Kelvin(K) o °Fahrenheit(F):"))  Asignar a la variable "tipo" el
contenido en mayúscula del valor
introducido por el usuario en el
lnputBox
Range("D4").Select  Selección de una celda (D4) con referencia absoluta
ActiveCell.FormulaR1C1 = “0” & tipo  Escribir en la celda activa el caracter
"0" más el contenido de la variable
tipo
Range("C5").Select  Selección de una celda (C5) con referencia absoluta
If ActiveCell <> “” Then  Si la celda activa no está vacía Entonces Hacer:
ActiveCell. Offset(0, 1).Range(“a1").Select  Seleccionar la celda ubicada 1
columna a la derecha de la celda
activa
Selection.End(xldown).Select  Seleccionar la última celda del bloque de datos
actual en la dirección hacia abajo
Range(“c5", ActiveCell).Clear  Borra el contenido del rango que va desde la
celda "C5" hasta la celda activa (último dato de
la lista)
End If  Fin del Si
Range(“d4").Select  Selección de una celda (D4) con referencia absoluta
For c = 1 To n  Para c igual 1 hasta n
ActiveCeII.Offset(1, -1).Range("a1").Select  Selección relativa a la celda activa:
celda ubicada 1 fila hacia abajo y 1
columna a la izquierda
centígrado = (c - 1) * 5  Asignar a la variable centígrado el contenido de la celda
activa
ActiveCell.FormulaR1C1 = centígrado  Escribir en la celda activa el contenido
de la variable centígrado
ActiveCell.HorizontalAlignment = xlCenter  Centrar horizontalmente el contenido
de la celda activa

47
CONTINUACIÓN DE LA TRADUCCIÓN DEL CÓDIGO (CAMBIOS EN NEGRITAS)
ActiveCell.Offset(0, 1).Range(“a1").Select  Selección relativa a la celda activa:
celda ubicada 0 filas hacia abajo y 1
columna a la derecha
If tipo = "K" Then  Si el contenido de la variable "tipo" es igual a "K"
Entonces Hacer
ActiveCell.FormulaR1C1 = centígrado + 273  Escribir en la celda activa el
resultado de sumar 273 al
contenido de la variable
centígrado
Else  Si el contenido de la variable "tipo" no es igual a "K" Entonces Hacer
ActiveCell.FormulaR1 C1 = (centígrado * 9/5) + 32  Escribir en la celda activa el
resultado de multiplicar por 9/5
el contenido de la variable
centígrado y sumarle 32 al
producto
End If  fin del Si
ActiveCell.HorizontalAlignment = xlCenter  Centrar horizontalmente el contenido de
la celda activa
Next  Incrementar contador (e) y repetir bucle (si e < n)
respuesta = MsgBox("¿Lista definitiva?", 4)  Asignar a la variable
"respuesta" el valor del botón
pulsado por el usuario
(Si=Vbyes/No=VbNo)
Loop Until respuesta = vbYes  Repetir el bucle hasta que la variable
"respuesta" sea igual a VbYes
End Sub  Fin del procedimiento Conversión

3. Regresar al Excel: clic en el botón: Ver Microsoft Excel (Alt + F11)


4. Ejecutar la macro: pulsar teclas Control + Mayúscula + C
5. Tipear en la caja InputBox1 el tamaño de lista (número de elementos).

48
6. Pulsar la tecla Enter o hacer clic en el botón Aceptar para avanzar al
siguiente paso.
7. Tipear en InputBox2 el tipo de conversión (ºKelvin = K, °Fahrenheit = F).

8. Mover la caja MsgBox para despejar la lista, y luego decidir si esta lista es la
definitiva (clic en el botón Si) o no (clic en el botón No)

9.En el caso de haber hecho clic en el botón No, repetir pasos del 5 al 8, hasta
que se logre la lista definitiva (la que complace su requerimiento).

FORMULARIOS DISEÑADOS POR EL USUARIO


 OBJETO USERFORM:
Un objeto UserForm (formulario) es una ventana o caja de diálogo que
conforma una parte del interfaz de usuario de una aplicación. Los formularios
de usuario tienen propiedades que determinan su apariencia, como posición,
tamaño, color y aspectos de su comportamiento; también pueden responder a
eventos iniciados por un usuario o activados por el sistema. Por ejemplo,
puede escribir código en el procedimiento de evento Initialize del UserForm
para inicializar variables a nivel de módulo antes de mostrar el UserForm.
Además de propiedades y eventos, puede utilizar métodos para manipular
formularios de usuario utilizando código. Por ejemplo, puede utilizar el método
Move para cambiar la ubicación y tamaño de un UserForm. La personalización
de los formularios, se define en función de los controles que se incluyan en él;
se puede tener acceso a la colección de controles en un UserForm utilizando la
colección Controls.
 OBJETO CONTROL:

49
Son aquellos que se pueden colocar en un formulario y que tienen su propio
conjunto de propiedades, métodos y eventos reconocidos. Puede utilizar
controles para recibir entradas del usuario, mostrar resultados y desencadenar
procedimientos de evento. Puede manipular la mayoría de los controles
utilizando métodos. Algunos controles son interactivos (responden a acciones
del usuario) mientras que otros son estáticos (sólo son accesibles mediante
código). Entre los controles más comunes, podemos resaltar los siguientes:
1) CommandButtom (Botón de Comando): Inicia, finaliza o interrumpe una
acción o una serie de acciones. La macro o el procedimiento de evento
asignado al evento Click del control CommandButton determina qué hace el
control CommandButton. Por ejemplo, puede crear un control
CommandButton que abra otro formulario. También puede mostrar un texto,
una imagen o ambos en un control CommandButton.
2) ListBox (Cuadro de Lista): Muestra una lista de valores y le permite
seleccionar uno o varios de ellos. Si el control ListBox es dependiente de un
origen de datos, almacena el valor seleccionado en el origen de datos. El
control ListBox puede aparecer como una lista o como un grupo de controles
OptionButton o CheckBox.
3) TextBox (Cuadro de Texto): Muestra información de un usuario o de un
conjunto de datos organizados. Un control TextBox es el control utilizado
más habitualmente para mostrar información escrita por un usuario.
También puede mostrar un conjunto de datos como una tabla, una consulta,
una hoja de cálculo o el resultado de un cálculo. Si un control TextBox es
dependiente de un origen de datos, al cambiar el contenido del control
TextBox también cambia el valor del origen de datos dependiente.
4) ComboBox (Cuadro Combinado): Combina las características de un control
ListBox y un control TextBox. El usuario puede escribir un valor nuevo, como
en un control TextBox o bien puede seleccionar un valor existente como en
un control ListBox
5) Label (Etiqueta): Muestra un texto descriptivo. Un control Label en un
formulario muestra un texto descriptivo como títulos, leyendas, imágenes o
breves instrucciones. Por ejemplo, las etiquetas para una libreta de
direcciones podrían incluir un control Label para el nombre, la calle o la
ciudad. Un control Label no muestra valores de origen de datos ni
expresiones; es siempre independiente y no cambia cuando se mueve de un
registro a otro.
6) CheckBox (Botón de Opción): Muestra el estado de selección de un
elemento. Utilice un control CheckBox para ofrecer al usuario la posibilidad
de elegir entre dos posibles valores como Sí/No, Verdadero/Falso, o
Activado/Desactivado. Cuando el usuario selecciona un control CheckBox,
éste muestra una marca especial (como X) y su valor actual es Sí,
Verdadero, o Activado; ; si el usuario no selecciona el control CheckBox,
éste está vacío y su valor es No, Falso, o Desactivado. Dependiendo del
valor de la propiedad TripleState , un control CheckBox puede también tener
un valor null.

50
7) Image (Imagen): Muestra una imagen en un formulario. El control Image
permite mostrar una imagen como parte de los datos de un formulario. Por
ejemplo, podría utilizar un control Image para mostrar fotografías de
empleados en un formulario del personal.

Ejercicio 14: Generar una macro que active un sistema de consulta de precios,
asociando un formulario personalizado con una base de datos en una hoja de
cálculo.
1. Generar datos en la Hoja1 del Libro activo, según se indica:

2. Activar la Hoja2 y generar en ella los datos que se indican:

3. Regresar a la Hoja1.
4. Insertar la función de base de datos: BDEXTRAER en la celda C4 de la
Hoja 1:
a) Seleccionar la celda C4
b) Clic en el botón Insertar función (ubicado en la barra de entrada)
c) Elegir en Seleccionar una Categoría, la opción: Base de datos y elegir
en Seleccionar una función, la opción: BDEXTRAER

51
d) Hacer clic en el botón Aceptar
e) Definir campos:
 Base_de_datos = Hoja2!A1 :B6
 Nombre_de_campo = Hoja2!B1
 Criterios = B3:B4

Hacer clic en el botón: Aceptar


5. Escribir en la celda B4 el nombre de un producto y darle entrada.

52
6. Editar la fórmula de la celda C4 para que no se produzca un error cuando la
celda B4 esté vacía:
a)Seleccionar la celda C4
b)Pulsar la tecla de función F2
c)Modificar la fórmula según se indica:

7. Crear una macro vacía:


a) Clic en la Tarjeta: Programador I Sección: Código / Opción Grabar
macro
b) Definir campos según se indica:

c) Hacer clic en el botón Aceptar (iniciar grabación)


d) Finalizar la grabación: clic en botón Detener grabación ( )
8. Editar la macro para crear un formulario que muestre la lista de productos,
para permitir al usuario seleccionar a el que se le desea ubicar el precio.
a) Clic en la Tarjeta: Vista I Sección: Macros / Opción Ver Macros
b) Clic en el botón Modificar (previa selección del nombre de macro:
Consulta_Precio)
c) Clic en el menú: Insertar / opción: UserForm

53
d) Agregar al formulario (UserForm1) un Cuadro de lista:
- Clic en el control: Cuadro de lista (Cuadro de herramientas).
- Clic dentro del formulario (UserForm1) para ubicar el cuadro de lista
(ListBox1).
e) Editar el Cuadro de lista para adecuar su presentación:
- Arrastre desde dentro del Cuadro de lista para moverlo.
- Arrastre desde los puntos de control del Cuadro de lista para
escalarlo.
f) Insertar 2 Botones de control a la forma (Userform1):
- Clic en el control: Botón de comando (Cuadro de herramientas).
- Clic dentro del formulario (UserForm1) para ubicar el botón de
comando (CommandButtom 1).
- Repetir los 2 pasos previos para generar el otro botón de comando
(CommandButtom2).
g) Editar los Botones de comando para adecuar su presentación:
- Clic sobre el botón de comando, clic sobre el titulo del botón de
comando y tipear nuevo nombre (Aceptar al primero y Cancelar al
segundo) para cambiar nombres genéricos, finalmente pulsar la tecla
Esc para liberar el botón editado.
- Arrastre desde el borde del Botón de comando para moverlo.
- Arrastre desde los puntos de control del Botón de comando para
escalarlo.
h) Agregar una Etiqueta al cuadro de lista para identificarla:
- Clic en el control: Etiqueta (Cuadro de herramientas).
- Clic dentro del formulario (UserForm1) para ubicar la Etiqueta (Label1).
i) Editar la Etiqueta para adecuar su presentación:
- Clic sobre la Etiqueta (LabeI1), clic sobre el título de la Etiqueta y tipear
el nuevo rótulo (Productos:) para cambiarle el nombre genérico,
finalmente pulsar la tecla Esc para liberar la Etiqueta.
- Arrastre desde el borde de la Etiqueta para moverlo.

54
- Arrastre desde los puntos de control de la Etiqueta para escalarlo.

j) Enlazar los controles del formulario UserForm1 con la hoja de cálculo del
libro activo:
- Clic sobre el Cuadro de lista (ListBox1), para seleccionarlo.
- Clic sobre el botón Ventana de propiedades (Barra Estándar)
- Clic sobre la ficha Por categorías (Propiedades - ListBox1)
- Definir la fuente de datos del Cuadro de lista (ListBox1):
RowSource=Hoja2!A2:A6
- Definir el destino del dato seleccionado en Cuadro de lista (ListBox1):
ControlSource=B4

k) Agregar código al botón Aceptar:


- Hacer Doble Clic sobre el botón Aceptar del formulario Userform1
- Tipear el código que a continuación se indica:

55
TRADUCCIÓN DEL CÓDIGO
UserForm1.Hide  Ocultar el formulario UserForm1

1) Agregar código al botón Cancelar:


- Cambiar en la lista Objeto el control CommandButtom1 por el control
CommandButtom2
- Tipear el código que a continuación se indica:

TRADUCCIÓN DEL CÓDIGO


UserForm1.ListBox1Value = Null  Hacer nulo el valor del cuadro de lista
ListBox1 del Formulario UserForm1
UserForm1.Hide  Ocultar el formulario UserForm1

m) Agregar código al Módulo1:


- Clic en el menú: Ventana / opción: Módulo1 (código)
- Tipear el código que a continuación se indica:

TRADUCCIÓN DEL CÓDIGO


Range(“B4”).Select  Seleccionar la celda B4 con referencia absoluta 56
ActiveCell.FormulaR1C1 = “”  Hacer igual a vacío el contenido de la celda
activa
9. Regresar al Excel: clic en el botón: Ver Microsoft Excel (Alt + F11)
10. Ejecutar la macro: pulsar teclas Control + Mayúscula + C

11.Seleccionar un producto (por ejemplo: Mouse) de la lista, y hacer clic en el


botón Aceptar

12.Volver a ejecutar la macro, seleccionar otro producto de la lista, y hacer clic


en el botón

57
Sección
DEPURANDO LAS MACROS
4

TIPOS DE ERRORES
 ERRORES SINTÁCTICOS:
Son los errores que se producen cuando no respetamos plenamente, la
estructura que exige el Visual Basic, para la correcta escritura del código de las
macros. Por ejemplo, cuando se abren unas comillas que no se cierran en
alguna línea del código.
 ERRORES DE COMPILACIÓN:
Son los errores que no están circunscritos a una sola línea del macro, y que
normalmente se producen cuando no se completa la estructura de bloques o
bucles de programación. Este tipo de errores se detectan durante la traducción
de los módulos y demás procedimientos al lenguaje de máquina (compilación).
Un ejemplo típico de este tipo de errores, es cuando arrancamos un bucle For
.. y olvidamos cerrarlo con la instrucción ... Next.
 ERRORES LÓGICOS:
Son los errores que no puede detectar el Visual Basic, ya que no están
asociados a fallas de escritura del programa, si no, a la organización y
nominación de variables y procedimientos por parte del programador. Por
ejemplo, si quiere cambiar el nombre de una hoja de cálculo a "Datos" y
escribe accidentalmente "Dotas". La computadora nunca podrá detectar el
error si posteriormente, usted hace referencia al objeto, a través del nombre
que pensó inicialmente asignarle a dicha hoja.
 ERRORES EN TIEMPO DE EJECUCIÓN:
Algunas veces, una instrucción de un procedimiento trabaja bien bajo ciertas
circunstancias, pero falla en otras. Tales errores no pueden ser detectados
hasta que se ejecute el procedimiento, lo que define su nombre. Por ejemplo,
al hacer referencia a un nombre de rango, si este existe no habrá ningún
problema ,pero sin embargo, si borra el nombre del rango, Visual Basic no
sabrá que hacer y aparecerá un mensaje de error.

HERRAMIENTAS PARA DETECTAR Y CORREGIR ERRORES

 EL EDITOR DE VISUAL BASIC:


El editor de Visual Basic, por defecto, comprueba la corrección de cada
instrucción al escribirla; y en caso de detectar algún error de sintaxis (como
una palabra reservada con errores ortográficos o un separador faltante) lo

58
advierte inmediatamente; lo cual convierte en una tarea muy sencilla detectar y
corregir los errores de sintaxis al desarrollar una macro en VBA.
Es importante advertir que por el contrario, cuando le damos entrada a una
línea de código escrita correctamente, el editor de Visual Basic formatea
automáticamente las palabras reservadas, resaltándolas en color azul.
Si por alguna razón se desea desactivar la corrección automática de sintaxis:
haga clic en el menú: Herramientas / opción: Opciones ... / Comprobación
de sintaxis automática (en el Visual Basic).

Ejercicio 15: Generar un error de sintaxis y comprobar la corrección


automática del editor de Visual Basic,
1. Tipear la línea de código tal cual se muestra en la gráfica (palabra reservada
mal escrita) y darle entrada, para comprobar que: toda la línea es resaltada
en color rojo y se muestra un mensaje de error.

2. Si reconoce de inmediato cual fue el error: haga clic en el botón Aceptar, y


corrija la sintaxis (se debe auto formatear la línea). Pero si no lo advierte:
haga clic en el botón Ayuda para que le asista en la ubicación del problema.

 COMANDO COMPILAR <PROYECTO>:


El comando Compilar activa el Compilador de visual Basic, o sea inicia la
traducción del código de Visual Basic al lenguaje de máquina, permitiendo
advertir cualquier error en las estructuras de programación del Proyecto. Por lo
tanto la detección y corrección de los errores de compilación, es una tarea tan
sencilla como la de los errores de sintaxis.

Ejercicio 16: Sobre el mismo módulo del ejercicio anterior, generar un error de
compilación y comprobar la corrección automática usando el comando
Compilar <Proyecto>.
59
1. Asegurarse de que el error de sintaxis se haya corregido (cambiar la palabra
Them por Then).
2. Volver a darle entrada a la línea de código: pulsar la tecla Enter, desde el
final de la línea de código editada.
3. Activar el comando Compilar, hacer clic en el menú: Depuración / opción:
Compilar.

4. Si entiende de inmediato el mensaje de error: haga clic en el botón Aceptar y


corrija la estructura del bucle. Pero si no lo advierte: haga clic en el botón
Ayuda para que le asista en el entendimiento del mensaje y la ubicación del
error.

 COMANDO PASO A PASO POR INSTRUCCIONES:


Este comando ejecuta el código instrucción a instrucción. Cuando no esté en
modo diseño, Paso a Paso por Instrucciones inserta modos de interrupción en
la línea de ejecución actual. Si la instrucción llama a un procedimiento, la
siguiente instrucción que se muestra es la primera instrucción del
procedimiento. En modo de diseño, este elemento de menú inicia la ejecución
y establece el modo de interrupción antes de ejecutar la primera línea de
código. Si no hay ningún punto de ejecución actual, es posible que parezca
que el comando Paso a Paso por Instrucciones no hace nada hasta que usted
realice alguna acción que desencadene el código, por ejemplo, hacer elle en
un documento.
Haciendo uso de este comando podemos monitorear el desarrollo del
programa, como lo indica su nombre, paso a paso por instrucción; lo cual nos
permite detectar y corregir cualquier error de lógica o de ejecución, que
afectara el desempeño proyectado para la macro.

Ejercicio 17: Monitorear paso a paso la ejecución de la macro del Ejercicio 4.


1. Abrir el archivo del Ejercicio # 4, Seleccionando la opción: Habilitar macros.

60
2. Editar la macro; hacer clic en el menú: Herramientas / opción: Macro /
Macros ... / Promediar / Modificar.
3. Dividir la pantalla en dos paneles, ubicando arriba la ventana del Excel y
abajo la ventana del Visual Basic:
a) Clic con el botón derecho sobre la barra de Inicio (apuntando a un sitio
vacío).
b) Seleccionar la opción: Mosaico Horizontal.
c) Si el orden no es el requerido: mover las ventanas arrastrándolas
manualmente, y repetir los pasos a y b.
4. Activar la ventana del Visual Basic y ejecutar el comando Paso a Paso por
Instrucciones: clic en el menú: Depuración / opción: Paso a Paso por
Instrucciones.
5. Pulsar repetidamente la tecla de función F8, y simultáneamente seguir la
ejecución de cada línea de codificación, sobre la ventana del Excel.

 VENTANA SUGERENCIA DE DATOS:


Se trata de un cuadro que muestra el valor de una variable sobra la que se
coloca el puntero del mouse.
Este auxilio gráfico se complementa con el comando Paso a Paso, para
detectar con mayor precisión y amplitud los errores de lógica y de ejecución;
por permitir seguir línea a línea la evolución de las variables.

Ejercicio 18: Monitorear paso a paso la ejecución de las instrucciones y de las


variables, del Ejercicio # 13.
1. Abrir el archivo del Ejercicio # 13, Seleccionando la opción: Habilitar macros.

61
2. Editar la macro; hacer clic en el menú: Herramientas / opción: Macro /
Macros ... / Conversión / Modificar.
3. Dividir la pantalla en dos paneles, ubicando arriba la ventana del Excel y
abajo la ventana del Visual Basic:
a) Clic con el botón derecho sobre la barra de Inicio (apuntando a un sitio
vacío).
b) Seleccionar la opción: Mosaico Horizontal.
e) Si el orden no es el requerido: mover las ventanas arrastrándolas
manualmente, y repetir los pasos a y b.
4. activar la ventana del Visual Basic y ejecutar el comando Paso a Paso por
Instrucciones: clic en el menú: Depuración / opción: Paso a Paso por
Instrucciones.
5. Pulsar repetidamente la tecla de función F8, y simultáneamente seguir tanto
la ejecución de cada línea de codificación, sobre la ventana del Excel; como
la evolución de las variables (apuntándolas con el mouse al avanzar de un
paso a otro) dentro del programa.

62
APÉNDICE
FUNCIONES DE
A
MANEJO DE DATOS

Una función es una fórmula prescrita por Visual Basic que permite efectuar
cálculos complejos de forma rápida y sencilla. Las funciones siempre devuelven
un resultado, por tanto, suelen incluirse en sentencias de asignación.

Nombre _ variable = función

A continuación se describe un conjunto de funciones relacionadas con los datos


utilizados por las aplicaciones. Las cuales modifican o determinan el aspecto o
formato de salida, etc.

1. Format:
La función Format establece el formato de una expresión.
Sintaxis: Format(Expresión[,formato])

En donde:
a)Expresión.
Es la expresión a la cual se desea dar formato (puede ser número, texto,
fecha u hora, el nombre de una variable, etc.).

b)Formato.
Una expresión definida por el usuario o el nombre de una expresión.

Ejemplo de uso de la función Format:


Hora = Format (# 2:05:12 AM, "h: m: s")
Número = Format (5432.5, 11 # # 0.00")

63
2. Now:
La función Now devuelve la fecha y la hora actual según la configuración del
sistema. Esta función no presenta ningún argumento.
Sintaxis: Now

3.Val:
La función Val devuelve la parte numérica contenida en una cadena. Para
ello leerá la cadena hasta encontrar un carácter no reconocido como parte
de un número y devolverá el número encontrado hasta ese momento (el
carácter punto será tomado como separador decimal, el carácter coma no
será reconocido como parte del número y los espacios en blanco y
tabuladores no serán reconsiderados).
Sintaxis: Va/(cadena)

La función Val suele utilizarse en sentencias de asignación, como se


muestra en los siguientes ejemplos:

Numero = Va/("1615 198 calle N.E.") 'devuelve el valor 1615198


Numero = Va/("&HFFFF ´´´´) 'devuelve el valor decimal -1
correspondiente al valor hexadecimal

4.Mid$:
La función Mid$ da como resultado una subcadena de "m" caracteres de
longitud, de la cadena, empezando por el n-ésimo carácter.
Sintaxis: Mid$ ( cadena, n[,longitud] )

En donde:
a)cadena.
Obligatorio. Expresión de cadena de la cual se devuelven los
caracteres.
Si cadena contiene Null, se devuelve Null.

b)n.
Obligatorio. Posición de carácter, en la cadena, en la cual comienza
la parte que se quiere tomar. Si n es mayor que el número de
caracteres en la cadena, Mid devuelve una cadena de longitud cero("
").

e)longitud.

64
Opcional. Número de caracteres que se van a devolver. Si se omite,
o

en el texto hay menos caracteres que lo especificado por longitud


(incluyendo el carácter de comienzo), se devuelven todos los caracteres
desde la posición de comienzo n hasta el final de la cadena.

Ejemplos:
Subcadena = Mid$("Hola, 1 ,3) 'Subcadena contiene "Hol"

5.Trim$ I L Trim$ I Rtrim$:


Devuelve una cadena determinada sin espacios a la izquierda (L Trim), sin
espacios a la derecha (RTrim) o sin espacio ni a la derecha ni a la izquierda
(Trim).
Sintaxis: L Trim (cadena)
RTrim (cadena)
Trim (cadena)
En donde:

a)cadena.
Obligatorio. Es cualquier expresión de cadena válida. Si cadena contiene
Null, se devuelve Null.

6.Left$ / Right$
Toman como parámetro una cadena y un número de caracteres,
devolviendo dicho número de caracteres comenzando a extraer desde el
principio de la cadena (Left) o desde el final (Rigth).
Sintaxis: Left$( cadena, longitud)
Right (cadena, longitud)

En donde:

a) cadena.
Obligatoria. Expresión de cadena de la cual se devuelven los caracteres
que están más a la izquierda. Si cadena contiene Null, se devuelve Null.

b) longitud.

65
Se requiere un tipo Variant (Long). Expresión numérica que indica cuántos
caracteres se van a devolver. Si es 0, devuelve una cadena de longitud cero
(''''). Si es mayor o igual al número de caracteres en cadena, se devuelve la
cadena entera.

APÉNDICE
EXPRESIONES Y
B
OPERADORES

Una expresión es una secuencia de operadores y operandos que evaluados en


tiempo de ejecución devuelve un resultado. Los operandos pueden ser números,
cadenas, fechas, etc., ya sea en forma de literales o de variables. A continuación
se detallan los operadores de los que dispone Visual Basic, y que le permitirán
componer básicamente expresiones aritméticas, relacionales y lógicas.

1.Operadores Aritméticos:

Estos operadores, como es obvio, trabajan con cualquier tipo de datos


numéricos que admite Visual Basic, independientemente de su precisión. La
tabla anexa muestra el conjunto de operadores aritméticos que soporta
Visual Basic, ordenados de mayor a menor prioridad respecto a cómo se
evalúan (de izquierda a derecha) cuando varios de ellos forman parte de
una misma expresión. Los operadores que se muestran en la misma fila
tienen igual prioridad. La prioridad se podrá alterar por medio del uso de
paréntesis.

Cuando en una expresión aritmética intervienen operandos de diferentes


tipos, el resultado se expresa, generalmente, en la precisión del operando
de mayor precisión.

Operador Operación aritmética que efectúa

/\ Exponenciación

66
- Cambio de signo
*, I Multiplicación y División
\ División Entera
Mod Resto de una división entera
-, + Resta y suma

Cuando el resultado de una operación aritmética es demasiado largo para el tipo


de variable a la cual se le asigna el resultado, Visual Basic los mostrará realizando
la conversión necesaria ( si es posible ).

Ejemplo:

Dim varlnt As Integer

Dim varNumérica As Variant

var Numérica = 10000 '" 10

Print var Numérica

'La salida será en formato científico 1 E + 40

2.Operadores Relacionales o de Comparación:

Estos operadores nos permiten evaluar expresiones devolviéndonos dos


resultados posibles: True (1), si la expresión es cierta o; False (O), si la
expresión es falsa. Se utilizan generalmente en estructuras de decisión, en
las que dependiendo del valor devuelto se toma un camino u otro. En la
siguiente tabla se enumeran cada uno de los operadores de comparación,
Op1 representa al primer operando y Op2 al segundo:

Operador Devuelve True si Devuelve False si

= Op1 Y Op2 son iguales Op1 y Op2 son distintos


<>,>< Op1 Y Op2 son distintos Op1 y Op2 son iguales
< Op1 es menor que Op2 Op1 es igualo mayor que Op2
<=,=< Op1 es menor o igual que Op2 Op1 mayor que Op2
> Op1 mayor que Op2 Op1 es menor o igual que Op2
>=,=> Op1 es mayor o igual que Op2 Op1 es menor que Op2

67
Ejemplo:
5+1>8 'Devuelve Falso
"abe" <> "a" & "b" & "e" 'Devuelve Falso
5 * 3 >= 5 * 2 'Devuelve Verdadero

El operador & realiza la concatenación o unión de dos operandos. El


resultado es de tipo String si ambas expresiones son de tipo String; en
cualquier otro caso, el resultado es de tipo Variant.

Ejemplo:

vNombre$ = "antonieta"

vApellido$ = "González"

Print "Mi nombre es: "& vNombre$ & vApellido$

3. Operadores Lógicos:

Los operadores lógicos podemos utilizarlos de dos formas: para después de


haber evaluado dos expresiones, normalmente relacionales, obtener un
resultado de tipo lógico (True "verdadero" o Fa/se "falso"); o para
operaciones lógicas bit a bit.

La siguiente tabla muestra una relación de los operadores lógicos, así como
los valores que devuelven según sean las expresiones de entrada Ex1
representa el valor devuelto por la primera expresión, y Ex2 el de la
segunda.

Operador
(por prioridad) Devuelve True si: Devuelve False si:

Not Ex1 = False Ex1 = True

68
And Ex1 = True y Ex2 = True En cualquier otro caso

Or En cualquier otro caso Ex1 = False y Ex2 = False

Xor Ex1 = True y Ex2 = False o Ex1 = False y Ex2 = True o


Ex1 = False y Ex2 = True Ex1 = True y Ex2 = False

Eqv Ex1 = es igual a Ex2 Ex1 = es distinto a Ex2

Imp Ex1 = True y Ex2 = True o Ex1 = True y Ex2 = False


Ex1 = False y Ex2 = True o
Ex1 = False y Ex2 = False

APÉNDICE
PROPIEDADES DE
C
LOS FORMULARIOS

Los formularios tienen una serie de propiedades que describen sus características.
(color, tamaño, título, etc.). Las propiedades pueden ser establecidas durante el
diseño de la aplicación o durante le ejecución, no obstante, algunas propiedades
sólo se podrán establecer en diseño o en ejecución. A continuación describiremos
algunas de las más importantes.

1.SpecialEffect:

Especifica la apariencia visual de un objeto.

2.BackColor:

Establece el color de fondo del formulario o del control utilizado. Si modifica


la propiedad BackColor después de usar métodos gráficos para dibujar, el
nuevo color de fondo borrar los gráficos.

3.ForeColor:

69
Establece el color del primer plano en un formulario o control; por ejemplo,
para etiquetas o cuadros de texto, determina el color con que aparecerá el
texto escrito en ellos.

Si esta propiedad se establece durante el diseño se deberá elegir un color


de la paleta de colores. Es posible establecer el color durante la ejecución
utilizando varios métodos:

70
Definir colores. La función RGB permite especificar un color. Sintaxis: RGB (rojo,
verde, azul)

En donde:

a)Rojo.

Obligatorio. Número en el intervalo de 0-255, ambos inclusive} que


representa el componente rojo del color.

b)Verde.

Obligatorio. Número en el intervalo de 0-255, ambos inclusive, que


representa el componente verde del color.

e)Azul.

Obligatorio. Número en el intervalo de 0-255, ambos inclusive, que


representa el componente azul del color.

Si el valor asignado a cualquier argumento de la función RGB es superior a


255 se considerará como 255.

La siguiente tabla muestra algunos colores estándar y sus valores de rojo, verde y
azul:

Color Valor Valor de verde Valor de azul

Negro O O O

Azul O O 255
Verde O 255 O
Cian O 255 255
Rojo 255 O O
Magenta 255 O 255
Amarillo 255 255 O
Blanco 255 255 255

Usar constantes definidas: Visual Basic cuando desee especificar el color como
valor para un argumento de color o una propiedad de color, por ejemplo:
BaekColor = vbRed

71
La Siguiente tabla muestra las constantes de color definidas por Visual Basic:

Constantes Valor Descripción

VbBlack &H0 Negro

VbRed &HFF Rojo


VbGreen &HFF00 Verde
VbYellow &HFFFF Amarillo
VbBlue &HFF0000 Azul
vbMagenta &HFF00FF Fucsia
VbCyan &HFFFF00 Aguamarina
vbWhite &HFFFFFF Blanco

4.BorderStyle:

Devuelve o establece el estilo del borde de un objeto. Para el objeto


UserForm y el control TextBox es de sólo lectura en tiempo de ejecución.

5.Caption:

Esta propiedad contendrá la leyenda o título que aparecerá en el objeto


(determina el texto que se muestra ella barra de título de un formulario). El
valor puede establecerse durante el diseño o durante la ejecución, en cuyo
caso el texto deberá escribir entre comillas.

La propiedad Caption puede tomar cualquier cadena de caracteres hasta un


máximo de 255 ( para el control Label el tamaño es ilimitado ).

6.Enabled:

Determina si el control está o no activo, es decir, si control podrá o no

responder a los eventos realizados por el usuario.

Valor Característica
True Activo
Fa/se Inactivo

Su valor puede establecerse durante el diseño o durante la ejecución.

7. Font:

72
Establece tanto en diseño como en ejecución el formato del texto que
presenta el objeto, las características de formato son: Fuente o tipo de letra,
tamaño, estilo (negrita y cursiva) y efectos (tachado y subrayado). La
elección del formato, durante el diseño, se efectuará mediante el cuadro de
diálogo Fuente. Hacer doble clic en el nombre de la propiedad, seleccionar
el tipo de letra, su estilo, su tamaño y otros atributos. Una vez realizada la
selección hacer clic en el botón Aceptar y el efecto será inmediato.

La siguiente tabla muestra el conjunto de propiedades del objeto:

Propiedad Característica

Devuelve o establece el estilo de fuente negrita


Bold
Ejemplo: text1.Font.Bold = true 'Activa el estilo negrita'

Devuelve o establece el tamaño de fuente utilizando para


Size el objeto Font.
Ejemplo:Text1.Font.Size = 15
Devuelve o establece el tipo o fuente de letra. Los valores
que puede tomar esta propiedad depende de la
Name configuración del sistema y de los dispositivos de
impresión utilizando.
Ejemplo: text1.Font.Name = "Times New Roman"
Devuelve o establece el estilo cursiva.
Italic Ejemplo: Text1.Font.ltalic = False 'Desactiva el estilo
cursiva'
Devuelve o establece el estilo subrayado.
Underline Ejemplo Text1.Font.Underline = False 'Desactiva el estilo
subrayado'
Devuelve o establece el estilo tachado.
Strike Ejemplo: Text1.Font.StrikeThough = False 'Desactiva el
Through estilo tachada'

8.Height:
Esta propiedad establece o devuelve la altura del objeto, la unidad de
medida que utiliza generalmente es twips que equivale a una veintena
(1/20) parte de punto (1/20 de un punto de impresión). Existen
aproximadamente 1440 twips en una pulgada lógica o 567 twips en un

73
centímetro lógico. Esta propiedad está presente en la mayoría de los
controles y formularios de Visual Basic.

Puede establecer durante el diseño o la ejecución de la ejecución. Esta


propiedad, junto con la propiedad Width, determina el tamaño del controlo
formulario.

74
9. Left:

Establece o devuelve la distancia entre el extremo izquierdo del formulario y


el extremo izquierdo del control (medido en twips). Para un formulario, esta
propiedad determina la distancia entre el extremo izquierdo de la pantalla y
el extremo izquierdo del formulario.

El valor de esta propiedad puede especificarse en diseño o en ejecución.


Se utilizará esta propiedad para determinar la posición del controlo
formulario junto a la propiedad Top. Estas propiedades también serán
utilizadas para mover un control por el mover un control por el formulario en
tiempo de ejecución.

10. Mouselcon:

Esta propiedad establece el aspecto del icono del punto del ratón (siempre
y cuando la propiedad MousePointer tenga el valor 99) cuando sea situado
sobre un controlo formulario en tiempo de ejecución. La propiedad
Mouselcon se encuentra presente en casi todos los controles y formularios
de Visual Basic.

El valor de esta propiedad puede ser establecido en diseño o en ejecución,


en cuyo caso se deberá cargar el aspecto del ratón deseado.

11.Name:

La propiedad Name establece o devuelve el nombre del controlo formulario;


con este nombre se hará referencia al control en el código de la aplicación.
Está presente en todos los controles de Visual Basic.

El valor de esta propiedad puede ser establecido durante diseño. No se


podrá modificar durante la ejecución ( es una propiedad de lectura en
ejecución).

12. MousePointer:

Establece o devuelve el aspecto del icono que adopta el puntero del ratón
cuando sea situado sobre un control es tiempo de ejecución. La propiedad

75
MousePointer se encuentra presente en casi todos los controles y
formularios de Visual Basic.

Puede establecer durante el diseño o la ejecución y los valores que puede tomar
son:

Valor Aspecto del ratón

O Determinado por el control


1 Flecha
2 Cruz
3 I
4 Dos cuadrados
5 Flecha de cuatro puntas
6 Flecha de doble punta (oblicua)
7 Flecha de doble punta (vertical)
8 Flecha de doble punta (oblicua Invertida)
9 Flecha de doble punta (horizontal)
10 Flecha hacia arriba
11 Reloj de arena
12 Prohibido soltar
13 Reloj de arena con flecha
14 Flecha con interrogación
15 Tamaño
99 Aspectos personalizados ( determinado por la propiedad
Mouselcon)

13.Top:

Establece la distancia entre el extremo superior del formulario y el extremo

superior del control. Para el formulario, establece la distancia entre el


extremo superior de la pantalla y el extremo superior del formulario. Se
encuentra presente en todos los controles y formularios de Visual Basic.
Esta propiedad podrá ser establecida durante el diseño de la aplicación o
durante la ejecución.

Se utilizará esta propiedad para determinar la posición del controlo


formulario, junto a la propiedad Left. Está propiedad también puede ser
utilizada para mover un control por formulario en tiempo de ejecución.

76
14.Visible:

Puede tomar el valor True o False indicando si el control debe estar visible
u oculto. Se encuentra en la mayoría de los controles de Visual Basic. Su
valor se puede establecer en diseño o ejecución.

Esta propiedad establece o devuelve la anchura de un formulario. Esta propiedad


se encuentra en la mayoría de los controles de visual Basic. Puede modificarse
durante el diseño y la ejecución.

Junto a la propiedad Heigh determina el tamaño del control del formulario.

77
APÉNDICE
PROPIEDADES DE
D
LOS CONTROLES
En esta sección se describirán las propiedades de los principales controles (los
que aparecen por defecto en el cuadro de herramientas).

1. Label (Etiquetas):

Las etiquetas presentan las siguientes propiedades comunes: Alignment,


BackColor, Caption, Enabled, ForeColor, Height, Left, MousePointer, Name, Top,
Visible, Width, y las propiedades relacionadas con las fuentes del texto.

Las propiedades específicas de este control son:

a)AutoSize.

Esta propiedad determina si el tamaño de la etiqueta debe ajustarse al texto


especificado en la propiedad Caption; esto sucederá si el valor de esta
propiedad es True.

b)BackStyle.

Puede tomar el valor 1 (opaco) o O (transparente) en cuyo caso permite ver


el color de los objetos y los gráficos situados debajo de la etiqueta.

c)BordeStyle.

Determina si la etiqueta debe mostrar bordes.

WordWmp.

Esta propiedad determina si la etiqueta debe ajustarse horizontalmente o


verticalmente al texto de la etiqueta cuando la propiedad AutoSize presenta el
valor True. Si esta propiedad tiene el valor True, el control etiqueta se ajusta

78
verticalmente al texto; si tuviera el valor False el ajuste se realizaría
horizontalmente.

2. TextBox (Cuadro de Texto).

Los cuadros de texto presentan las siguientes propiedades comunes:

Alignment, BackColor, Caption, Enabled, ForeColor, Height, Índex, Left,


MousePointer, Name, Top, Visible, Width, y las propiedades relacionadas con las
fuentes del texto.

Las propiedades específicas para este control:

a)Text.

Devuelve o establece el texto en un control TextBox o del área editable de


un control ComboBox. Cambia la fila seleccionada en un control ListBox.

b)BorderStyle.

Determina si la caja de texto debe mostrar o no bordes.

c) Locked.

Si la propiedad tiene asignado el valor False, el usuario podrá cambiar


directamente el texto durante la ejecución de la aplicación; si tiene un valor
True, el usuario no podrá hacer modificaciones, pero si podrá situar el punto
de inserción y desplazarse por el cuadro de texto (en cualquier, caso es
posible modificar el contenido mediante código).

El valor de esta propiedad puede establecerse durante el diseño y ejecución


de la aplicación.

d)MaxLength.

Establece el número máximo de caracteres que puede introducir en un


cuadro de texto, es decir, limita la cantidad caracteres que puede escribir el
usuario. El valor por defecto de la propiedad MaxLength es 0, que indica la
ausencia de un máximo distinto del que imponga la memoria del sistema del
usuario para controles TextBox de una línea y un valor máximo de

79
aproximadamente 32 KB para los controles TextBox de múltiples líneas. Un
valor mayor que cero(O) indica el número máximo de caracteres.

d)Multiline.

Determina la posibilidad de introducir varias líneas de texto en el control


(True). Es necesario que esta propiedad tenga el valor True si desea variar
la alineación del contenido del control.

e)PasswordChar.

En esta propiedad se incluirá el carácter que aparecerá en el cuadro de


texto cuando el usuario escriba información en él, no obstante, el contenido
real del cuadro de texto será el que haya escrito el usuario. Se usa
normalmente como campo para introducir una contraseña.

f)ScrollBar.

Establece la posibilidad de presentar barras de desplazamiento horizontal


y/o vertical. Únicamente serán mostradas si la propiedad Multiline tiene el
valor True.

g)Text.

Esta propiedad presenta el contenido del control y suele utilizarse para


introducir o para mostrar información generada por la aplicación.

3. CommandButton (Botón de Comando). g

Los botones de comando presentan las siguientes propiedades comunes:

BackColor, Caption, Enabled, Height, Index, Left, MousePointer, Name, Top,


Visible, Width, Mouselcon y las propiedades relacionadas con las fuentes del
texto.

Las propiedades específicas para este control son:

a)Accelerator.

80
Esta propiedad permite asignar un carácter (alfabético) de la propiedad
caption para ser utilizado en combinación con la tecla Alt como acceso
directo.

81
4. CheckBox (Casilla de Verificación): i!!

Las casillas de verificación presentan las siguientes propiedades comunes:

Alignment, BackColor, Caption, Enabled, ForeColor Height, Index, Left,


MousePointer, Name, Top, Visible, Width, y las propiedades relacionadas con las
fuentes del texto.

Las propiedades específicas que presenta este control son las siguientes:

a)Value.

La Propiedad Value determina si la casilla de verificación debe aparecer


seleccionada, no seleccionada o atenuada.

5.OptionButton (Botón de opción):

Los botones de opción presentan las siguientes propiedades comunes: :

Alignment, BackColor, Caption, Enabled, ForeColor Height, Index, Left,


MousePointer, Name, Top, Visible, Width, y las propiedades relacionadas con las
fuentes del texto.

Las propiedades más importante de este control es la siguientes:

a)Value.

La propiedad Value determina si el botón de opción debe aparecer


seleccionado o no seleccionado.

6. ListBox (Cuadro de Lista):

Los cuadros de lista presentan las siguientes propiedades comunes:

BackColor, Enabled, ForeColor, Height, Index, Left, MousePointer, Name,


Top, Visible, Width, y las propiedades relacionadas con las fuentes del
texto.

Las propiedades específicas de este control son las siguientes:

a)Columns.

Determina el número de columnas que se desea utilizar para mostrar los


elementos del cuadro de lista; si tiene un valor 0, se utilizará una sola

82
columna, si se desean presentar más columnas, se deberá establecer el
número de columnas deseado como valor para esta propiedad.

b)List.

Esta propiedad establece o devuelve los elementos contenidos en el


control. Contiene una matriz con todos los valores almacenados en el
control. Para hacer referencias a un elemento concreto de la lista se
utilizará la siguiente sintaxis: Nombre_control. List(índice).

Con esta sentencia se harán referencias al elemento que ocupa la posición


especificada en el índice en la matriz

c)Listlndex.

Permite establecer o recuperar la posición del elemento de la lista que se


encuentra seleccionado. El primer elemento de la lista tiene como índice el
valor 0, el segundo tiene un valor 1 y así sucesivamente. Esta propiedad
sólo se puede establecer en ejecución.

d)Mutiselect.

Esta propiedad se establece durante el diseño y determina la posibilidad de


realizar selecciones múltiples. Si el valor de esta propiedad se establece a
0, únicamente se podrá seleccionar un valor; si el valor es 1 se podrán
seleccionar varios elementos de la lista (haciendo clic sobre ellos), si el
valor es 2 se podrá extender la selección a elementos contiguos
manteniendo pulsada la tecla MAYÚSCULA o a elementos no contiguos
manteniendo pulsada la tecla CONTROL.

e)Select.

Devuelve el valor True o False en función de que un determinado elemento


de la lista esté o no seleccionado. Resultará especialmente útil si se desea
saber que elementos de la lista están seleccionados.

Nombre_ control. Select(índice)

f)Text.

83
Contiene el último elemento seleccionado, y permite durante la ejecución
pasar dicho valor a una variable. La propiedad Text no puede ser
establecida durante el diseño de la aplicación.

84
g)AddItem.

El método Addltem se utilizará para añadir un nuevo elemento a un control


ListBox o ComboBox.

Sintaxis: Nombre-control.Addltem elemento [, índice]

En donde: nombre_control es el control sobre el que actúa el método, el


elemento escribirá el nombre del elemento que se desea añadir al control y
el índice deberá especificar la posición que ocupará el nuevo elemento
dentro del control. El valor del índice es opcional; si no se incluye, el nuevo
elemento ocupará la posición final en la lista.

h)Glear.

Se utilizará para borrar el contenido de los controles ListBox y ComboBox,


es decir, elimina los elementos que tengan estos controles. También se
puede utilizar para borrar el contenido del portapapeles del sistema.

La sintaxis que presenta es: Nombre_control.Clear

i)Removeltem.

Este método se utilizará cuando se necesite borrar un elemento de un


control ListBox o ComboBox.

La sintaxis que presenta es: Nombre_control.Removeltem índice

En donde nombre_control es el nombre del control del cual se desee borrar


un elemento e índice especifica la posición que ocupa el elemento que se
desea borrar (debe recordarse que habitualmente la posición inicial es O)

7.ComboBox (CUADRO COMBINADO):

Las propiedades comunes que presentan los cuadros combinados son las
siguientes: BackColor, Enabled, ForeColor, Height, Index, Left, MousePointer,
Name, Top, Visible, Width, y las propiedades relacionadas con las fuentes del
texto.

Las propiedades específicas de los cuadros combinados son:

85
a)Style.

Establece el modelo o estilo del cuadro combinado según lo siguiente:

 Si la propiedad Style tiene el valor 0 (cuadro combinado desplegable), el


cuadro combinado presenta el aspecto de un cuadro de lista desplegable.
Para elegir un elemento se deberá hacer clic en el botón con flecha que
presente el control y seleccionar el elemento deseado o directamente
escribir su nombre.

Si la propiedad Style tiene el valor 1 (cuadro combinado simple), el cuadro


combinado presenta los elementos de la lista siempre visibles pudiendo el
usuario seleccionar uno de ellos o escribir el nombre del elemento deseado.

Si la propiedad Style tiene el valor 2 (lista desplegable), el cuadro


combinado presenta el aspecto de una lista desplegable en la cual
únicamente se puede seleccionar un elemento de la lista, es decir, el
usuario no podrá escribir los nombres de los elementos.

b)Text.

La propiedad Text contiene el último valor seleccionado de la lista o el


nuevo valor introducido por el usuario.

Los métodos Addltem, Clear y Removeltem, que se describieron para los


cuadros de lista, también están implementados para los cuadros
combinados, y se usan de la misma manera.

8.Picture:

Las propiedades comunes de los controles image son las siguientes:

Enabled, Height, Index, left, Mousepointer, Name, Top, Visible y Widht. Los
controles image presentan las siguientes propiedades específicas:

a)Strecht.

Determinar el tipo de ajuste que se utilizará para mostrar la imagen


completa dentro del control. Si el valor de esta propiedad es true, el gráfico

86
cambia de tamaño para ajustarse al tamaño del control. Si el valor es False,
será el tamaño del control el que se ajustará al tamaño del gráfico.

87
APÉNDICE
EVENTO DE LOS
E
OBJETOS

A continuación se ofrece una lista de los eventos, que son reconocidos por los
controles que aparecen por defecto en el cuadro de herramientas, los restantes
eventos serán detallados junto con los controles que los reconocen.

1.Change:

El evento Change se produce cuando cambia el contenido de algunos


controles, ya sea mediante código o mediante la acción del usuario.

Este evento es reconocido por los controles Combobox, Hscrollbar,


Vscrollbar, Picturebox y Textbox.

El código asociado a este evento se ejecutará cuando cambie el contenido


de una determinada propiedad del control. En la siguiente tabla se muestra
la propiedad que ha de cambiar para que se ejecute el código en función
del control:

CONTROL PROPIEDAD
Combobox Text
Hsccrollbar Value
Vscrollbar Value
Label Caption
Picturebox Picture
textbox Text

88
Una utilidad habitual de este evento consiste en determinar la validez de un
dato escrito en un cuadro de texto. También se suele utilizar para activar o
desactivar un botón en función de una respuesta al usuario.

El siguiente código comprueba el valor introducido en el cuadro de texto


txtContinuar. En función del valor introducido aparecerá en pantalla un
mensaje u otro:

2.Clic:

Este evento ocurrirá al hacer clic en el botón del ratón cuando el puntero del
ratón se encuentre sobre el control. Cuando se hace clic sobre un control,
además del evento Click se producen los eventos MouseDown y MouseUp.

Los controles que reconocen el evento Click son: CheckBox, ComboBox,


CommandButton, Form, Frame, Image, Label, Listbox, OptionButton y
Textbox.

El evento Click ocurrirá cuando se haga clic sobre un control, no obstante,


existen otras formas de desencadenar el evento Click, por ejemplo, cuando
un control CheckBox u OptionButton tienen el foco y se pulsa la barra
espaciadora, o cuando se pulsa la tecla ENTRAR y un control
CommandButton tiene su propiedad default establecida a true.

Durante la ejecución también es posible conseguir que se produzca el


evento Click, para ello se deberá cambiar a true el valor de la propiedad
value de los controles CheckBox, CommandButton u OptionButton.

3.Dblclick:

El evento Dblclick ocurrirá cuando se pulse dos veces el ratón (en una
secuencia rápida) sobre el control.

Este evento es reconocido por los controles: Combobox, Form, Frame,


Image, Label1, Listbox, Optionbutton, Picturebox y Textbox.

89
Su utilización es frecuente en los cuadros de lista para seleccionar una
opción y cerrar el cuadro de diálogo (esto sucede en cualquier cuadro de
diálogo Abrir estándar).

Puesto que el evento Dblclick ejecuta en primer lugar el evento Click, se


ejecutará en primer lugar el código incluido en dicho evento Click para
posteriormente ejecutarse el código incluido en el evento Dblclick. También
se producen los eventos MouseUp y MouseDown.

4.Deactivate:

El evento Deactivate sucederá cuando el formulario deje de estar en primer


plano es decir, cuando deje de ser la ventana activa.

Es reconocido únicamente por los formularios estándar y los MDIForm.


Incluir código asociado al evento. Deactivate de un formulario sólo tiene
sentido cuando en una aplicación se utiliza más de un formulario.

5.Gotfocus:

Será el primer evento que se producirá cuando un control reciba el foco, es


decir, cuando pase a tener el control de la aplicación. Un control puede
recibir el foco si el valor de sus propiedades Enabled y Visible es True.

Este evento es reconocido por los controles: Checkbox, Combobox,


Commandbutton, Form, Hscrollbar, Vscrollbar, Listbox, Optionbutton,
Picturebox y Textbox.

Un control recibirá el foco cuando se haga c1ic sobre él, cuando al pulsar la
tecla TAB el foco pase a este control o cuando se utilice el método
SetFocus.

Sintaxis: Nombre_contro/.SetFocus

6.Load:

Sucederá al cargar en memoria un formulario. El formulario inicial de una


aplicación se carga en memoria al ejecutarse la aplicación; otra forma de
cargar un formulario es utilizar la sentencia Load.

90
Este evento es reconocido únicamente por los formularios (estándar y MDl)
Es frecuente asociar a este evento la declaración de variables en el ámbito
del formulario y también establecer el valor de algunas propiedades de los
controles.

91
7. Lostfocus:

Se produce cuando un control deja de tener el foco, es decir, cuando el foco


pasa a otro control. Este evento es reconocido por los controles: Checkbox,
Combobox, Commandbutton, Form, Hscrollbar, Vscrollbar, Listbox,
Optionbutton, Picturebox y Textbox.

Un control puede perder el foco cuando se haga clic sobre otro control,
cuando al pulsar la tecla TAB o cuando se utilice el método SetFocus. Es
frecuente asociar a este evento código que permita validar una entrada de
datos por parte del usuario y en función del texto escrito por el usuario
realizar una operación y otra.

8.Resize:

El evento Resize se produce cuando cambia el tamaño del control o del


formulario. El cambio de tamaño puede estar producido por una acción del
usuario (bordes, botones maximizar o restaurar del formulario) o por código.

Este evento es reconocido por los controles: Form, Mdiform y Picturebox.

Es frecuente asociar al evento resize de un formulario, el código que


permita variar la posición o el tamaño de un control cuando varíe el tamaño
del formulario.

El código que se muestra a continuación permite mantener centrado en el


formulario un control de etiqueta, llamado IblEtiqueta, cada vez que se varíe
el tamaño del formulario.

9.Scroll:

Este evento ocurrirá cuando se desplace, arrastrando con el ratón, el


cuadro de desplazamiento de una barra de desplazamiento horizontal o
vertical.

Este evento es reconocido por los controles hscrollbar y vscrollbar. Suele


utilizarse para mostrar los valores que toma una variable cuyo valor
depende del valor de la barra de desplazamiento.

92
El siguiente código establece el color de fondo del formulario a medida que
se arrastra el cuadro de desplazamiento de un control de barra de
desplazamiento vsbColor.

10.ORDEN DE DISPARO DE UN EVENTO:

a) En un formulario (Cuando se inicia).

 Initialize.

Para iniciar datos usados por el formulario.

 Load.

Inicializaciones adicionales.

 Resize.

Cuando se muestra el formulario o cambia de tamaño.

 Paint.

Igual que la propiedad AutoReDraw = True, para redibujar o repintar


automáticamente.

b) En un formulario (Cuando se cierra).

 QueryUnload

 Unload

 Termínate

11.EVENTOS DE MOUSE:

a)Click.

Cuando se hace clic con el ratón.

b)Dblclick.

Al hacer doble clic con el ratón

c)DragDrop.

Cuando se completa una operación arrastrar y soltar.

d)DragOver.

93
Se dispara de forma continua cuando se está produciendo una operación
de arrastrar y soltar.

e)Mouse Down.

Cuando pulsa un botón del ratón.

f) MouseMove.

Cuando mueve el puntero del ratón

g) MouseUp.

Cuando suelta el botón del ratón

12.EVENTOS DEL TECLADO:

13.a) KeyDown.

Cuando se pulsa una tecla

b)KeyPress.

Cuando se pulsa y se suelta una tecla

c)KeyUp.

Cuando se suelta una tecla.

13.EVENTOS MISCELANEOS:

a)Activate.

Cuando un formulario se convierte en la ventana activa

b)Desactivate

Cuando un formulario deja de ser la ventana activa

c)GotFocus.

Cuando un control recibe el foco ( se selecciona con el ratón o el teclado).


Las propiedades Visible y Enable deberán estar establecidas a true.

d)LostFocus.

94
Cuando un control pierde el foco (con el ratón o el teclado se selecciona
otro control). Las propiedades Visible y Enable deberán estar establecidas a
True.

95
96