Prac 5 Excel Macros y VBA
Prac 5 Excel Macros y VBA
Prac 5 Excel Macros y VBA
QUINTA PRÁCTICA
FUNDAMENTOS DE PROGRAMACIÓN
Como se indicó anteriormente, la programación en VBA consiste en escribir instrucciones que deben estar
almacenados en un módulo estándar. Para mayores detalles, remítase al material complementario, páginas 38 a
la página 60. Pero, brevemente se hará un resumen.
La codificación de instrucciones VBA se hará en procedimientos y/o funciones contenidos en un módulo o en
controles de objetos aplicados en formularios.
PROCEDIMIENTOS
Un procedimiento es un conjunto de instrucciones que tienen en común realizar un proceso complejo en un
conjunto de tareas más simples. Existen dos tipos procedimiento: procedimientos SUB y procedimientos
FUNCTION.
➢ Procedimientos SUB
Hay dos tipos: Sub generales y Sub asociados a aventos
➢ Procedimientos Function
Llamados generalmente funciones y muchas veces definidas o creadas por el usuario, devuelven un
valor que resulta de un cálculo. El valor se devuelve a través del nombre de la función. Debe tener en
cuenta que Visual Basic incluye numerosas funciones integradas como: day, week, format, etc.
VARIABLES
En ambos tipos de procedimientos indicados anteriormente, se utilizan variables que contienen datos que
representan a distintos tipos de datos como: texto, número, fechas, valores lógicos, etc. De modo que los tipos
de datos deben ser representados mediante variables que VBA lo soporte.
Entre la diversidad de variables tenemos: byte, boolean, integer, long, single, doublé, date, string, variant, etc.
Declaración de variables
Toda variable debe tener un nombre indicando su tipo. Si no se indica el tipo entonces quiere decir que es una
variable Variant, es decir que el nombre de la variable se adecúa al tipo de dato escrito.
Ejemplo 1
Nota = 12 Nota, es una variable de tipo variant por que no está definido explícitamente.
Importe = 2000 Importe, es una variable de tipo variant, por que no está definido explícitamente.
Nombre = “José Carlos” Nombre, es una variable de tipo variant
Ejemplo 2:
Dim V As Integer V, es una variable tipo de dato definido como entero
Importe As Double Importe, es una variable de tipo Doble
Nombre As String Nombre es un variable de tipo cadena o texto
FUNCIONES DE MENSAJES
LA FUNCION MsgBox
Ofrece una sencilla forma de mostrar mensajes o resultados cuando se está ejecutando código VBA.
Sintaxis:
MsgBox(mensaje [, botones] [, título] [, archivo_de_ayuda, contexto])
Ejemplos:
1. MsgBox WorkBooks(“Libro1”).Name
2. MsgBox "Desea continuar", vbYesNo + vbQuestion, "Elija..."
LA FUNCION InputBox
Muestra un mensaje en una ventana de diálogo, espera que el usuario escriba un texto o haga clic en un botón
y devuelve un valor de tipo String con el contenido del cuadro de texto.
Debe escribir el siguiente código: N1 = InputBox ("Ingrese Nota1 del Alumno Carlos","Evaluación”)
Para visualizar el resultado escriba : ? N1
PROGRAMACIÓN ESTRUCTURADA
La premisa básica de la programación estructurada es que una rutina o segmento de código debería tener un
solo punto de entrada y un solo punto de salida.
Es decir, el código debería ser una unidad independiente y el control del programa no debería entrar o salir desde
cualquier parte de esa unidad. Como resultado, la programación estructurada excluye la instrucción GoTo.
Cuando se escribe un código estructurado, el programa progresa de manera ordenada y fácil de seguir,
lográndose leer, entender y modificar la codificación más fácilmente.
VBA es un lenguaje de programación estructurado y es compatible con las construcciones de código modular,
ofreciéndonos construcciones como: If-then Else, Select Case, bucles For Next, Do Until y Do While.
TIPOS DE ESTRUCTURAS
Existen varios tipos de programación estructurada, entre las cuales tenemos:
Estructuras condicionales
➢ Estructura condicional simple, con la sentencia: If…Then
➢ Estructura condicional doble, con la sentencia: If…Then…Else
➢ Estructura condicional doblemente encadenada: If…Then…ElseIf
➢ Estructuras de selección múltiple con la sentencia: Select-Case
Estructura Repetitivas
➢ Estructura repetitiva, con la sentencia: For…Next
➢ Estructura repetitiva anidada con la sentencia: For…Next dentro de For…Next
➢ Estructura repetitiva con la sentencia: Do While…Loop,
➢ Estructura repetitiva con la sentencia: Do Until…Loop
ACTIVIDADES PRACTICAS
I. VISUALIZANDO FUNCIONES INTEGRADAS EN VBA DESDE LA VENTANA INMEDIATO
FUNCIÓN VENTANA INMEDIATO RESULTADO
ASC Num = Asc(“B”) : ? num 66
Devuelve el código ASCII de
un determinado caracter
Chr Letra = Chr(209) : ? letra Ñ
Función inversa al anterior
Devuelve el carácter
Format Monto = 80 El Monto es $ 80.00
Aplica un modelo formato Txtm = “El monto es $ “ & Format(Monto,”0.00”
según tipo de datos. ? Txtm
CREACION DE PROCEDIMIENTOS
1. Proceda a abrir un nuevo libro y poner por nombre: Procedimientos.xlsm.
2. Pulse ALT + F11, menú Insertar, clic en Modulo.
3. Doble clic en Módulo1
TAREA
Proceda a escribir los procedimientos correspondientes para mostrar los siguientes mensajes
2. Si se desea utilizar un valor ingresado a través de inputbox debe trabajarlo como función y asignarle
a una variable. Se desea buscar el código de un alumno; debe ingresar su código.
Procedimiento Resultado
Sub entrada2()
codigo = InputBox("Código del alumno a buscar", _
"Búsqueda alumno")
MsgBox "Se está buscando el código >>>> " + codigo
End Sub
3. Validando el ingreso de un valor, es decir se cancela o cierra sin ingresar valor alguno, la variable
tendrá un valor vacío
Procedimiento Resultado
Sub entrada3()
unidades = InputBox("Ingrese las unidades a procesar",
_ "Registro")
If unidades = "" Then
MsgBox "Error"
Else
MsgBox "Procesando... " + unidades & " unidades"
End If
End Sub
Ejecutando y cancelado, dará como resultado Ejecutando y dando valor: 15 y Aceptar.
la imagen de abajo
TAREA
Modifique el último procedimiento para que al cancelar o aceptar, los resultados se muestren así:
ESTRUCTURAS CONDICIONALES
ESTRUCTURA CONDICIONAL SIMPLE CON IF… THEN Verdadero Falso
Este tipo de estructura, evalúa una condición lógica y en caso Condición
resulte verdadera efectúa la acción. En caso que la condición
resulte falsa, continúa con la siguiente instrucción
Formatos: Bloque de
1. If Condición Then acción Instrucciones A
2. If Condición Then
Acción1
Acción2
End if
EJERCICIOS
1. Ingrese una edad mayor a 17 y visualice el mensaje : “Mayor de Edad
Sub CondicionIf_1()
Dim Edad As Integer
Edad = 20
If Edad > 17 Then Mensaje = "Mayor de Edad"
MsgBox Mensaje
End Sub
…………
Case ValorN : acción
Else
Acción falsa
End Select
1. En un nuevo libro, visualice el mensaje “Bebe” si la edad está entre 0 y 5, “Adolescente” si la edad está
entre 6 y 17, “Adulto”, si la edad es mayo o igual a 18.
Sub CondicionCase_1()
Dim Edad As Byte
Edad = InputBox("Ingrese la edad de la persona")
Select Case Edad
Case 0 To 5
MsgBox "Es un Bebe"
Case 6 To 17
MsgBox "Es un Adolescente" Guarde el Libro con el nombre de:
Case Is >= 18 Prac8 CaseMensajes.xlsm
MsgBox "Es un Adulto"
End Select
End Sub
TAREA
Proceda a modificar el programa anterior para que los datos sean guardados en forma horizontal, es decir, se
deben ir registrando o insertando nuevos datos almacenados por filas. Ponga los encabezados según su
criterio(Nota1, Nota2, Nota3, Promedio, Calificación). Puede elegir cambiar los valores(0 a 5, Muy deficiente, …
19 a 20, Sobresaliente, etc.) para las calificaciones expresivas.
ESTRUCTURAS REPETITIVAS
Tienen por objetivo repetir las instrucciones un determinado número de veces mientras se cumpla una condición.
Este número de veces que se repita una instrucción también se le denomina bucle o ciclo.
En este tipo de estructuras se utilizan normalmente variables llamadas contadores y/o acumuladores.
CONTADOR
Es un tipo de variable que guarda valores incrementables generalmente de uno en uno las ocurrencias de una
condición. Se aplican para determinar por ejemplo:
• El número de veces que se hizo en un botón
• El número de vendedores que superan las ventas mayores a 10000 mensuales
Formato:
Contador = Contador + 1 (la variable Contador se incrementa de uno en uno )
X = X +1
J = j + 3 (el incremento es de 3 en 3)
ACUMULADOR
Es un tipo de variable llamado también totalizador, cuya misión es registrar las cantidades variables de sumas
sucesivas. Se aplican para determinar por ejemplo:
• El acumulado de los sueldos de los empleados de una empresa
Inicio
• Suma de las notas de un alumno.
• Suma de las ventas realizados en el día.
Formato: Acumulador = Acumulador + Valorvariable F
Total = Total + Nota(i) Condición
V
TIPOS DE ESTRUCTURA Y SUS SENTENCIAS
Hay varios tipos de estructuras repetitivas:
Acción
• For … Next. Ejecuta un bloque de instrucciones según el valor de una
variable contador
Sintaxis: For contador To finnumero Step incremento
<instrucciones> Incremento
Next
• For… Each… Next. Ejecuta un bloque de instrucciones para element de
una colección de objetos.
Sintaxis : For Each elemento In grupo
<instrucciones>
Next elemento
• Do … Loop. Ejecuta un bloque de instrucciones un número indeterminado de veces.
Tiene varios formatos:
Sintaxis 1 Sintaxis 2 Sintaxis 3 Sintaxis 4
Do While condición Do Do Until condición Do
<instrucciones> <instrucciones> <instrucciones> <instrucciones>
Loop Loop While condición Loop Loop Until condición
F
Condición
Acción
7. Se pide ingresar por teclado una cantidad de estudiantes e ingresar por teclado el puntaje final de cada
estudiante para obtener el promedio global de todos los estudiantes
Sub EstructuraFor_7()
numestud = InputBox("¿Cuántos estudiantes?", _
"Calcular promedios")
For contar = 1 To numestud
sPuntaje = Val(InputBox("Ingrese Puntaje: ", , 0))
Puntajetotal = Puntajetotal + sPuntaje
Next contar
spromedio = Puntajetotal / numestud
MsgBox "El promedio es: " + Str(spromedio)
End Sub
Do While. Observe la nueva instrucción With que simplifica la repetición de la propiedad activecell en
cada campo.
Sub DoWhile1()
' ingresar datos por columnas y en cada fila
Dim nombre As String
Dim ciudad As String
Dim edad As Integer
Dim fecha As Date
Worksheets(1).Activate
'activar celda A2
Range("A2").Activate
nombre = InputBox("Entre el nombre (Enter para terminar) : ", "Nombre")
'Mientras la variable nombre no este vacío hacer lo siguiente
Do While nombre <> ""
ciudad = InputBox("Entre la ciudad :", "Ciudad")
edad = Val(InputBox("Entre la edad :", "Edad"))
fecha = CDate(InputBox("Fecha Nacimiento: ", "Fecha"))
With ActiveCell
.Value = nombre
.Offset(0, 1) = ciudad
.Offset(0, 2) = edad
.Offset(0, 3) = fecha
End With
'hacer activa la celda de la fila siguiente a la actual
ActiveCell.Offset(1, 0).Activate
nombre = InputBox("Entre el nombre (Enter para terminar) : ", "Nombre")
Loop
End Sub
FIN DE LA PRACTICA 6