Logo Passei Direto
Material
¡Estudia con miles de materiales!

Vista previa del material en texto

Capítulo 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Programación con VBA 
 
 
En este capítulo trataremos: 
 
 
 
Programación con Visual Basic 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SENATI-Computación e Informática 159 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Introducción al Visual Basic 
Microsoft VBA (Visual Basic for Applications) es el lenguaje de macros de Microsoft 
Visual Basic y viene integrado en aplicaciones de Microsoft Office, como Word, Excel 
y Access, Powerpoint y Visio. VBA permite acceder a las 
funcionalidades de un lenguaje orientado a eventos con acceso a 
la API de Windows. 
 
La utilidad de VBA es automatizar tareas cotidianas, el programa 
generado sólo se puede compilar con el documento, hoja o base 
de datos en que fue creado 
 
Visual Basic es una herramienta de diseño de aplicaciones para 
Windows, en la que estas se desarrollan en una gran parte a partir del diseño de una 
interface gráfica. En una aplicación Visual Basic, el programa está formado por una 
parte de código puro, y otras partes asociadas a los objetos que forman la interface 
gráfica. 
 
 
 
 
 
 
 
 
Objetos 
Procedimientos 
 
 
 
 
 
 
 
 
 
 
Código 
 
 
 
 
 
 
 
 
 
 
Es por tanto un término medio entre la programación tradicional, formada por una 
sucesión lineal de código estructurado, y la programación orientada a objetos. 
 
Combina ambas tendencias. Ya que no podemos decir que Visual Basic 
pertenezca por completo a uno de esos dos tipos de programación, debemos 
inventar una palabra que la defina: PROGRAMACION VISUAL. 
 
 
Pasos para la creación de un programa en VBA 
 
La creación de un programa bajo Visual Basic lleva los siguientes pasos: 
Análisis, planteamiento lógico de la solución del problema, diagrama de flujo, 
diseño del formulario, programa. 
 
 
 
160 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Análisis 
 
En esta etapa se construye un modelo del problema extraído del mundo real 
especificando los elementos que alimentan el proceso (especificaciones de 
entrada), los elementos que se espera produzca el proceso (especificaciones de 
salida) y se define lo mejor posible al problema en sí mismo. 
 
Para poder definir bien un problema es conveniente responder a las siguientes 
preguntas 
 
1. ¿Qué es lo que me pide que realice el problema? 
 
2. ¿Qué datos se requieren ingresar, analice el tipo de dato que necesita 
 
(numérico, texto, fecha, hora, …) y su valor inicial? 
 
3. ¿Qué resultado desea hallar, cálculos, reportes, consultas, analice el 
tipo de dato? 
 
4. ¿Qué método puedo utilizar para encontrar este resultado? 
Requerimientos del análisis del problema: 
 
Análisis del 
problema 
 
 
 
 
Definición 
del 
problema 
Definir 
datos de 
entrada 
Definir 
datos de 
salida 
 
Planteamiento lógico de la solución del problema. 
 
El planteamiento lógico de basa en la idea que uno tiene para resolver el 
problema, basado en un modelo matemático o secuencia de procesos (leer 
datos, registrar datos, consultar datos, reportar datos, … etc.). 
 
 Diagrama de flujo 
 
Es una herramienta que permite plantear una solución lógica a un problema de 
computadoras. 
 
 Diseño del formulario 
 
Es la interfaz de comunicación hombre máquina, tanto para salida de datos 
como para entrada. 
 
 Programa 
 
El programa está distribuido en: Las propiedades de los controles, los 
procedimientos (Eventos Click, keypress, etc.) 
 
 
 
 
 
 
 
SENATI-Computación e Informática 161 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de programación VBA 
Los algoritmos se estructuran de diversas formas, en algunos casos simplemente su 
desarrollo es consecutivo, a este tipo de algoritmos se denomina de estructura 
secuencial, en otros casos durante el desarrollo secuencial se generan preguntas a este 
tipo de algoritmos se denomina de estructura condicional y en otros casos generan 
bucles es decir repetición de ciertas líneas de programas, a estos algoritmos se 
denominan de estructura repetitiva. 
 
Estructura básica para cualquier algoritmo a desarrollar: 
 
 
 
 
Declaración de 
variables 
Captura de 
datos 
Proceso de 
datos 
Salida de 
información 
 
 
 
 
Estructura Secuencial. 
 
Este tipo de algoritmos se caracteriza por que entre sus 
instrucciones no existen estructuras condicionales ni 
repetitivas, se desarrollan línea a línea hasta culminar con su 
ejecución, gráficamente se observaría de la siguiente manera: 
 
 
 
162 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Ejemplo 
 
Diseñar un programa que permita hallar el área de un triangulo rectángulo si se 
sabe: Área_triángulo = (B * H) / 2 
 
Donde B es base del triangulo y H es la altura. 
 
1. Análisis 
 
i. ¿Qué te piden que realices? 
 
Hallar el área de un triangulo. 
 
ii. ¿Qué datos necesito conocer? 
 
Según la fórmula que se muestra debería de conocer la base y la altura. 
 
2. Planteamiento Lógico. 
 
El problema se resuelve con una fórmula matemática AR = B*H 
 
3. Definición de variables de entrada 
 
Las variables que se usaran para la captura de la base y la altura son: B y H. 
 
4. Definición de variables de salida 
 
La variable en donde se muestra el área del triangulo rectángulo es: AR 
 
5. Programa 
 
Sub AreaTriangulo() 
Dim a B as integer 
Dim H as integer 
Dim AR as single 
B= val (Textbox1.text) 
 
H = val (Textbox¨2.text) 
AR = (B*H) / 2 
Textbox2.text = AR 
 
End Sub 
 
 
Estructura Condicional. 
 
Este tipo de algoritmos se caracteriza por que entre sus instrucciones muestran 
estructuras condicionales. 
 
a. Condiciones Simples. Sentencia SI – ENTONCES 
 
Se ejecuta un conjunto de instruciones si se cumple la condición 
 
 
 
V 
Condición Instrucciones 
 
 
 
 
 
 
SENATI-Computación e Informática 163 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
b. Condiciones doble. Sentencia SI – ENTONCES – SINO 
 
Se ejecuta un conjunto de instruciones si se cumple la condición, caso 
contrario se ejecuta otro conjunto de instrucciones. 
 
 
 
F V 
Condición 
 
 
 
 
Instrucciones_B Instrucciones_A 
 
 
 
 
 
 
 
 
 
Ejemplo 
 
Realizar un algoritmo que permita ingresar 2 números, luego determinar 
si el primer número ingresado fue el mayor (mostrar un mensaje). 
 
1. Análisis. 
 
i. ¿Qué te piden que realices? 
 
Evaluar 2 números para determinar si el primer número 
ingresado fue el mayor. 
 
ii. ¿Qué datos necesito conocer? 
 
Los 2 números. 
 
2. Planteamiento Lógico. 
 
La forma directa de poder saber si un número es mayor a otro es 
creando una condición relacional. A > B 
 
3. Definición de variables de entrada. 
 
Se requerirán dos variables, N1 y N2 que representen a los números 
que se evalúan. 
 
4. Definición de variables de salida. 
 
Para este problema no existirán variables de salida debido a que se 
desea mostrar solo mensajes. 
 
5. Programa 
 
Private Sub CommandButton1_Click() 
 
N1 = val(text1.text) 
N2 = val(text2.text) 
If n1>n2 then 
 
 
 
 
164 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Else 
 
 
End If 
 
End Sub 
Textbox1.text = “El primer número es el mayor” 
 
 
Textbox1.text = “El segundo número es el mayor” 
 
6. Diagrama de Flujo 
 
 
 
INICIO 
 
 
Declaración de variablesN1, N2: entero 
 
 
N1, N2 
 
 
F V 
 
A>B 
 
 
 
 
El primer 
número no 
es mayor 
El primer 
número es 
mayor 
 
 
 
 
 
FIN 
 
 
 
Sentencia selección-caso 
 
Esta es una estructura de decisión múltiple, evaluará una expresión condicional 
que podrá tomar uno de los “n” valores distintos que para algunos casos puede 
tratarse de rangos o valores individuales, según cumpla con uno de estos. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SENATI-Computación e Informática 165 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Ejemplo 
 
Un movil recorre un tramo de la carretera con Movimiento Rectilíneo Uniforme 
(MRU), determinar y mostrar cual es el espacio recorrido: 
Espacio = Velocidad * Tiempo 
Adicionalmente mostrar un mensaje que indique el consumo de gasolina según la 
tabla: 
 
 
Espacio Recorrido 
 
Gasolina 
 
0 y 30 
 
1 galón 
 
31 y 60 
 
2 galones 
 
61 y 200 
 
3 o más galones 
 
1. Análisis. 
 
ii. ¿Qué te piden que realices? 
 
Calcular el espacio recorrido y en base a ello mostrar cuanta 
gasolina se consume. 
 
iii. ¿Qué datos necesito conocer? 
 
La velocidad y el tiempo (según formula). 
 
2. Planteamiento Lógico. 
 
El desarrollo es simple, solamente deberá ingresar la velocidad y el tiempo 
para calcular el espacio recorrido, en base a ello deberá observar la tabla para 
que desarrolle la estructura correspondiente y muestre el mensaje solicitado. 
 
Ejemplo: 
 
Si el espacio recorrido es de 25 kilómetros 
 
El mensaje es 1 galón. 
 
3. Definición de variables de entrada. 
 
Se requerirán dos variables, V y T que representen a la velocidad y el tiempo 
respectivamente. 
 
4. Definición de variables de salida. 
 
La variable de salida estará representada por E. 
 
5. Programa. 
 
Private Sub CommandButton1_Click() 
 
v = val(text1.text) 
t = val(text2.text) 
e = v*t 
Select case e 
 
case 0 to 30 
 
 
 
166 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
text3.text =”Debe usar un galón” 
 
case 31 to 60 
 
text3.text =”Debe usar dos galones” 
 
case 61 to 200 
 
text3.text =”Debe usar tres galones” 
 
End select 
 
End Sub 
 
6. Diagrama de flujo. 
 
 
 
INICIO 
 
Declaración de variables 
V, T, E: entero 
 
 
V, T 
 
 
E = V * T 
 
 
 
E 
 
31 y 60 
0 y 30 60 y 200 
 
Debe 
usar 1 
galón 
 
Debe 
usar 2 
galones 
 
Debe 
usar 3 o 
más 
galones 
 
 
 
E 
 
 
FIN 
 
 
 
Estructura Repetitiva. 
 
Conjunto de instrucciones que se repiten un número determinado de veces 
mientras se cumple una determinada condición o en todo caso se le ha dado un 
límite de veces a ejecutar. 
 
Inicio de Bucle 
 
 
Instrucción 1 
 
 
 
Instrucción N 
 
 
 
Fin de Bucle 
 
SENATI-Computación e Informática 167 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Contador. Los procesos repetitivos por lo general lo utilizan, ya que necesitan 
contar los sucesos o acciones internas del bucle. Una 
Inicio de Bucle 
 
 
 
 
C = C + 1 
de las formas de controlar un bucle es mediante un 
contador. Un contador es una variable cuyo valor 
crece o decrece en una cantidad constante por cada 
vuelta (interacción) que da el bucle. 
 
 
 
Inicio de Bucle 
 
Fin de Bucle 
 
 
Acumulador. Es denominado también totalizador, 
es una variable cuya misión es almacenar cantidades 
o valores resultantes de sumas sucesivas. Realiza la 
misma función que un contador con la diferencia de 
que el incremento o decremento de cada suma es 
variable en lugar de constante como en el caso del 
contador. 
N 
 
 
 
AC = AC + N 
 
 
 
Fin de Bucle 
 
 
 
Ejemplo 
 
Desarrollar un algoritmo que permita calcular y mostrar la suma de los n 
primeros números naturales, deberá ingresar el límite de números a sumar. 
 
S = 1 + 2 + 3 + 4 + 5 +... + n 
 
1. Análisis. 
 
i. ¿Qué te piden que realices? 
 
Calcular la suma de n números naturales. 
 
ii. ¿Qué datos necesito conocer? 
 
La cantidad de números a sumar. 
 
2. Planteamiento Lógico. 
 
Este problema se puede haciendo uso de acumuladores y contadores. 
 
3. Definición de variables de entrada. 
 
Se requerirán una variable que represente a la cantidad de números a 
sumar(N). 
 
4. Definición de variables de salida. 
Tilizaremos la variable AC. 
5. Programa 
 
General Declaraciones 
 
Dim i As Byte 
 
Dim AC As Integer 
 
 
 
168 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Private Sub CmdProcesar_Click() 
 
List1.Clear 
 
AC = 0 
 
For i = 1 To Val(Text1.Text) 
List1.AddItem Str(i) 
AC = AC + i 
 
Next i 
 
Text2 = AC 
 
End Sub 
 
 
Private Sub CmdLimpiar_Click() 
 
Text1 = 0 
 
Text2 = 0 
 
Text1.SetFocus 
 
End Sub 
 
 
Private Sub CmdSalir_Click() 
 
If MsgBox("Desea salir?", vbInformation + vbYesNo, "SALIDA") = vbYes Then 
 
End 
End If 
End Sub 
6. Diagrama de flujo 
 
INICIO 
 
Declaración de variables 
I, N, AC: entero 
 
 
N 
 
 
AC = 0 
 
 
Para I=1 
Hasta N 
 
 
AC = AC + I 
 
 
AC 
 
 
 
 
FIN 
 
 
SENATI-Computación e Informática 169 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
La ventana del editor de Visual Basic 
Para trabajar en el Entorno de Visual Basic, hacer lo siguiente. 
 
Hacer clic en la ficha , botón 
 
Se presenta la ventana de programación Visual Basic 
 
 
 
 
Barra de menú Barra de herramienta 
 
 
 
 
 
 
 
 
 
 
Ventana de 
proyecto 
 
 
 
 
Formulario 
 
 
Cuadro de 
herramientas 
 
 
 
 
 
 
 
 
A continuación se describen los principales elementos de la ventana de Microsoft 
Visual Basic. 
 
a. Barra de Menús 
 
Presenta los comandos que se usan para trabajar con Visual Basic. Además 
de los menús estándar Archivo, Edición, Ver, Insertar, Formato, Depuración, 
Ejecutar, Herramientas, Complementos, Ventana y Ayuda. 
 
b. Barra de Herramientas 
 
Permite un acceso directo (solo un clic) a muchas de las operaciones más 
frecuentes utilizadas durante el desarrollo de aplicaciones. 
 
c. Cuadro de Herramientas 
 
Contiene todos los objetos y controles que se pueden añadir a los formularios 
para crear aplicaciones. 
 
 
 
170 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
d. Diseñador de Formularios 
 
Funciona como una ventana en la que se puede personalizar el diseño de la 
interfaz de usuario (ventana) de una aplicación. 
 
e. Explorador de Proyectos 
 
Lista de los archivos (formularios, módulos, etc.) del proyecto actual. Un 
Proyecto es una colección de archivos que utiliza para construir una 
aplicación. 
 
f. Ventana de Propiedades 
 
Lista los valores de las propiedades del formulario o control seleccionado 
que pueden ser modificados durante el diseño del formulario o control. 
 
g. Ventana de Código 
 
Funciona como un editor para escribir el código (sentencias) de la 
aplicación. Cuando se ingresa el nombre de una función en la ventana de 
código, Visual Basic automáticamente proporciona el formato o sintaxis de 
la función. 
 
 
Terminología de Visual Basic 
 
Conforme trabaje con VBA necesitará estar familiarizado con los siguientes 
términos: 
 
 
Término 
 
Definición 
 
Tiempo de diseño 
 
Es el momento en el que se construye la aplicación. 
 
Tiempo de ejecución 
 
Es el momento en el cual ejecutamos aplicación. 
 
Formulario 
 
ES el contenedor de los controles donde se diseña la 
aplicación, también conocida como interfaz de 
usuario. 
 
Controles 
 
Representación gráfica de objetos tales como botones, 
cuadros de lista, cuadros de edición, etc. 
 
Objetos 
 
Un término general usado para describir todoslos 
formularios y controles que forman parte de la 
aplicación. 
 
Propiedades 
 
Los valores de un objeto, tales como tamaño, título, 
color, etc. 
 
Métodos 
 
Las acciones que un objeto puede realizar sobre sí 
mismo. 
 
Eventos 
 
Son acciones reconocidas por un formulario o control. 
Los eventos ocurren a medida que el usuario interactúa 
 
 
 
SENATI-Computación e Informática 171 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 con los objetos de la aplicación. 
 
Programación 
controlada por 
eventos 
 
La programación controlada por eventos es la esencia 
de las interfaces gráficas de usuario; el usuario acciona 
y el código responde. 
 
 
 
Programación por eventos 
 
En las aplicaciones manejadas por eventos, la ejecución no sigue una ruta 
predefinida. En vez de esto, se ejecutan diferentes secciones de código en 
respuesta a eventos. 
 
La secuencia de eventos determina la secuencia en que el código se ejecuta. Es 
por esto que la ruta que sigue el código de la aplicación es diferente cada vez que 
se ejecuta el programa. 
 
Convenciones para los nombres de los objetos 
 
Los objetos deben llevar nombres con un prefijo coherente que facilite la 
identificación del tipo de objeto. A continuación se ofrece una lista de 
convenciones recomendadas para algunos de los objetos permitidos poro Visual 
Basic. 
 
 
 
 
Tipo de Control 
 
Prefijo 
 
Detalles 
 
Etiqueta 
 
lbl 
 
lblAPELLIDOS 
 
Cuadro de texto 
 
txt 
 
txtAPELLIDO 
 
Casilla de verificación 
 
chk 
 
chkIMPRESORA 
 
Botones de opción 
 
opt 
 
optCPU 
 
Cuadro combinado, cuadro 
lista desplegable 
 
cbo 
 
cboCUDADES 
 
Cuadro de lista 
 
lst 
 
lstPAISES 
 
Botón de comando 
 
cmd 
 
cmdSALIR 
 
Formulario 
 
frm 
 
frmENTRADA 
 
Marco 
 
fra 
 
fraTIPOS 
 
Línea 
 
lin 
 
linVERTICAL 
 
Imagen (Picture) 
 
pic 
 
picLOGOTIPO 
 
Cuadro de número 
 
spn 
 
spnPÁGINAS 
 
 
172 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Formularios 
 
El formulario es el principal medio de 
comunicación entre el usuario y la 
aplicación. Los usuarios interactúan con los 
controles sobre el formulario para ingresarle 
datos y obtener resultados, para mostrar las 
propiedades de un objeto pulsar F4. 
 
 
 
Propiedades 
 
BackColor Color de fondo del formulario. 
 
Caption Texto en la barra de título del formulario. 
 
Enabled True/False. Determina si está habilitado para responder a las 
acciones del usuario. 
 
Left y Top Ubicación del formulario. 
Name Nombre del formulario. 
 
 
Eventos 
 
Activate Ocurre cuando el formulario se convierte en la ventana activa. 
Click Ocurre cuando hace clic sobre el formulario. 
Deactivate Ocurre cuando el formulario deja de ser la ventana activa. 
 
 
 
 
Añadir controles al formulario 
 
Para añadir controles a un formulario lo hacemos de la siguiente manera: 
 
1. Haga clic sobre el control en el Cuadro de Herramientas. 
 
2. Ubique el puntero del Mouse (una cruz) sobre el formulario en la 
esquina superior izquierda donde desea colocar el control. 
 
3. Realice un clic sostenido mientras arrastra el puntero a la esquina 
superior derecha donde colocará el control. 
 
4. Suelte el botón del Mouse. 
 
Estos cuatro pasos se repiten con cada control que desea añadir al 
formulario. 
 
 
La Ventana de Código 
 
La Ventana de Código se usa para escribir, mostrar y editar el código de su 
aplicación. Puede abrir una ventana de código por cada módulo de su aplicación, 
de modo que puede fácilmente copiar y pegar entre ellos. El editor de texto es 
solo un editor ASCII. 
 
 
 
SENATI-Computación e Informática 173 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
La Ventana de Código contiene: 
 
 
 
 
 
 
 
 
Lista de objetos 
Lista de eventos 
 
 
 
 
 
La barra de división 
 
 
 
 
 
a. El Cuadro Lista de Objetos 
 
Muestra el nombre del objeto seleccionado. Haga clic en la flecha a la 
derecha del cuadro Objeto para mostrar una lista de todos los objetos 
asociados con el formulario. 
 
b. El Cuadro Lista de Eventos 
 
Muestra todos los eventos reconocidos para el formulario o control mostrado 
en el cuadro Objeto. Cuando seleccionamos un evento, en la ventana de 
código se muestra el procedimiento de evento asociado con ese evento. 
Ejemplo: 
 
c. La Barra de División 
 
Permite dividir la ventana de código en dos partes. 
 
 
 
Editando Código 
 
Use las características de edición de Visual Basic para que su código sea más 
fácil de leer. 
 
Sangría 
 
Use la sangría para diferenciar partes de su código, tales como estructuras 
repetitivas y condicionales. Veamos el siguiente ejemplo: 
 
 
Private Sub cmdIngresar_Click() 
 
If Len(Trim(txtUsuario))=0 Then 
txtUsuario.SetFocus 
ElseIf Len(Trim(txtContraseña))=0 Then 
txtContraseña.SetFocus 
ElseIf txtContraseña = “AGPS” Then 
Para aplicar sangría a una 
sección de sentencias de un 
código use la tecla Tab. 
 
 
 
 
174 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Else 
 
 
 
 
 
 
 
 
End If 
MsgBox “La clave ingresada es correcta” 
 
Unload Me 
 
 
MsgBox “La clave ingresada no es válida” 
 
txtContraseña.SelStart=0 
 
txtContraseña.SelLength= Len(Trim(txtContraseña)) 
 
txtContraseña.SetFocus 
 
End Sub 
 
 
Comentarios 
 
El añadir documentación y comentarios a su código permite comprender mejor lo 
que hace el código. El texto que continúe al símbolo de comentario será ignorado 
en la ejecución de la aplicación. Veamos el siguiente ejemplo: 
 
 
 
Private Sub cmdLimpiar_Click() 
 
'Este procedimiento limpia la ventana de identificación 
txtUsuario.Text = "" 'Limpia el cuadro de texto 
txtUsuario.SetFocus ' Mueve el enfoque a txtUsuario End 
Sub 
 
Un comentario se 
inicia con el carácter 
apóstrofe ( „ ) 
 
 
 
Creación y uso de procedimientos 
En las aplicaciones tradicionales o procedurales, es la aplicación quien controla que 
porciones de código se ejecuta, y la secuencia en que este se ejecuta. La ejecución de la 
aplicación se inicia con la primera línea de código, y sigue una ruta predefinida a través 
de la aplicación, llamando procedimientos según sea necesario. 
 
 
Procedimientos 
 
Existen dos tipos de procedimientos con los que se trabaja en Visual Basic: los 
procedimientos de evento y los procedimientos generales. 
 
 
 
Procedimientos de Evento 
 
Visual Basic invoca automáticamente procedimientos de evento en respuesta a 
acciones del teclado, del ratón o del sistema. Cada control tiene un conjunto fijo 
de procedimientos de evento. Los procedimientos de evento para cada control 
son mostrados en un cuadro de lista despegable en la ventana de código. 
 
 
 
 
SENATI-Computación e Informática 175 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 
 
 
 
 
 
 
 
El código que se escriba en el 
procedimiento de evento Click es 
ejecutado cuando el usuario haga 
clic en un botón de comando. 
 
 
 
Procedimientos Generales 
 
Son procedimientos Sub o Function que son creados para que lleven a cabo tareas 
específicas. 
 
Para crearlos hacer clic en el menú Insertar, Procedimiento. 
 
Si se tiene código duplicado en varios procedimientos de evento, se puede 
colocar el código en un procedimiento general y luego invocar al procedimiento 
general desde los procedimientos de evento. 
 
 
 
 
 
Procedimientos Sub 
 
Los procedimientos Sub no retornan valores. Por ejemplo: 
Public Sub Seleccionar(Cuadro As TextBox) 
Cuadro.SelStart = 0 
Cuadro.SelLength = Len(Cuadro.Text)End Sub 
 
Los procedimientos Sub son invocados especificando sólo el nombre del 
procedimiento, o empleando la instrucción Call con el nombre del procedimiento. 
Por ejemplo: 
 
Call Seleccionar(Text1) 
 
Si se emplea la instrucción Call, se debe encerrar la lista de argumentos entre 
paréntesis. Si se omite Call, también se deben omitir los paréntesis alrededor de 
la lista de argumentos. 
 
 
 
 
176 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Procedimientos Function 
 
Los procedimientos Function devuelven valores. En el siguiente ejemplo, el 
procedimiento Function recibe un número y devuelve ese número al cuadrado. 
 
Public Function Cuadrado(N As Integer) As Integer 
 
Cuadrado = N * N 
 
End Function 
 
Si se desea guardar el valor devuelto, se debe usar paréntesis cuando se invoque a 
la función, como se muestra a continuación: 
 
Resultado = Cuadrado (5) 
 
Si se omiten los paréntesis, se puede ignorar el valor devuelto y no guardarlo en 
una variable. Esto puede ser útil si se quiere ejecutar una función y no se desea el 
valor devuelto. Por ejemplo: 
 
 
Ámbito de las variables. 
 
Denominamos ámbito de una variable a las partes del programa donde esa 
variable está declarada. Para entenderlo mejor, veamos someramente la forma de 
un programa desarrollado en VB. 
 
A estas partes las habíamos llamado Procedimientos. Podemos tener 
procedimientos que no estén relacionados con ningún evento ocurrido al 
formulario o a sus controles. (Los Procedimientos que iremos insertando a lo 
largo de la aplicación). 
 
Aquí puede insertar proc. y funciones del módulo. 
Si se declara una variable dentro de un procedimiento o 
Función, esa variable tiene como ámbito el Procedimiento 
o Función donde se declaró. 
 
 
 
En un Formulario, una variable puede declararse de dos formas: 
Privada o Pública. 
 
Variable Privada tiene como ámbito sólo el proc. y función donde 
fue declarada 
 
Variable Pública tiene como ámbito todos los proc. y funciones 
del formulario y sus controles. 
 
Variable a nivel de formulario debe declararse en la sección de 
declaraciones, que está la ventana de código Objeto = General, 
Proc. = Declaraciones. Tiene como ámbito todo el formulario 
 
En un Módulo una variable puede declararse como Privada, con 
lo que no saldrá de ese Módulo, o Pública, pudiendo en este caso 
usarse en todo el programa 
 
 
 
 
No es recomendable declarar variables con el mismo nombre. 
 
 
 
SENATI-Computación e Informática 177 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Formas de declaración de variables en un proyecto VB. 
 
Sentencia Dim 
 
Es la forma más común de declarar una variable como Privada. Puede emplearse 
en un Procedimiento, Función, Formulario o Módulo. La sintaxis es de la 
siguiente forma: 
 
Dim nombrevariable As Integer 
 
 
Sentencia PRIVATE 
Su ámbito depende donde la declaro. 
Cada vez que entremos al formulario, 
procedimiento o módulo, esa variable tomará el 
valor cero (si es numérica) o nulo (si es string). 
 
Es la forma de declarar una variable como Privada. Puede emplearse solamente 
en la sección de declaraciones de un Formulario o Módulo. La sintaxis es de la 
siguiente forma: 
 
Private nombrevariable As Tipovariable 
 
 
La sentencia Private no puede usarse en un 
procedimiento o función. 
La variable NO puede utilizarse fuera 
del Formulario o Módulo donde se 
declaró. 
 
 
 
Sentencia PUBLIC 
 
Puede emplearse solamente en la sección de declaraciones de un Formulario o 
Módulo. La sintaxis es de la siguiente forma: 
 
Public nombrevariable As Tipovariable 
 
Para nombrarla, si estamos en el Formulario 
donde se declaró basta con citarla por su 
nombre. Si no estamos en ese Formulario, 
Si se declara de esta forma en la 
sección de declaraciones de un 
Formulario, esa variable puede usarse 
en toda el programa. 
habrá que citarla por el nombre del Formulario, seguido del nombre de la 
variable, separado por un punto: 
 
NombreFormulario.Nombrevariable 
 
 
Sentencia GLOBAL 
 
Una variable declarada como Global es reconocida en cualquiera de los 
formularios y módulos del proyecto. La sintaxis es: 
 
Global nombrevariable As tipovariable 
 
 
Sentencia STATIC 
 
La sentencia Global sólo puede usarse 
en el apartado de declaraciones de un 
Módulo. 
 
Variable estática permite retener el valor de la variable cuando se vuelve a 
invocar el proc. o función. Esta declaración como estática se realiza mediante la 
instrucción Static 
 
Static nombrevariable As tipovariable Sólo ̀ puede declararlo dentro 
de un procedimiento o función. 
 
 
 
 
 
178 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Pese a que Visual Basic no obliga a declarar variables, es muy útil hacerlo. De 
esta forma se tiene control sobre el programa. La experiencia se lo irá 
demostrando. 
 
 
 
Resumen de declaración de variables 
 
 
Procedimiento 
 
La variable no puede usarse 
fuera de esta Procedimiento 
 
Dim Variable As 
Tipovariable 
 
Procedimiento, como 
permanente 
 
La variable no puede usarse 
fuera de este procedimiento, y 
dentro de él conserva el valor 
aunque se salga y se vuelva a 
entrar 
 
Static Variable As 
Tipovariable 
 
Formulario 
 
En su sección de 
declaraciones, como 
Privada 
 
Solamente se puede usar en 
ese Formulario 
 
Dim Variable As 
Tipovariable 
 
Private Variable As 
Tipovariable 
 
Formulario 
 
En su sección de 
declaraciones, como 
Pública 
 
Puede usarse en toda la 
aplicación 
 
Public Variable As 
Tipovariable 
 
Módulo 
 
Como Privada 
 
Solamente puede usarse en 
ese Módulo 
 
Dim Variable As 
Tipovariable 
 
Private Variable As 
Tipovariable 
 
Módulo 
 
Como Pública 
 
Puede usarse en toda la 
aplicación 
 
Public Variable As 
Tipovariable 
 
Global Variable As 
Tipovariable 
 
 
 
Forma de conocer el tipo de una variable. Función TypeName 
 
Podemos conocer el tipo con el que se ha declarado una variable. Esto se hace 
mediante la Función TypeName, que devuelve una cadena con el tipo de una 
variable. 
 
MiTipo = TypeName(NombreVariable) 
 
 
NombreVariable puede ser cualquier variable con excepción de las de tipos 
definidos por el usuario. 
 
 
 
SENATI-Computación e Informática 179 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
La cadena de caracteres devuelta por TypeName puede ser una de las siguientes: 
 
 
 
Cadena devuelta La variable contiene 
Byte Un byte 
Entero Un entero. 
Largo Un entero largo. 
Simple Un número de punto flotante de precisión simple. 
Doble Un número de punto flotante de precisión doble. 
Moneda Un valor de moneda. 
Fecha Una fecha. 
Cadena Una cadena. 
Boolean Un valor Boolean. 
Error Un valor de error. 
Empty No inicializado. 
Null No hay datos válidos. 
Objeto Un objeto que no respalda Automatización OLE. 
Desconocido Un objeto de Automatización OLE cuyo tipo es 
 desconocido. 
Nada Una variable de objeto que no se refiere a un objeto. 
 
 
 
Si NombreVariable es una matriz, la cadena devuelta puede ser cualquiera de las 
cadenas posibles con un paréntesis vacío adherido. Por ejemplo, si 
NombreVariable es una matriz de enteros, TypeName devolverá "Integer()". 
 
 
Objetos propiedades, métodos y eventos 
 
 
Control Etiqueta (Label) 
 
Se utiliza para mostrar texto que el usuario no puede modificar. 
Generalmente para identificar otros controles en el formulario o para mostrarinstrucciones al usuario. 
 
Propiedades 
 
Name Nombre del control. 
 
AutoSize True/False. Determina si el tamaño del control se ajusta 
automáticamente al texto que contiene. 
 
Caption Texto que muestra el control. 
 
Font Establece la fuente, estilo y tamaño para el texto del control. 
 
 
 
180 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Control Cuadro de Texto (Textbox) 
 
Se utiliza para que el usuario le proporcione datos a la aplicación o 
para que la aplicación le devuelva la información al usuario. El texto que se 
muestra en el control puede ser cambiado por el usuario. 
 
 
 
Propiedades 
 
Enabled True/False. Establece un valor que determina si el control 
puede responder a eventos generados por el usuario. 
Font Establece la fuentes, estilo y tamaño para el texto del control. 
Locked True/False. Determina si es posible modificar el texto en el 
control. 
 
MaxLength Establece la longitud máxima permitida para el texto en el 
control. 
 
MultiLine Establece si el control puede aceptar múltiples líneas de texto. 
Name Nombre del control. 
PasswordChar Carácter utilizado para ocultar el texto que realmente contiene 
el control. 
 
Text Texto que realmente contiene y muestra el control. 
Visible Establece si el control será visible para el usuario. 
 
 
Eventos 
 
Change Ocurre cuando cambia el texto que contiene el control. 
 
KeyDown Ocurre cuando el usuario presiona una tecla mientras el 
control tiene el enfoque. 
 
 
Control Botón de Comando (Commandbutton) 
 
Permite que la aplicación inicie, interrumpa o termine un proceso. 
 
 
 
Propiedades 
 
Caption Establece el texto que muestra el botón. 
 
Font Establece la fuente, estilo y tamaño para el texto del control. 
Name Nombre del botón. 
Visible True/False. Establece si el botón será visible para el usuario. 
 
 
 
Eventos 
 
Click Ocurre cuando se hace clic sobre el botón. 
 
 
 
SENATI-Computación e Informática 181 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Estableciendo Propiedades 
 
Al diseñar la interface de usuario de una aplicación Visual Basic, se deben 
establecer la propiedades para los controles (objetos) creados. 
 
 
 
Estableciendo Propiedades en Tiempo de Diseño 
 
Algunas propiedades pueden ser establecidas en tiempo de diseño. 
 
Para establecer estas propiedades se emplea la ventana de propiedades. 
 
Si selecciona varios objetos a la vez y accede a la ventana de propiedades, sólo se 
mostrarán las propiedades que son 
 
comunes para todos los controles seleccionados. Cualquier cambio que se haga a 
una propiedad será aplicada a todos los controles. 
 
 
Para acceder a la ventana de 
propiedades, oprima en botón 
secundario del ratón sobre un 
objeto, y luego haga clic en 
Propiedades. 
También se puede obtener el 
mismo resultado seleccionado el 
objeto y luego presionando F4 
 
 
 
 
Estableciendo Propiedades en Tiempo de Ejecución 
 
En tiempo de ejecución, se puede escribir código para establecer u obtener el 
valor de una propiedad. 
 
 
txtData.Font.Bold = True 
La siguiente línea de código establece a negrita la 
fuente de un cuadro de texto llamado txtData. 
 
 
Este código establece la propiedad Text del cuadro de texto txtData 
 
 
 
txtData.Text = "Hola mundo" Establece el valor del texto 
 
 
 
Si se omite el nombre de la propiedad, se establece la propiedad predeterminada 
del control. La propiedad predeterminada de un cuadro de texto es la propiedad 
Text. La propiedad predeterminada de una etiqueta es la propiedad Caption. Las 
siguientes líneas de código establecen las propiedades predeterminadas text y 
caption de un cuadro de texto y de una etiqueta. 
 
 
txtData = “Pedro” 
 
lblData = "Nombre” 
Se establece la propiedad Text del cuadro de texto 
 
Se establece la propiedad Caption de la etiqueta 
 
 
 
182 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Obteniendo Propiedades en Tiempo de Ejecución 
 
Puede emplear el siguiente código para obtener el valor de una propiedad en 
tiempo de ejecución. 
 
 
 
Dim sNombre as String 
 
sNombre = txtName.Text 
Asigna a la variable sNombre el valor del cuadro de texto 
txtName 
 
 
 
 
 
Definición de variables, tipos de datos y constantes 
Una variable es un lugar de memoria en la memoria del computado. 
 
Es un nombre que en el programa le asignamos a un dato. 
Ese dato podrá cambiar. 
 
Piense por ejemplo, en un programa 
consistente en la toma de datos de los 
 
 
 
 
 
Variable 
alumnos de un centro escolar. Existirán varias 
variables para poder introducir los datos de los 
Valor de la variable 
alumnos. Estas variables pueden tener nombre tales como: 
 
Nombre, Apellido_Paterno, Apellido_Materno, Direccion, Telefono, 
 
La variable Nombre tomará valores distintos según vayamos introduciendo los 
datos de los distintos alumnos. Es posible, que a lo largo de la ejecución del 
programa, esta variable Nombre contenga los datos: 
 
 
Option Explicit 
 
Obliga a declarar previamente las variables que se vayan a usar. 
 
Esta declaración debe ponerla al comienzo de la sección de declaraciones de cada 
formulario y módulo que contenga su aplicación. 
 
 
 
Tipos de Variables 
 
Las variables pueden ser de los siguientes tipos: (El número indicado en segundo 
lugar indica el número de Bytes que ocupa en memoria.) 
 
 
VARIABLE 
 
ESPACIO 
QUE 
OCUPA 
 
DETALLES 
 
Booleana 
 
2 Bytes 
 
Admite los valores 0 y 1, o True (verdadero) y 
False (falso) 
 
Byte 
 
1 Bytes 
 
Números enteros, en el rango de 0 a 255 
 
 
 
 
SENATI-Computación e Informática 183 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 
Integer 
 
2 Bytes 
 
Números enteros en el rango de -32768 a 32767 
 
Long 
 
4 Bytes 
 
Números enteros en el rango de -2147483648 a 
2147483647 
 
Single 
 
4 Bytes 
 
Punto flotante, simple precisión 
 
Doble 
 
8 Bytes 
 
Punto flotante, doble precisión. 
 
Currency 
 
Entero, 
con punto 
decimal 
fijo 
(Típico de 
monedas) 
 
 
String 
 
* Cadenas alfanuméricas de longitud variable o fija. 
Una variable tipo String ocupa el mismo número 
de bytes que caracteres tenga la cadena. 
 
Date 
 
8 Bytes 
 
Fechas 
 
Objet 
 
4 Bytes 
 
Referencia a objetos 
 
Variant 
 
* 
 
Otros tipos de datos. 
 
Una variable tipo Variant ocupa 16 bytes si se 
trata de un número y 22 bytes + longitud de la 
cadena si se trata de un dato tipo cadena de 
caracteres. 
 
Los bytes necesarios para almacenar esa variable dependerán de los datos que se 
hayan definido. 
 
 
 
NOTA. Observe en la lista anterior que un dato Booleano ocupa 2 Bytes, 
mientras que un dato tipo Byte ocupa un byte. En muchas ocasiones declaramos 
variables tipo Boolean con la intención de que ocupen menos espacio. 
 
 
 
Declaración de variables 
 
Para declarar una variable se utiliza la sentencia Dim. 
Sintaxis: Dim nombre_variable As Tipo_variable 
 
 
Tipos de variables 
 
A continuación se describen los tipos de variable. 
 
 
 
 
184 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
a. Variables Alfanuméricas 
 
Es toda información que va a contener texto o la unión de textos y números; 
información que no representa cálculos matemáticos. 
Ejemplo: 
Nombre de una persona Dim nombres As String 
Apellido Paterno de una persona Dim apel_pat As String 
Dirección de una persona Dim direccion As String 
 
 
Definiendo la cantidad de caracteres que aceptará la variableDim nombres1 As String 
 
Dim nombres2 As String *15 
nombres1 puede tener cualquier número de caracteres. 
 
nombres2 puede tener un máximo de 15 caracteres. 
 
 
 
En el caso del DNI, código postal, No. De calle, piso del edificio, etc. Es 
recomendable declararlo como cadena. Para ahorrar memoria. 
 
 
 
b. Variable Numéricas 
 
¿Qué variables debemos declarar entonces como numéricas ? La respuesta es 
bien sencilla: Aquellas que van a contener datos con lo que vamos a realizar 
operaciones matemáticas. 
 
Ejemplo: 
 
Edad de una persona Dim nombres As Byte 
Nota de un curso Dim nota1 As Byte 
Sueldo Básico Dim basico As Single 
Bonificaciones Dim boni1 As Single 
 
 
Las variables booleanas (True/False) pueden en muchos casos sustituirse por una 
variable del tipo Byte. Si ese datos True / False se va a introducir en una base de 
datos o en fichero en el disco, puede ser más prudente poner 0 en vez de False y 1 
en vez de True. 
 
Una variable byte ocupa muy poco, simplemente 1 byte como su nombre indica. 
Pero no puede contener números mayores de 255 ni números negativos. 
 
Cada vez que declare una variable numérica piense en los valores que puede 
tener, sobre todo cuando esa variable va a ser el resultado de una operación 
matemática. Recuerde el escaso margen de una variable tipo Integer ( de -32768 
a 32767) 
 
Si la aplicación va a tratar moneda, piense en la forma de expresar los números 
decimales y el número de ellos permitidos, así como el redondeo. 
 
 
 
SENATI-Computación e Informática 185 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
La variable correcta para este caso es Currency, pero Currency le añade 
automáticamente el tipo de moneda de cada país lo que con frecuencia es un 
engorro. Los datos del tipo de moneda los toma del sistema operativo del 
ordenador, por lo que no se extrañe si le expresa el número en dólares. Cambie el 
país en su Sistema Operativo Windows. 
 
 
c. Variable Date 
 
Otro tipo de variable es Date. Este tipo de variable representa una fecha. 
Ejemplo: 
Fecha de nacimiento de una persona Dim fnac As Date 
 
 
 
d. Variable Boolean 
 
Este tipo de variable representa dos valores TRUE (verdadero) o FLASE (falso). 
Ejemplo: 
Sexo Dim sexo As Boolean 
 
 
Error típico de un programador novel 
 
Creo que esta costumbre viene del lenguaje C. Pero no vale en VB. Se trata de 
declarar varias variables juntas en una misma línea: 
 
 
Dim Variable1, Variable2, Variable3, Variable4 As String 
 
 
 
Esta declaración está MAL hecha. Visual Basic interpretará que Variable1, 
Variable2 y Variable3 son del tipo Variant, y solamente Variable4 la supone 
como tipo String 
 
La forma correcta de hacerlo, si queremos declarar esas variables un una sola 
línea, es la siguiente : 
 
Dim Variable1 As String, Variable2 As String, Variable3 As String, Variable4 
As String. 
 
 
 
Constantes 
 
Una constante es un nombre significativo que sustituye a un número o una 
cadena que no varía. Hay dos orígenes para las constantes: 
 
 Constantes intrínsecas o definidas por el sistema proporcionadas por 
Visual Basic. 
 
 Las constantes simbólicas o definidas por el usuario se declaran mediante 
la instrucción Const. 
 
 
 
 
186 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
La sintaxis para declarar una constante es la siguiente: 
 
[Public|Private] Const nombre_constante [As tipo] = expresión 
 
 
El argumento nombre_constante es un nombre simbólico válido (las reglas son 
las mismas que para crear nombres de variable) y expresión está compuesta por 
constantes y operadores de cadena o numéricos; sin embargo, no puede utilizar 
llamadas a funciones en expresión. Una instrucción Const puede representar una 
cantidad matemática o de fecha y hora: 
 
 
 
Const conPi = 3.14159265358979 
 
Public Const conMaxPlanetas As Integer = 9 
 
Const conFechaSalida = #1/1/95# 
 
 
Se puede utilizar también la instrucción Const para definir constantes de cadena: 
 
Public Const conVersion = “ 07.10.A” 
Const conNombreClave = “Enigma” 
 
 
Puede colocar más de una declaración de constante en una única línea si las 
separa con comas: 
 
Public Const conPi=3.14, conMaxPlanetas=9, conPobMundial=6E+09 
 
 
Operadores 
 
a. Aritméticos 
 
^ Exponenciación 
 
* Multiplicación 
 
/ División 
 
\ División entera 
 
Mod Residuo entero (Ejm: A Mod B) 
 
+ Suma 
 
- Resta 
 
& Concatenación de cadenas 
 
 
 
b. Comparación 
 
= Igual 
 
<> Distinto 
 
< Menor que 
 
 
 
SENATI-Computación e Informática 187 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
<= Menor o igual 
 
>= Mayor o igual 
 
Like Compara dos cadenas 
 
* Cero o más caracteres (Ejm: cad Like “ma*”) 
 
? Cualquier carácter 
 
# Cualquier dígito (0-9) 
 
 
 
c. Lógicos 
 
And “Y” lógico 
 
Or “O” lógico 
 
Xor “O” Exclusivo 
 
Not Negación 
 
 
 
Construcciones: If – then, Select Case 
Las estructuras condicionales le permiten controlar el flujo de ejecución del programa. 
A continuación se describen las estructuras de control 
 
 
 
Condicional simple. If .. then 
 
Use la estructura If...Then para ejecutar una o más instrucciones basadas en una 
condición. Puede utilizar la sintaxis de una línea o un bloque de varias líneas: 
 
 
 If condición Then Sentencias 
 
 
 If condición Then 
 
Sentencias 
 
End If 
 
 
Donde: 
 
Condición. Es una expresión lógica, que devuelve un valor lógico: Verdadero o 
falso. Ejemplo: 
 
 
If cualquierFecha < Now Then CualquierFecha = Now 
 
o 
 
If then en una sola línea, 
sólo puede ejecutar una 
línea de código 
 
If cualquierFecha < Now Then 
 
CualquierFecha = Now 
 
 
De este otro modo se pueden ejecutar varias líneas de 
código 
End If 
 
 
 
188 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Condicional doble If...Then...Else 
 
Utilice un bloque If...The...Else para definir varios bloques de sentencias, uno de 
los cuales se ejecutará: 
 
If condición1 Then 
 
[bloque de sentencias 1] 
 
[ElseIf condición2 Then 
Se evalúa esta condición si es verdadera se ejecuta el 
bloque de sentencias 1 
 
 
[Else 
 
[bloque de sentencias 2]] ... 
 
Si es falsa la condición1, evalúa la condición2, si es 
verdadera ejecuta el bloque de sentencias 2 
 
 
End If 
 
[bloque de sentencias n]] 
 
Si no se cumple ninguna condición se ejecuta el bloque 
de sentencias n 
 
 
 
Por ejemplo, la aplicación podría realizar distintas acciones dependiendo del 
control en que se haya hecho clic de una matriz de controles de menú: 
 
 
Private Sub mnuCut_Click (Index As Integer) 
 
If Index = 0 Then „ Comando Cortar 
 
CopyActiveControl „ Llama a procedimientos generales 
 
ClearActiveControl 
 
ElseIf Index = 1 Then „ Comando Copiar 
 
CopyActiveControl 
 
ElseIf Index = 2 Then „ Comando Borrar 
 
ClearActiveControl 
 
Else „ Comando Pegar 
 
PasteActiveControl 
 
End If 
 
End Sub 
 
o 
 
If ClaveUsuario=”DSI” Then 
 
„ Permite al usuario entrar al sistema 
 
... 
 
... 
 
Else 
 
„ Mostrar un mensaje advirtiendo error en la clave 
 
... 
 
... 
 
End If 
 
 
 
 
SENATI-Computación e Informática 189 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
o 
 
Private Sub DeterminaCondición ( ) 
 
If Val (txtPromedio) >=13 Then 
txtCondición = “Aprobado” 
ElseIf Val (txtPromedio) >= 10 Then 
 
txtCondición = “Asistente” 
 
Else 
 
 
txtCondición = “Desaprobado” 
 
End If 
 
End Sub 
 
 
Observe que siempre puede agregar más cláusulas ElseIf a la estructura If...Then. 
Sinembargo, esta sintaxis puede resultar tediosa de escribir cuando cada ElseIf 
compara la misma expresión con un valor distinto. Para estas situaciones, puede 
utilizar la estructura de decisión Select Case. 
 
 
 
Condicional múltiple Select Case 
 
Visual Basic proporciona la estructura Select Case para ejecutar selectivamente 
un bloque de sentencias entre varios bloques. 
 
La estructura Select Case funciona con una única expresión de prueba que se 
evalúa una vez solamente, al principio de la estructura. Visual Basic compara el 
resultado de esta expresión con los valores de cada Case de la estructura. Si hay 
una coincidencia, ejecuta el bloque de sentencias asociado a ese Case: 
 
 
Selec Case expresión_prueba 
 
[Case lista_expresiones1 
 
[bloque de sentencias 1]] 
 
[Case lista_expresiones2 
 
[bloque de sentencias 2]] 
 
. 
 
. 
 
. 
 
[Case Else 
 
[bloque de sentencias n]] 
 
End Select 
Cada lista_expresiones es una lista de uno a 
más valores. 
 
Si hay más de un valor en una lista, se 
separan los valores con comas. 
 
Cada bloque de sentencias contiene cero o 
más instrucciones. 
 
Si más de un Case coincide con la expresión 
de prueba, sólo se ejecutará el bloque de 
instrucciones asociado con la primera 
coincidencia. 
 
Visual Basic ejecuta las instrucciones de la 
cláusula (opcional) Case Else si ningún valor 
de la lista de expresiones coincide con la 
expresión de prueba. 
 
 
 
Por ejemplo, suponga que agrega otro comando al menú Edición en el ejemplo 
If...Then...Else. Podría agregar otra cláusula ElseIf o podría escribir la función 
con Select Case: 
 
 
 
190 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Private Sub mnuCut_Click (Index As Integer) 
 
Select Case Index 
 
Case 0 „ Comando Cortar 
 
CopyActiveControl „Llama a procedimientos generales 
 
ClearActiveControl 
 
Case 1 „ Comando copiar. 
 
CopyActiveControl 
 
Case 2 „ Comando borrar. 
 
ClearActiveControl 
 
Case 3 „ Comando Pegar. 
 
PasteActiveControl 
 
Case Else 
 
frmFind.Show „ Muestra el cuadro de diálogo Buscar. 
End Select 
End Sub 
 
o 
 
Select Case TipoUsuario 
 
Case “Supervisor” 
 
„ Proporciona al usuario privilegios de Supervisor 
 
... 
 
... 
 
Case “Usuario” 
 
„ Proporciona al usuario privilegios de Usuario 
 
... 
 
... 
Case Else 
„ Proporciona al usuario privilegio de invitado 
 
... 
 
... 
 
End Select 
 
 
Observe que la estructura Select Case evalúa una expresión cada vez que al 
principio de la estructura. Por el contrario, la estructura If...Then...Else puede 
evaluar una expresión diferente en cada sentencia ElseIf. Sólo puede sustituir una 
esructura If...Then...Else con una estructura Select Case si la intrucción If y cada 
instrucción ElseIf evalúa la misma expresión. 
 
 
 
 
 
SENATI-Computación e Informática 191 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Otros Ejemplos 
 
 
If Ventas > 100000 Then 
 
strDscto = Format (0.10, “Fixed”) 
 
ElseIf Ventas > 50000 Then 
 
strDscto = Format (0.05, “Fixed”) 
 
Else 
 
 
strDscto = Format (0.02, “Fixed”) 
 
End If 
 
 
Select Case Cantidad 
 
Case 1 
 
sngDscto = 0.0 
 
Case 2, 3 
 
sngDscto = 0.05 
 
Case 4 To 6 
 
sngDscto = 0.10 
 
Case Else 
 
sngDscto = 0.20 
 
End Select 
 
 
intRpta = MsgBox (“Guarda cambios antes de salir” , vbYesNo) 
 
Select Case intRpta 
 
Case vbYes 
GuardarCambios 
Unload Me 
Case vbNo 
 
Unload Me 
 
End Select 
 
 
Bucles For … Next, While .. Do 
Las estructuras de repetición o bucle le permiten ejecutar una o más líneas de 
código repetidamente. Las estructuras de repetición que acepta Visual Basic son: 
 
 Do...Loop 
 
 For...Next 
 
 For Each...Next 
 
 
 
192 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Do...Loop 
 
Utilice el bucle Do para ejecutar un bloque de sentencias un número indefinido 
de veces. Hay algunas variantes en la sentencia Do...Loop, pero cada una evalúa 
una condición numérica para determinar si continúa la ejecución. Como ocurre 
con If...Then, la condición debe ser un valor o una expresión que dé como 
resultado False (cero) o True (distinto de cero). 
 
 
Do While condición 
 
Sentencias 
 
Loop 
Cuando se ejecuta este bucle Do, primero evalúa condición. Si 
condición es False (cero), se salta todas las sentencias. Si es True 
(distinto de cero) Visual Basic ejecuta las sentencias, vuelve a la 
instrucción Do While y prueba la condición de nuevo. 
 
 
Por tanto, el bucle se puede ejecutar cualquier número de veces, siempre y 
cuando condición sea distinta de cero o True. Nunca se ejecutan las sentencias si 
condición es False inicialmente. Por ejemplo, este procedimiento cuenta las veces 
que se repite una cadena destino dentro de otra cadena repitiendo el bucle tantas 
veces como se encuentre la cadena de destino: 
 
 
Function ContarCadenas (cadenalarga, destino) 
 
Dim posición, contador 
posición = 1 
Do While InStr (posición, cadenalarga, destino) 
 
posición = InStr (posición, cadenalarga, destino)+1 
 
contador = contador + 1 
 
Loop 
 
ContarCadenas = contador 
 
End Function 
 
 
Si la cadena destino no está en la otra cadena, InStr devuelve 0 y no se ejecuta el 
bucle. 
 
Otra variante de la instrucción Do...Loop 
 
Do 
 
Sentencias 
 
Loop While condición 
 
Se ejecuta las sentencias primero y prueba la condición después de 
cada ejecución. Esta variación garantiza al menos una ejecución 
de sentencias: 
 
 
Hay otras dos variantes análogas a las dos anteriores, excepto en que repiten el 
bucle siempre y cuando condición sea False en vez de True. 
 
Hace el bucle cero o más veces Hace el bucle al menos una vez 
 
Do Until condición Do 
 
Sentencias Sentencias 
 
Loop Loop Until condición 
 
 
 
SENATI-Computación e Informática 193 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
For...Next 
 
Utiliza una variable llamada contador que incrementa o reduce su valor en cada 
repetición del bucle. La sintaxis es la siguiente: 
 
 
 
For contador = iniciar To finalizar [Step incremento] 
Los argumentos contador, 
iniciar, finalizar e incremento 
son todos numéricos. 
 
Sentencias 
 
Next [contador] 
 
El argumento incremento puede ser positivo 
o negativo. Si incremento es positivo, iniciar 
debe ser menor o igual que finalizar o no se 
ejecutarán las sentencias del bucle. 
 
 
Si incremento es negativo, iniciar debe ser mayor o igual que finalizar para que se ejecute el 
cuerpo del bucle. Si no se establece Step, el valor predeterminado de incremento es 1. 
 
 
 
 
Al ejecutar el bucle For, Visual Basic: 
 
1. Establece contador al mismo valor que iniciar. 
 
2. Comprueba si contador es mayor que finalizar. Si lo es, Visual Basic 
sale del bucle. (Si incremento es negativo, Visual Basic comprueba si 
contador es menor que finalizar.) 
 
3. Ejecuta las sentencias. 
 
4. Incrementa contador en 1 o en incremento, si se especificó. 
 
5. Repite los pasos 2 a 4. 
 
 
 
Este código imprime los nombres de todas las fuentes de pantalla disponibles: 
 
 
 
Private Sub Form-Click ( ) 
 
Dim I As Integer 
 
For i = 0 To Screen.FontCount 
 
Print Screen.Fonts (i) 
Next 
End Sub 
 
 
For Each...Next 
 
El bucle For Each...Next es similar al bucle For...Next, pero repite un grupo de 
sentencia por cada elemento de una colección de objetos o de una matriz en vez 
de repetir las sentencias un número especificado de veces. 
 
Esto resulta especialmente útil si no se sabe cuántos elementos hay en la 
colección. He aquí la sintaxis del bucle For Each...Next: 
 
 
 
 
194 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBAFor Each elemento In grupo 
 
Sentencias 
 
Next elemento 
 
 
El siguiente ejemplo habilita todos los 
Cuadro de Texto del formulario: 
 
 
 
Private Sub ModoEdición ( ) 
 
Dim control 
 
For Each control In form1.Controls 
 
If TypeOf control Is TextBox Then 
 
Control.Enabled = True 
 
End If 
Next control 
End Sub 
Tenga en cuenta las restricciones siguientes 
cuando utilice For Each...Next: 
 
 Para las colecciones, elemento sólo puede 
ser una variable Variant, una variable 
Object genérica o un objeto mostrado en el 
Examinador de objetos. 
 Para las matrices, elemento sólo puede ser 
una variable Variant. 
 No puede utilizar For Each...Next con una 
matriz de tipos definidos por el usuario 
porque un Variant no puede contener un 
tipo definido por el usuario. 
 
 
Salida de una Estructura de Control 
 
La instrucción Exit le permite salir directamente de un bucle For o de un bucle 
Do. La sintaxis de la sentencia Exit es sencilla: Exit For puede aparecer tantas 
veces como sea necesario dentro de un bucle For y Exit Do puede aparecer 
tantas veces como sea necesario dentro de un bucle Do: 
 
For contador = iniciar To finalizar [Step incremento] 
[bloque sentencias] 
[Exit For] 
[bloque sentencias] 
Next [contador] 
 
 
Do [{While / Until} condición] 
[bloque de sentencias] 
[Exit Do] 
[bloque de sentencias] 
Loop 
 
 
Do 
[bloque de sentencias] 
[Exit Do] 
[bloque de sentencias] 
Loop [{While / Until} condición] 
Exit For y Exit Do 
 
Son muy útiles ya que, algunas veces, resulta 
apropiado salir inmediatamente de un bucle sin 
realizar más iteraciones o sentencias dentro del 
bucle. 
 
Cuando utilice la instrucción Exit para salir de 
un bucle, el valor de la variable contador 
difiere, dependiendo de cómo haya salido del 
bucle: 
 
 Cuando termina un bucle, la variable 
contador contiene el valor del límite 
superior más el paso. 
 
 Cuando sale de un bucle prematuramente, 
la variable contador conserva su valor 
según las reglas usuales del alcance. 
 
 Cuando sale antes del final de una 
colección, la variable contador contiene 
Nothing si se trata de un tipo de dato 
Object y Empty si es un tipo de dato 
Variant. 
 
 
SENATI-Computación e Informática 195 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Trabajar con rangos de celda 
Utilizando la notación A1 
 
Puede hacer referencia a una celda o rango de celdas del estilo de referencia A1 
utilizando el método Range. 
 
La siguiente subrutina cambia el formato de las celdas A1:D5 a negrita. 
 
Sub FormatoRango() 
Workbooks("Libro1").Sheets("Hoja1").Range("A1:D5").Font.Bold = True End 
Sub 
 
 
La siguiente tabla muestra algunas referencias de estilo A1 utilizando el método 
Range. 
 
 
Referencia 
 
Significado 
 
Range("A1") 
 
Celda A1 
 
Range("A1:B5") 
 
Celdas de la A1 a la B5 
 
Range("C5:D9,G9:H16") 
 
Selección de varias 
áreas 
 
Range("A:A") 
 
Columna A 
 
Range("1:1") 
 
Fila 1 
 
Range("A:C") 
 
Columnas de la A a la C 
 
Range("1:5") 
 
Filas de la 1 a la 5 
 
Range("1:1,3:3,8:8") 
 
Filas 1, 3 y 8 
 
Range("A:A,C:C,F:F") 
 
Columnas A, C y F 
 
 
 
Hacer referencia a celdas utilizando números de índice 
 
Esta propiedad devuelve un objeto Range que representa una sola celda. 
 
En el siguiente ejemplo, Cells(6,1) devuelve la celda A6 de la hoja Hoja1. 
Entonces, la propiedad Value se establece en 10. 
 
Sub IngreseValor() 
 
Worksheets("Hoja1").Cells(6, 1).Value = 10 
 
End Sub 
 
 
 
 
 
196 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
La propiedad Cells funciona bien para ejecutar bucles en un rango de celdas, ya 
que puede sustituir las variables por los números de índice, como se muestra en el 
siguiente ejemplo. 
 
Sub CicloHojas() 
 
Dim Contador As Integer 
 
For Contador = 1 To 20 
 
Worksheets("Hoja1").Cells(Contador,3).Value = Contador 
 
Next Contador 
 
End Sub 
 
 
 
Hacer referencia a filas y columnas 
 
Estas propiedades devuelven un objeto Range que representa un rango de celdas. 
En el siguiente ejemplo, Rows(1) devuelve la fila uno de la hoja Hoja1. 
 
 
 
A continuación, la propiedad Bold del objeto Font del rango se establece en True. 
 
Sub FilasNegrita() 
Worksheets("Hoja1").Rows(1).Font.Bold = True 
End Sub 
 
 
La siguiente tabla muestra algunas referencias de fila y columna, utilizando las 
propiedades Rows y Columns. 
 
 
Referencia Significado 
 
Rows(1) Fila uno 
 
Rows Todas las filas de la hoja de cálculo 
 
Columns(1) Columna uno 
 
Columns("A") Columna uno 
 
Columns Todas las columnas de la hoja de cálculo 
 
Para trabajar con varias filas o columnas al mismo tiempo, cree una variable de 
objeto y utilice el método Union, combinando varias llamadas a la propiedad 
Rows o Columns. 
 
 
 
SENATI-Computación e Informática 197 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
El siguiente ejemplo cambia a negrita el formato de las filas uno, tres y cinco de 
la hoja de cálculo uno del libro activo. 
Sub FilasNegritaVarios() 
Worksheets("Hoja1").Activate Dim 
myUnion As Range 
Set myUnion = Union(Rows(1), Rows(3), Rows(5)) 
 
myUnion.Font.Bold = True 
 
End Sub 
 
Hacer referencia a celdas utilizando una notación abreviada 
 
Puede utilizar el estilo de referencia A1 o un rango con nombre entre paréntesis 
como método abreviado para la propiedad Range. 
 
No es necesario escribir la palabra "Range" o utilizar comillas, como se muestra 
en los siguientes ejemplos. 
 
Sub BorrarRango() 
Worksheets("Hoja1").[A1:B5].ClearContents 
End Sub 
Sub AsinarValor() 
 
[MyRange].Value = 30 
 
End Sub 
 
 
 
Hacer referencia a rangos con nombre 
 
Es más sencillo identificar los rangos por nombre que por la notación A1. Para 
asignar un nombre a un rango seleccionado, haga clic en el cuadro de nombre 
situado a la izquierda de la barra de fórmulas, escriba un nombre y, a 
continuación, presione la tecla ENTRAR. 
 
 
Hacer referencia a un rango con nombre 
 
El siguiente ejemplo hace referencia al rango denominado "MiRango" en el libro 
"Libro1.xls". 
 
Sub FormatoRango () 
Range("Libro1.xls!MiRango").Font.Italic = True 
End Sub 
 
 
 
 
 
198 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
El siguiente ejemplo hace referencia al rango de hojas de cálculo específico 
denominado "Hoja1!Ventas" en el libro "Libro1.xls". 
 
Sub FormatSales() 
 
Range("[Libro1.xls]Hoja1!Ventas").BorderAround Weight:=xlthin 
 
End Sub 
 
 
 
Para seleccionar un rango con nombre utilice el método GoTo, que activa el libro 
y la hoja de cálculo y, a continuación, selecciona el rango. 
 
Sub LimpiaRango() 
 
Application.Goto Reference:="Libro1.xls!MiRango" 
Selection.ClearContents 
End Sub 
 
 
El siguiente ejemplo muestra cómo se escribiría el mismo procedimiento para el 
libro activo. 
 
Sub LimpiarRango() 
 
Application.Goto Reference:="MiRango" 
Selection.ClearContents 
End Sub 
 
 
 
Ejecutar un bucle en las celdas de un rango con nombre 
 
El siguiente ejemplo ejecuta un bucle en cada una de las celdas de un rango con 
nombre utilizando un bucle For Each...Next. Si el valor de cualquiera de las 
celdas del rango supera el valor de limit, el color de la celda cambia a amarillo. 
 
 
 
Sub AplicarColor() 
 
Const Limit As Integer = 25 
 
For Each c In Range("MiRango") 
If c.Value > Limit Then 
c.Interior.ColorIndex = 27 
End If 
 
Next c 
 
End Sub 
 
 
 
 
 
SENATI-Computación e Informática 199 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Hacer referencia a celdas en relación con otras celdasUna manera de trabajar con una celda relacionada con otra es utilizar la 
propiedad Offset. 
 
El siguiente ejemplo asigna un formato de doble subrayado al contenido de la 
celda situada una fila más abajo y a tres columnas de la hoja de cálculo activa. 
 
Sub SubrayadoDoble() 
 
ActiveCell.Offset(1, 3).Font.Underline = xlDouble 
 
End Sub 
 
Nota. Puede grabar macros que utilicen la propiedad Offset en lugar en 
referencias absolutas. En el menú Herramientas elija Macro, haga clic en Grabar 
nueva macro, haga clic en Aceptar y, a continuación, en el botón Referencia 
relativa en la barra de herramientas de grabación de macros. 
 
Para ejecutar un bucle en un rango de celdas, utilice en el rango una variable con 
la propiedad Cells. El siguiente ejemplo rellena las primeras 20 celdas de la 
tercera columna con valores entre 5 y 100, en incrementos de 5. 
 
La variable contador se utiliza como índice de fila para la propiedad Cells. 
 
Sub HojasValores() 
 
Dim contador As Integer 
 
For contador = 1 To 20 
 
Worksheets("Hoja1").Cells(contador, 3).Value = contador * 5 
 
Next contador 
 
End Sub 
 
 
 
Hacer referencia a celdas usando un objeto Range 
 
Si establece una variable de objeto para un objeto Range, puede manipular 
fácilmente el rango utilizando el nombre de la variable. 
 
El siguiente procedimiento crea la variable de objeto myRange y, a continuación, 
asigna la variable al rango A1:D5 de la hoja Hoja1 del libro activo. Las 
instrucciones posteriores modifican las propiedades del rango, sustituyendo el 
nombre de la variable por el objeto del rango. 
 
Sub Aleatorio() 
 
Dim MiRango As Range 
 
Set MiRango = Worksheets("Hoja1").Range("A1:D5") 
MiRango.Formula = "=RAND()" 
MiRango.Font.Bold = True 
 
End Sub 
 
 
 
 
 
200 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Hacer referencia a todas las celdas de la hoja de cálculo 
 
Al aplicar la propiedad Cells a una hoja de cálculo sin especificar un número de 
índice, el método devuelve un objeto Range que representa todas las celdas de la 
hoja de cálculo. El siguiente procedimiento Sub borra el contenido de todas las 
celdas de la hoja Hoja1 del libro activo. 
 
Sub ClearSheet() 
Worksheets("Hoja1").Cells.ClearContents 
End Sub 
 
 
 
Hacer referencia a varios rangos 
 
Utilizando el método apropiado puede hacer referencia fácilmente a varios 
rangos. Utilice los métodos Range y Union para hacer referencia a cualquier 
grupo de rangos; utilice la propiedad Areas para hacer referencia al grupo de 
rangos seleccionados en una hoja de cálculo. 
 
 
 
Usar la propiedad Range 
 
Puede hacer referencia a varios rangos con la propiedad Range, pero debe poner 
comas entre dos o más referencias. 
 
El siguiente ejemplo borra el contenido de los tres rangos de la hoja Hoja1. 
Sub ClearRanges() 
Worksheets("Hoja1").Range("C5:D9,G9:H16,B14:D18"). _ 
ClearContents 
 
End Sub 
 
 
 
Los rangos con nombre permiten que la propiedad Range funcione más 
fácilmente con varios rangos. 
 
El siguiente ejemplo funciona cuando los tres rangos con nombre están en la 
misma hoja. 
 
Sub BorrarNombres() 
 
Range("MiRango, TLista, TValores").ClearContents 
 
End Sub 
 
 
 
Usar el método Union 
 
Puede combinar varios rangos en un objeto Range utilizando el método Union. 
 
El siguiente ejemplo crea un objeto Range denominado myMultipleRange, los 
define como A1:B2 y C3:D4 y, a continuación, asigna el formato de negrita a los 
rangos combinados. 
 
 
 
SENATI-Computación e Informática 201 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Sub MultiplesRangos() 
 
Dim r1, r2, MiMultiplesRangos As Range 
Set r1 = Sheets("Hoja1").Range("A1:B2") 
Set r2 = Sheets("Hojat1").Range("C3:D4") 
Set MiMultiplesRangos = Union(r1, r2) 
MiMultiplesRangos.Font.Bold = True 
End Sub 
 
 
 
Usar la propiedad Areas 
 
Puede utilizar la propiedad Areas para hacer referencia al rango o conjunto de 
rangos seleccionados en una selección de varias áreas. 
 
El siguiente procedimiento cuenta las áreas de la selección. Si existe más de un 
área, se muestra un mensaje de advertencia. 
 
Sub BusquedaMultiple() 
 
If Selection.Areas.Count > 1 Then 
 
MsgBox "Existe más de una area de selección…" 
 
End If 
 
End Sub 
 
 
 
Bucles en un rango de celdas 
 
Al utilizar Visual Basic, con frecuencia necesitará ejecutar el mismo bloque de 
instrucciones en cada una de las celdas de un rango. Para ello, combine una 
instrucción de repetición y uno o más métodos para identificar cada celda, una a 
una, y ejecutar la operación. 
 
Una manera de ejecutar un bucle en un rango es utilizar el bucle For...Next con la 
propiedad Cells. Al utilizar la propiedad Cells, puede sustituir el contador del 
bucle, u otras variables o expresiones, por el número de índice de las celdas. 
 
En el siguiente ejemplo se sustituye la variable contador por el índice de fila. El 
procedimiento ejecuta un bucle en el rango C1:C20, estableciendo en 0 (cero) 
cualquier número cuyo valor absoluto sea menor que 0,01. 
 
Sub EstableceCero1() 
 
For Contador = 1 To 20 
 
Set curCell = Worksheets("Hoja1").Cells(Contador, 3) 
If Abs(curCell.Value) < 0.01 Then curCell.Value = 0 
Next Contador 
 
End Sub 
 
 
 
 
 
202 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Otra manera sencilla de ejecutar un bucle en un rango es utilizar el bucle For 
Each...Next en el conjunto de celdas devuelto por el método Range. Visual Basic 
establece automáticamente una variable de objeto para la siguiente celda cada vez 
que se ejecuta el bucle. 
 
El siguiente procedimiento realiza un bucle en el rango A1:D20, estableciendo en 
0 (cero) cualquier número cuyo valor absoluto sea menor que 0.01. 
 
Sub EstableceCero2() 
 
For Each c In Worksheets("Hoja1").Range("A1:D10").Cells 
 
If Abs(c.Value) < 0.01 Then c.Value = 0 
 
Next 
 
End Sub 
 
 
 
Si no conoce los límites del rango en que desea ejecutar el bucle, puede utilizar la 
propiedad CurrentRegion para devolver el rango que rodea la celda activa. 
 
Por ejemplo, el siguiente procedimiento, cuando se ejecuta desde una hoja de 
cálculo, ejecuta un bucle en el rango que rodea la celda activa, estableciendo en 0 
(cero) todos los números cuyo valor absoluto sea menor que 0.01. 
 
Sub EstableceCero3() 
 
For Each c In ActiveCell.CurrentRegion.Cells 
 
If Abs(c.Value) < 0.01 Then c.Value = 0 
 
Next 
 
End Sub 
 
 
 
Seleccionar y activar celdas 
 
Al trabajar con Microsoft Excel, normalmente selecciona una o varias celdas y, a 
continuación, realiza una acción, como darles formato o escribir valores. En 
Visual Basic normalmente no es necesario seleccionar las celdas antes de 
modificarlas. 
 
Por ejemplo, si desea escribir una fórmula en la celda D6 utilizando Visual Basic, 
no es necesario seleccionar el rango D6. Sólo necesita devolver el objeto Range 
y, a continuación, establecer la propiedad Formula en la fórmula que desee, como 
se muestra en el siguiente ejemplo. 
 
Sub IngreseFormula() 
 
Worksheets("Hoja1").Range("D6").Formula = "=SUM(D2:D5)" 
 
End Sub 
 
 
Para obtener ejemplos sobre cómo utilizar métodos para controlar las celdas sin 
seleccionarlas, consulte Cómo hacer referencia a celdas y rangos. 
 
 
 
 
SENATI-Computación e Informática 203 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Usar el método Select y la propiedad Selection 
 
El método Select activa las hojas y los objetos de las hojas; la propiedad 
Selection devuelve un objeto que representa la selección actual de la hoja activa 
del libro activo.Antes de utilizar la propiedad Selection, debe activar un libro, 
activar o seleccionar un hoja y, a continuación, seleccionar un rango, u otro 
objeto, con el método Select. 
 
La grabadora de macros suele crear una macro que utiliza el método Select y la 
propiedad Selection. 
 
El siguiente procedimiento Sub se creó utilizando la grabadora de macros, y 
muestra cómo trabajan juntas Select y Selection. 
 
Sub Macro1() 
Sheets("Hoja1").Select 
Range("A1").Select 
ActiveCell.FormulaR1C1 = "Nombres" 
Range("B1").Select 
ActiveCell.FormulaR1C1 = "Direccion" 
Range("A1:B1").Select 
Selection.Font.Bold = True 
End Sub 
 
 
 
El siguiente ejemplo realiza la misma tarea, sin activar ni seleccionar la hoja de 
cálculo ni las celdas. 
 
Sub Etiquetas() 
 
With Worksheets("Hoja1") 
 
.Range("A1") = "Nombres" 
 
.Range("B1") = "Direccion" 
 
.Range("A1:B1").Font.Bold = True 
 
End With 
 
End Sub 
 
 
 
Seleccionar celdas en la hoja de cálculo activa 
 
Si utiliza el método Select para seleccionar celdas, recuerde que Select sólo 
funciona en la hoja de cálculo activa. Si ejecuta el procedimiento Sub desde el 
módulo, el método Select devuelve un error a menos que el procedimiento active 
la hoja de cálculo antes de utilizar el método Select en un rango de celdas. 
 
Por ejemplo, el siguiente procedimiento copia una fila de la hoja "Hoja1" a la 
hoja "Hoja2" del libro activo. 
 
 
 
 
204 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Sub CopiarFilas() 
 
Worksheets("Hoja1").Rows(1).Copy 
Worksheets("Hoja2").Select 
Worksheets("Hoja2").Rows(1).Select 
Worksheets("Hoja2").Paste 
End Sub 
 
 
 
Activar una celda en una selección 
 
Puede utilizar el método Activate para activar una celda en una selección. Sólo 
puede haber una celda activa, aunque se haya seleccionado un rango de celdas. 
 
El siguiente procedimiento selecciona un rango y, a continuación, activa una 
celda del rango sin cambiar la selección. 
 
Sub ActivarRango() 
Worksheets("Hoja1").Activate 
Range("A1:D4").Select 
Range("B2").Activate 
End Sub 
 
 
 
Trabajar con rangos 3D 
 
Si trabaja con el mismo rango en más de una hoja, utilice la función Array para 
especificar dos o más hojas a seleccionar. 
 
El ejemplo siguiente da formato al borde de un rango tridimensional de celdas. 
 
Sub FormatoHojas() 
 
Sheets(Array("Hoja2", "Hoja3", "Hoja5")).Select 
Range("A1:H1").Select 
Selection.Borders(xlBottom).LineStyle = xlDouble 
End Sub 
 
 
El ejemplo siguiente aplica el método FillAcrossSheets para transferir los 
formatos y datos del rango de la hoja Hoja2 a los rangos correspondientes de 
todas las hojas de cálculo del libro activo. 
 
Sub FormatoTodasHojas() 
Worksheets("Hoja2").Range("A1:H1").Borders(xlBottom).LineStyle=xlDouble 
Worksheets.FillAcrossSheets (Worksheets("Hoja2").Range("A1:H1")) 
End Sub 
 
 
 
 
 
SENATI-Computación e Informática 205 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Trabajar con la celda activa 
 
La propiedad ActiveCell devuelve un objeto Range que representa la celda que 
está activa. Puede aplicar cualquiera de las propiedades o los métodos de un 
objeto Range a la celda activa, como en el ejemplo siguiente. 
 
Sub CeldaActiva1() 
Worksheets("Hoja1").Activate 
ActiveCell.Value = 35 
End Sub 
 
Nota. Sólo se puede trabajar con la celda activa cuando la hoja de cálculo en la 
que se encuentra sea la hoja activa. 
 
 
 
Mover la celda activa 
 
Puede utilizar el método Activate para designar cuál es la celda activa. Por 
ejemplo, el siguiente procedimiento convierte B5 en la celda activa y, a 
continuación, le da formato de negrita. 
 
Sub CeldaActiva2() 
Worksheets("Hoja1").Activate 
Worksheets("Hoja1").Range("B5").Activate 
ActiveCell.Font.Bold = True 
End Sub 
 
 
 
Nota. Para seleccionar un rango de celdas, use el método Select. Para activar sólo 
una celda, utilice el método Activate. 
 
Puede utilizar la propiedad Offset para pasar a la celda activa. 
 
El siguiente procedimiento inserta texto en la celda activa del rango seleccionado 
y, a continuación, mueve la celda activa una celda a la derecha, sin cambiar la 
selección. 
 
Sub MoverDatos() 
Worksheets("Hoja1").Activate 
Range("A1:D10").Select 
ActiveCell.Value = "Total Mensual" 
ActiveCell.Offset(0, 1).Activate 
End Sub 
 
 
 
 
206 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Seleccionar las celdas que rodean la celda activa 
 
La propiedad CurrentRegion devuelve un rango de celdas limitadas por filas y 
columnas en blanco. 
 
En el siguiente ejemplo, la selección se amplía para incluir las celdas contiguas a 
la celda activa que contiene datos. A continuación, se asigna el estilo Moneda a 
este rango. 
 
Sub Region() 
Worksheets("Hoja1").Activate 
ActiveCell.CurrentRegion.Select 
Selection.Style = "Currency" 
End Sub 
 
 
 
Trabajo con libros y hojas 
Hacer referencia a hojas por número de índice 
 
Un número de índice es un número secuencial asignado a una hoja, según la 
posición de su etiqueta, contando desde la izquierda, respecto a las hojas del 
mismo tipo. 
 
El siguiente procedimiento utiliza la propiedad Worksheets para activar la hoja 
de cálculo uno del libro activo. 
 
Sub SeleccionarHoja() 
Worksheets(1).Activate 
End Sub 
 
 
 
Si desea trabajar con todos los tipos de hojas (hojas de cálculo, de gráficos, de 
módulos y de diálogo), utilice la propiedad Sheets. 
 
El siguiente procedimiento activa la hoja cuatro del libro. 
 
Sub SeleccionarHoja() 
Sheets(4).Activate End 
Sub 
 
 
 
Hacer referencia a hojas por su nombre 
 
Puede identificar las hojas por su nombre, utilizando las propiedades Worksheets 
y Charts. Las siguientes instrucciones activan varias hojas del libro activo. 
 
 
 
 
 
SENATI-Computación e Informática 207 
 
 
 
 
 
Microsoft Office 
, 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Puede utilizar la propiedad Sheets para devolver una hoja de cálculo, de gráficos, 
de módulo o de cuadro de diálogo, incluidos todos en el conjunto Sheets. 
 
El siguiente ejemplo activa la hoja denominada "hoja1" del libro activo. 
 
Sub ActivarHoja() 
 
Worksheets("hoja1").Activate 
 
End Sub 
 
 
 
El siguiente ejemplo activa la hoja denominada "grafico1" del libro activo. 
 
Sub ActivarHojaGrafico() 
Sheets("grafico1").Activate 
End Sub 
 
 
 
Añadir módulos VBA 
Para añadir módulos seguir el siguiente procedimiento. 
 
1. Hacer clic en la ficha , botón 
 
2. Se abre la ventana de Visual Basic, hacer clic en el menú botón 
 
 
3. Se presenta la ventana de programación de módulo. 
 
 
 
 
 
Trabajar con UserForms 
Para añadir formularios seguir el siguiente procedimiento. 
 
1. Hacer clic en la ficha , botón 
 
2. Se abre la ventana de Visual Basic, hacer clic en el menú 
 
 
 
208 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Botón 
 
3. Se presenta la ventana de formulario 
 
 
 
 
Uso de controles de formulario 
A continuación se describe el uso de controles de un formulario 
 
Control Marco (Frame) 
 
Este control permite agrupar otros controles para darle mayor funcionalidad a la 
interfaz. Los controles Botones de Opción necesariamente tienen que estar 
agrupados por el control Marco. Para agrupar controles, dibuje primero el control 
Marco y, a continuación, dibuje los controles dentro de Marco. 
 
 
Propiedades 
 
Caption Título de marco. 
 
Enabled Determina si está habilitado para responder a las acciones del 
usuario. 
 
Name Nombre del control. 
 
Visible Determina si el Marco y los controles que contiene están 
visibles o no.Control Casilla de Verificación (CheckBox) 
Las casillas de verificación se utilizan para proporcionar al usuario opciones de 
tipo Si/No o Verdadero/Falso. Cuando el usuario selecciona una opción (activa la 
casilla), aparece una marca de verificación () dentro de la casilla. 
 
 
 
Propiedades 
 
Caption Descripción que acompaña a la casilla. 
 
Enabled True/False. Determina si está habilitado para responder a las 
acciones del usuario. 
 
Name Nombre del control. 
 
 
 
SENATI-Computación e Informática 209 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Value 0 – Unchecked (Vacío, no marcado) 
 
1 – Checked (Marcado) 
 
2 – Grayed (Gris, Indefinido) 
 
Visible Determina si la casilla está visible o no. 
 
 
 
Eventos 
 
Click Ocurre cuando el usuario hace clic sobre la casilla. 
 
 
 
 
 
Control Botón de Opción (OptionButton) 
Estos controles se utilizan para que el usuario seleccione una 
opción de un grupo opciones. La opción seleccionada tiene un punto en el centro. 
 
 
 
Propiedades 
 
Caption Descripción que acompaña a la opción. 
 
Enabled True/False. Determina si está habilitado para responder a las 
acciones del usuario. 
 
Name Nombre del control. 
Value True/False, marcado o no marcado. 
Visible True/False. 
Determina si el 
botón está visible 
o no. 
 
Eventos 
 
Click Ocurre cuando el 
usuario hace clic 
sobre el botón. 
 
 
 
 
 
 
 
210 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Control Cuadro de Lista (ListBox) 
 
Un control ListBox muestra una lista de elementos entre los cuales el 
usuario puede seleccionar uno o más elementos. Si el número de elementos 
supera el número que puede mostrarse, se agregará automáticamente una barra de 
desplazamiento al control ListBox 
 
La propiedad List es un arreglo que contiene los elementos de la lista, y comienza 
con índice 0. La propiedad ListCount establece el número total de elementos de 
la lista. La propiedad ListIndex contiene el índice del elemento seleccionado, el 
cual es un número entre 0 (primer elemento) y el número total de elementos en la 
lista –1 (ListCount – 1). Si no se selecciona ningún elemento, el valor de la 
propiedad ListIndex será –1. 
 
 
 
La propiedad NewIndex contiene el índice del último elemento añadido a la lista. 
Esto puede ser útil si desea hacer algo con el elemento añadido, por ejemplo, que 
sea el elemento actualmente seleccionado. 
 
 
Propiedades 
 
Enabled True/False. Determina si el control responde a las acciones del 
usuario. 
 
List Arreglo con los elementos de la lista. 
ListCount Número de elementos de la lista. 
ListIndex Elemento seleccionado. 
MultiSelect Establece si es posible seleccionar varios elementos o uno 
solo. 
 
Name Nombre del control. 
 
Selected Arreglo de valores lógicos paralelo y del mismo tamaño al 
arreglo list, indica que elementos han sido seleccionados 
(True) de la lista. Se utiliza en lugar de ListIndex cuando 
establecemos la propiedad Multiselect en 1 ó 2. 
 
Sorted True/False. Establece los elementos se ordenan 
alfabéticamente. 
 
Style Establece el comportamiento del control. 
 
Text Devuelve el elemento seleccionado en el cuadro de lista; el 
valor de retorno es siempre equivalente al que devuelve la 
expresión List(ListIndex). Es de sólo lectura en tiempo de 
diseño y es de sólo lectura en tiempo de ejecución. 
 
 
 
Métodos 
 
AddItem Permite añadir nuevos elementos a la lista. 
RemoveItem Permite eliminar elementos de la lista. 
 
 
SENATI-Computación e Informática 211 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Eventos 
 
Click Ocurre cuando el usuario interactúa con el control. 
 
 
Ejemplos: 
 
Muestra en el Cuadro de Texto 
txtGaseosa el elemento seleccionado 
 
 
Private Sub lstGaseosas_Click() 
 
txtGaseosa.Text = 
lstGaseosas.Text 
 
End Sub 
 
 
Añade un nuevo elemento al Cuadro de Lista lstGaseosas 
 
 
Private Sub cmdAgregar_Click() 
Dim strNuevoElemento As String 
strNuevoElemento = InputBox("Ingrese una nueva gaseosa:", _ 
 
"Nueva gaseosa") 
 
If Trim(strNuevoElemento) <> "" Then 
lstGaseosas.AddItem strNuevoElemento 
End If 
End Sub 
 
 
Elimina el elemento actual del Cuadro de Lista lstGaseosas 
 
 
Private Sub cmdEliminar_Click() 
 
If lstGaseosas.ListIndex <> -1 Then 
lstGaseosas.RemoveItem lstGaseosas.ListIndex 
End If 
End Sub 
 
 
 
 
Control Cuadro Combinado (ComboBox) 
Un control ComboBox combina las características de un control 
TextBox y un control ListBox; los usuarios pueden introducir información en la 
parte del cuadro de texto o seleccionar un elemento en la parte de cuadro de lista 
del control. 
 
 
 
212 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Para agregar o eliminar elementos en un control ComboBox, se usa el método 
AddItem o RemoveItem. Establezca las propiedades List, ListCount y ListIndex 
para permitir a un usuario tener acceso a los elementos de un control ComboBox. 
Como alternativa, puede agregar elementos a la lista mediante la propiedad List 
en tiempo de diseño. 
 
 
Propiedades 
 
Enabled True/False. Determina si el control responde a las acciones del 
usuario. 
 
List Arreglo con los elementos de la lista. 
ListCount Número de elementos de la lista 
ListIndex Elemento seleccionado. 
Name Nombre del control. 
 
Sorted True/False. Establece si los elementos se ordenan 
alfabéticamente. 
 
Style Establece el comportamiento del control. 
Text Texto que contiene el control. 
 
 
Métodos 
 
AddItem Permite añadir nuevos elementos a la lista. 
RemoveItem Permite eliminar elementos de la lista. 
 
 
Eventos 
 
Click Ocurre cuando el usuario interactúa con el control 
 
Change Ocurre cuando el valor de la propiedad Text es modificado. 
 
 
Constante 
 
Valor 
 
Descripción 
 
vbComboDropDown 
 
0 
 
(Predeterminado) Cuadro combinado desplegable. 
Incluye una lista desplegable y un cuadro de 
texto.El Usuario puede seleccionar datos en la lista 
o escribir en cuadro de texto. 
 
vbComboSimple 
 
1 
 
Cuadro combinado simple. Incluye un cuadro de 
texto y una lista, que no se despliega. Incremente 
la propiedad Height para mostrar más elementos 
de la lista. 
 
vbComboDrop- 
DownList 
 
2 
 
Lista desplegable. Este estilo sólo permite la 
selección desde la lista desplegable. 
 
 
 
SENATI-Computación e Informática 213 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Propiedad Style 
 
Esta propiedad establece el comportamiento del control ComboBox, y puede 
tomar los siguientes valores: 
 
 
 
Ejemplo 
 
En la siguiente interfaz se ilustra el uso del control ComboBox y la propiedad 
Style. 
 
 
 
 
Muestra la gaseosa seleccionada por el usuario en la etiqueta lblGaseosa 
 
Private Sub cboGaseosas_Click() 
lblGaseosa.Caption = cboGaseosas.Text 
End Sub 
 
 
Actualiza la etiqueta lblGaseosa cuando el usuario modifica el control 
cboGaseosas 
 
Private Sub cboGaseosas_Change() 
lblGaseosa.Caption = cboGaseosas.Text 
End Sub 
 
 
Muestra el encuestado seleccionado por el usuario en la etiqueta 
lblEncuestado 
 
Private Sub cboEncuestados_Click() 
lblEncuestado.Caption = cboEncuestados.Text 
End Sub 
 
 
214 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Muestra en la etiqueta lblCiudad el elemento seleccionado del control 
cboCiudades 
 
Private Sub cboCiudades_Click() 
lblCiudad.Caption = cboCiudades.Text 
End Sub 
 
 
Funciones VBA InputBox, MsgBox 
Una de las formas más simples de obtener información para y desde el usuario es 
utilizandolas funciones MagBox e InpuBox respectivamente. 
 
 
Función MsgBox() 
 
Los cuadros de mensaje ofrecen un modo simple y rápido de consultar a los 
usuarios por información simple o para permitirles tomar decisiones sobre el 
camino que su programa debe tomar. Puede usar esta función para mostrar 
diferentes tipos de mensaje y botones con los cuales el usuario da una respuesta. 
 
 Rpta = MsgBox("¿Está seguro de eliminar a este cliente?" 
vbQuestion + vbYesNo, "Confirmación") 
 
 
 
Función InpuBox() 
 
La función InputBox muestra un mensaje en un cuadro de diálogo, espera que el 
usuario escriba un texto o haga clic en un botón y devuelve un tipo String con el 
contenido del cuadro de texto. 
 
 strCodigo = InputBox("Ingrese el código del cliente a 
buscar:","Búsqueda", "CLI0001") 
 
 
 
 
Metodo GetOpenfilename , GetSaveAsFileName 
Función GetOpenfilename () 
 
Este método nos permite desplegar el cuadro de dialogo abrir (del menu archivo) 
pero no abre el archivo indicado. 
 
 
 
 
SENATI-Computación e Informática 215 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
El método nos devuelve una cadena con la ruta y nombre del archivo 
seleccionado. 
 
Sintaxis 
Object.GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,Multiselect) 
 
Argumentos 
 
FileFilter. Opcional. Una serie especifica con criterios de filtro de 
archivo. 
 
FilterIndex. Opcional. Los números del índice por defecto bajo criterios 
de filtro de archivo. 
 
Titulo. Opcional .El titulo del cuadro de dialogo. si se omite, el titulo.. 
mostrara "Abrir" 
 
ButtonText. Solo para Macintosh 
 
Multiselect. Opcional. Si es verdadero, se pueden seleccionar varios 
nombres de archivos 
 
El argumento Filtro de archivo determínalo que muestra el cuadro de 
dialogo de los archivos del tipo lista desplegable. Consiste en pares de 
series de filtro de archivo seguido del comodín especificado. Si se omite 
sera por defecto : "All File(*.*),*.*" 
 
Ejemplo 
El argumento Filterindex especificara el tipo de archivo que aparece por defecto, 
'el titulo del argumento es un texto que se despliega en la barra del título. si el 
argumento de multiselect es verdadero,el usuario puede seleccionar varios 
archivos(y se devolveran en una serie) 
 
 
 
Private Sub CommandButton1_Click() 
 
Dim filtrox As String 
 
Dim FilterIndex As Integer 
 
Dim titulo As String 
 
Dim nombreArchivo As Variant 
 
 
 
'Configurar Filtro para la lista de archivos 
filtrox = "Archivos de texto (*.txt),*.txt," & _ 
"Word(*.doc),*.doc, " & _ 
 
"Excel (*.xls), *.xls, " & _ 
 
"Power Point(*.ppt), *.ppt, " & _ 
 
"Todos los archivos (*.*),*.* " 
 
 
 
 
 
216 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
'Mostrar por defecto todos los archivos 
 
FiltroIndex = 3 
 
titulo = "Ejemplo" 
 
 
 
'Obtener Nombre del archivo 
 
nombreArchivo = Application.GetOpenFilename(FileFilter:=filtrox, 
FilterIndex:=FiltroIndex, Title:=titulo) 
 
TextBox1.Text = nombreArchivo 
 
End Sub 
 
 
 
Función GetSaveAsFileName 
 
Permite grabar un archivo 
 
 
 
Ejemplo 
 
Private Sub CommandButton2_Click() 
 
Dim FileSaveName As Variant 
 
FileSaveName = Application.GetSaveAsFilename( _ 
 
Filefilter:="Libro de microsoft Office Excel (*.Xls), *.Xls," & "Ficheros de 
TEXTO (*.TXT), *.TXT", _ 
Title:="Guardar Archivo", _ 
InitialFileName:="MyLibro666", _ 
FilterIndex:=1) 
'Si Anulamos la operacion con Cancelar... 
If FileSaveName = False Then 
MsgBox "El libro no será Guardado", vbInformation + vbOKOnly, 
"ATENCION:" 
Exit Sub 
End If 
 
ActiveWorkbook.SaveAs Filename:=FileSaveName 
 
End Sub 
 
Crear y abrir libro 
Crear un libro nuevo 
 
Para crear un nuevo libro en Visual Basic, utilice el método Add. El siguiente 
procedimiento crea un nuevo libro. Microsoft Excel asigna automáticamente el 
 
 
 
 
SENATI-Computación e Informática 217 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
nombre BookN al libro, donde N es el siguiente número disponible. El nuevo 
libro se convertirá en el libro activo. 
Sub CrearNuevoLibro() 
Workbooks.Add 
End Sub 
 
 
 
Abrir un libro 
 
Al abrir un nuevo libro utilizando el método Open, se convierte en un miembro 
del conjunto Workbooks. 
 
El siguiente procedimiento abre un libro denominado Amortizacion.xls, ubicado 
en la carpeta SENATI de la unidad C. 
 
Sub AbrirLibro() 
Workbooks.Open("C:\SENATI\Amortizacion.xls") 
End Sub 
 
 
 
Cuestionarios 
 
 
 
1. Realice un formulario aplicativo de acuerdo a las necesidades de su área donde 
labores, donde pueda aplicar los conocimiento aprendidos en programación. 
 
 
 
 
 
 
 
2. Crear un formulario aplicativo que permita ingresar una contraseña al abrir una 
hoja de cálculo. 
 
 
 
 
 
 
 
3. Crear un atajo que permita llamar a un formulario que contiene un calendario. 
 
 
 
 
 
 
 
 
 
 
 
 
218 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Ejercicios utilizando Macro, Formulario y VBA 
 
 
Ejercicio 1: Números primos 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Grabar el archivo con el nombre primo.xls 
 
Option Explicit 
 
Sub primos() ' Igual que primos pero evitando usar etiquetas y goto 
Dim i As Long 
Dim j As Long 
Dim p As Long 
Dim n As Long 
Dim primo As Boolean 
n = InputBox("¿Hasta que número? (máximo 821507)", "Calculo de primos") 
p = 1 
Application.Workbooks("primos.xls").Sheets("Hoja1").Range("c6").Select 
ActiveCell.Value = 2 
ActiveCell.Offset(1, 0).Value = 3 
For i = 5 To n Step 2 
primo = True 
For j = 3 To Sqr(i) Step 2 
If (i / j) - Int(i / j) = 0 Then primo = False: Exit For 
Next j 
If primo Then 
p = p + 1 
ActiveCell.Offset(p, 0).Value = i 
End If 
Next i End 
Sub 
 
Sub Limpiar() 
Range("B6").Select 
Selection.CurrentRegion.Select 
Selection.ClearContents 
Range("B6").Select 
End Sub 
 
 
 
SENATI-Computación e Informática 219 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 
Ejercicio 2: Fechas 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Option Explicit 
 
Sub nacimiento() 
Dim dias As Integer, Dsemana As Integer, Factual As Date, d As String, cumple As Date 
Rem Dsemana es una variable que da un número que indica el día de la semana 
Rem dado por la función WEEKDAY, que en Excel es =DIASEM(fecha) 
Static Fnacimiento As Date 
Factual = Date 'Date es la función de VBA equivalente a =HOY() 
Fnacimiento = Factual 
Fnacimiento = InputBox(Prompt:="Introduzca su fecha de nacimiento", _ 
Title:="Formato DD-MM-AAAA", Default:=Fnacimiento) 
dias = Factual - Fnacimiento 
Dsemana = Application.WorksheetFunction.Weekday(Fnacimiento) 
Select Case Dsemana 
Case 1: d = "Domingo" 
Case 2: d = "Lunes" Case 
3: d = "Martes" Case 4: d = 
"Miercoles" Case 5: d = 
"Jueves" Case 6: d = 
"Viernes" Case 7: d = 
"Sabado" End Select 
MsgBox Prompt:="Usted nació un " & d & " hace " & dias & " días" & Chr(10) _ 
& "Tiene " & CalEdad(Fnacimiento) & " Años", _ 
Title:="Esta información es correcta siempre que hoy sea " & Factual 
End Sub 
 
 
 
220 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
'Función que calcula la edad en años 
Function CalEdad(Fnacimiento As Date) 
Dim Fecha As Date 
CalEdad = Abs(DateDiff("yyyy", Fnacimiento, Date)) 
Fecha = DateAdd("YYYY", CalEdad, Fnacimiento) 
If Fecha > Date Then CalEdad = CalEdad - 1 
End Function 
 
 
Sub Trimestres() 
'Proporciona el trimestre en el que se encuentra una fecha 
Dim LaFecha As Date 
Dim Msj 
LaFecha = InputBox("Escriba una fecha:") 
Msj = "Trimestre: " & DatePart("q", LaFecha) 
'DatePart es una función VBA 
MsgBox Msj 
End Sub 
 
 
 
Ejercicio3: TIR 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Option Explicit 
 
Sub CalculaTIR() 
Range("F7").Value = 0 
Range("H7").Value = 1 
Do While Abs(Range("G8")) > 0.00001 'error admitido 
If Range("G8") < 0 Then 
Range("H7") = Range("G7") 
Else 
Range("F7") = Range("G7") 
End If 
'La siguiente línea se utiliza para retrasar la ejecución de la macro 
'de esta forma se puede ver como converge la tasa a la TIR 
Application.Wait Now + TimeValue("00:00:1") 
Loop 
End Sub 
 
 
 
SENATI-Computación e Informática 221 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 
Ejercicio 4: =PAGO 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Option Explicit 
 
 
Sub prestamo() 
Static Principal 'Variable estática. No cambia 
Static Tasa 
Static Terminos 
Dim Pago As Double 
Principal = Application.InputBox(Prompt:="Principal (100000 por jemplo)",Default:=Principal) 
Tasa = Application.InputBox(Prompt:="Tipo de interés nominal anual (4,75 por ejemplo)", Default:=Tasa) 
Terminos = Application.InputBox(Prompt:="Número de años (30 por ejemplo)",Default:=Terminos) 
'Vea como se usa la función de Excel Pmt (Pago) sin necesidad de calcularla en una celda 
Pago = Application.WorksheetFunction.Pmt(Tasa / 1200, Terminos * 12, Principal) 
MsgBox Prompt:="La Mensualidad es " & Format(-Pago, "Currency"), Title:="Calculadora de Préstamos" 
End Sub 
 
 
 
Ejercicio 5: Listado de hojas 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Option Explicit 
Sub NombreHojas() 
'Pone los nombres de las hojas, salvo la primera 
Dim contador As Integer 
For contador = 1 To Sheets.Count 
With Sheets(1) 
Cells(contador + 5, 6).Value = Sheets(contador).Name 
End With 
Next 
End Sub 
 
Sub Limpia() 
Range("F6").Select 
Selection.CurrentRegion.Select 
Selection.ClearContents 
Range("A1").Select 
End Sub 
 
 
 
Ejercicio 6: Eliminar registros en blanco 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Option Explicit 
 
Sub EliminarFilasEnBlanco() 
Dim strC As String, lngFila As Long 
With Worksheets("Hoja1") 'Nombre de la hoja 
For lngFila = 1 To .UsedRange.Rows.Count 
If WorksheetFunction.CountA(.Rows(lngFila)) = 0 Then strC = strC & lngFila & ":" & lngFila & "," 
Next lngFila 
Application.ScreenUpdating = False 
.Range(Left(strC, Len(strC) - 1)).Delete 
Application.ScreenUpdating = True 
End With 
End Sub 
 
 
SENATI-Computación e Informática 223 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 
Ejercicio 7: Funciones personalizadas 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Option Explicit 
 
Function DiasLaborablesYSabados(Fecha_Inicial As Date, Fecha_Final As Date, 
Optional Festivos As Range) As Long 
Dim Laborables As Long 
Dim i As Long 
Dim c As Variant 
Dim F As Long 
Dim esta As Boolean 
esta = False 
Laborables = 0 
If Festivos Is Nothing Then 
For i = Fecha_Inicial To Fecha_Final 
If i Mod 7 <> 1 Then 
Laborables = Laborables + 1 
 
 
 
224 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
End If 
Next i 
Else 
For i = Fecha_Inicial To Fecha_Final 
If i Mod 7 <> 1 Then 
esta = False 
For Each c In Festivos 
F = CDate(c) 
If i = F Then esta = True: Exit For 
Next c 
If Not esta Then Laborables = Laborables + 1 
End If 
Next i 
End If 
DiasLaborablesYSabados = Laborables 
End Function 
 
 
 
Ejercicio 8: Filtrar la base de datos 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Sub Filtra() 
Range("basedatos").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _ 
Range("H5:K6"), CopyToRange:=Range("H12:K12"), Unique:=False 
Range("A1").Select 
End Sub 
 
 
 
SENATI-Computación e Informática 225 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
Sub Auto_Open() 
'Copiamos y pegamos, con pegado especial valores, las celdas y9.ab9 
'que son las que generan la base de datos. 
Range("Y9:AB9").Select 
Selection.Copy 
Range("B6:E1005").Select 
ActiveSheet.Paste 
Application.CutCopyMode = False 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
Application.CutCopyMode = False 
'Nombramos la base de datos como basedatos 
Range("B5").Select 
Selection.CurrentRegion.Select 
ActiveWorkbook.Names.Add Name:="basedatos", RefersToR1C1:="=Hoja1!R5C2:R1005C5" 
Range("A1").Select 
End Sub 
 
 
 
Ejercicio 9: Eliminar valores duplicados de una lista 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Option Explicit 
 
 
Function CuentaListaA() 
 
 
 
 
226 SENATI-Computación e Informática 
 
 
 
 
 
 
ción con VBA 
 
 
 
 
 
 
 
 
 
 
 
 
Application.Workbooks("EliminarValores.xls").Worksheets("Hoja1").Range("C5").Activate 
Selection.End(xlDown).Select 
CuentaListaA = ActiveCell.Row - 5 
End Function 
 
 
Sub Repetidos() 
'Borra los elementos de la columna E que esten en la C 
'Pero sólo los borra una vez. Si se repiten en C sólo borra el 1º 
'Si se quiere que se eliminen todos quitar del programa la vble. "salir" 
Dim posicion As Long 
Dim salir As Boolean 
Dim comodin 
Dim respuesta As String * 5 
Dim filasiniciales As Long 
Dim filasfinales As Long 
filasiniciales = CuentaListaA 
Range("E6").Select 
posicion = 1 
While ActiveCell.Value <> "" 
comodin = ActiveCell.Value 
Range("C6").Select 
salir = False 
While ActiveCell.Value <> "" And salir = False 
If ActiveCell.Value = comodin Then 
ActiveCell.Font.Bold = True 
respuesta = MsgBox("¿Deseas borrar la celda " & ActiveCell.Address & "?", 4, "¡¡Encontrado!!") 
If respuesta = vbYes Then 
'Edición, Eliminar, Desplazar las celdas hacia arriba 
Selection.Delete Shift:=xlUp 
End If 
salir = True 
Else 
ActiveCell.Offset(1, 0).Select 
End If 
Wend 
posicion = posicion + 1 
Range("E6").Select 
ActiveCell.Offset(posicion - 1, 0).Select 
Wend 
filasfinales = CuentaListaA 
MsgBox "La Lista A inicialmente tenia " & filasiniciales & " filas." & Chr(13) _ 
& "Se han eliminado " & filasiniciales - filasfinales & " filas." & Chr(13) _ 
& "Por tanto, quedan " & filasfinales & " filas." 
End Sub 
 
 
 
 
 
 
SENATI-Computación e Informática 227 
 
 
 
 
 
Microsoft Office 
 
 
 
 
 
 
 
 
 
 
 
 
Excel 2007 
 
 
 
Ejercicio 10: Rellenar y Eliminar registros de una lista 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
'En las celdas vacias de una tabla copia el valor de la celda precedente 
Sub RellenarCeldas() 
Range("B5").Select 
 
 
 
 
228 SENATI-Computación e Informática