87
Carlos Asenjo MCSE MCT

Macros VBA en Excel 2003 y 2007

Embed Size (px)

Citation preview

Page 1: Macros VBA en Excel 2003 y 2007

Carlos AsenjoMCSE  MCT

Page 2: Macros VBA en Excel 2003 y 2007

www.serverms.es

Objetivo del CursoObjetivo del Curso◦ Conceptos básicos◦ Creación de macros◦ Creación de macros◦ Automatizar tareas◦ Conceptos fundamentales de VB Excelp

Contenidos◦ Concepto de macro◦ Creación automática de macro◦ Edición de macro◦ Asignación a objetos

Page 3: Macros VBA en Excel 2003 y 2007

www.serverms.es

ContenidosContenidos◦ Concepto de macro

◦ Creación automática de macro

◦ Edición de macro

◦ Asignación a objetos

◦ Editor VB Excel

Page 4: Macros VBA en Excel 2003 y 2007

www.serverms.es

Conceptos fundamentalesConceptos fundamentales◦ Procedimientos y módulos

◦ Estructuras (IF,For‐Next, Do‐Loop,…)

OPM◦ OPM

◦ Variables, constantes,…Variables, constantes,…

◦ MsgBox, Inputbox,…

◦ Errores y depuración de código

Page 5: Macros VBA en Excel 2003 y 2007

www.serverms.es

Una definición sencillaUna definición sencilla◦ Macro:  es  un  conjunto  de  instrucciones  de código (programado) que permiten realizar una tarea determinada como así también expandir e p pincrementar las prestaciones de Excel. 

◦ Las macros se escriben en lenguaje de programación VBA (Visual Basic◦ Las macros se escriben en lenguaje de programación VBA (Visual Basic for Applications) en el editor de VB que incorpora Excel

Page 6: Macros VBA en Excel 2003 y 2007

www.serverms.es

Se pueden definir 4 grandes "áreas" donde se aplicanSe pueden definir 4 grandes  áreas  donde se aplican las macros que son:

◦ 1. Automatización de tareas y procesos que involucran muchos pasosmuchos pasos◦ 2. Creación de nuevas funciones a medida (aparte de las que ya posee Excel !)◦ 3. Creación de nuevos comandos, complementos y menús.◦ 4. Creación de completas aplicaciones a medida.

Page 7: Macros VBA en Excel 2003 y 2007

www.serverms.es

Automatización de procesos:Automatización de  procesos:◦ Todos los días llevamos a cabo las mismas acciones (Centrar, Negrita, Tamaño x, …)Negrita, Tamaño x, …)

◦ Individualmente son muy sencillas, pero en conjunto forman y p jun tedioso trabajo

Ó◦ SOLUCIÓN: Macro

Page 8: Macros VBA en Excel 2003 y 2007

www.serverms.es

Creación de funciones a medida:Creación de funciones a medida:◦ Excel incorpora +‐ 330 funciones que se pueden usar de forma aislada o anidadaaislada o anidada

◦ Ninguna de ellas se ajusta a lo que queremosg j q q

◦ SOLUCION: Macro. Aparecerá en el menú de funciones como una más.

Page 9: Macros VBA en Excel 2003 y 2007

www.serverms.es

Creación de nuevos comandos complementos yCreación de nuevos comandos, complementos y menús:◦ Cada vez tengo que buscar comandos en diferentes menús◦ Cada vez tengo que buscar comandos en diferentes menús

◦ Me vuelvo locoMe vuelvo loco

◦ SOLUCIÓN: Macro. Puedes crear un menú personalizado con tus comandos más frecuentes

Page 10: Macros VBA en Excel 2003 y 2007

www.serverms.es

Creación de aplicaciones a medida:Creación de aplicaciones a medida:◦ Excel es utilizado en muchos campos por muchos usuarios

◦ Las macros te permiten crear todo un programa de software

◦ Lo podrán usar cualquier usuario aunque “no sepa”  Excel

Page 11: Macros VBA en Excel 2003 y 2007

www.serverms.es

(OPM)(OPM).Supongamos que tenemos una canasta de frutaObj t í l i f t ( j )◦ Objetos: serían las mismas frutas (naranjas, peras…).◦ Propiedades: serían las características de las frutas (color, olor, sabor textura )sabor, textura…).◦ Métodos: son las acciones que podríamos ejercer sobre las frutas (comprarlas, venderlas, comerlas, almacenarlas, limpiarlas, quitarles la piel,…).

Page 12: Macros VBA en Excel 2003 y 2007

www.serverms.es

En Excel:En Excel:◦ Objetos: un libro excel, una hoja, un rango, una celda, un menú, un gráfico, una tabla dinámica, un cuadro de diálogo,menú, un gráfico, una tabla dinámica, un cuadro de diálogo, las etiquetas de hojas, las columnas, las filas, etc.

◦ Propiedades: por ejemploCelda: alto, ancho, color, bloqueada o desbloqueada,…Hoja: visible u oculta, con o sin líneas de división,…

◦ Métodos: para una hoja◦ Métodos: para una hoja,activar, mover, copiar o borrar. 

Page 13: Macros VBA en Excel 2003 y 2007

www.serverms.es

Hablar de macros lenguaje VBA y OPM es lo mismoHablar de macros, lenguaje VBA y OPM es lo mismo.El lenguaje VBA solo está en inglés.L j fá il i i iLenguaje fácil y muy intuitivo◦ Ejemplos de Objetos VBA

Cell (celda) Range (rango) Worksheet (hoja) Workbook (libro)Cell (celda), Range (rango), Worksheet (hoja), Workbook (libro)◦ Ejemplos de Propiedades VBA

Value (valor), Color (color), Format (formato)Value (valor), Color (color), Format (formato)

◦ Ejemplos de Métodos VBACopy (copiar), Protect (proteger), Delete (borrar)

Page 14: Macros VBA en Excel 2003 y 2007

www.serverms.es

Necesario que conozcas la barra de herramientas VBANecesario que conozcas la barra de herramientas VBA◦ Herramientas > Macros

◦ Ver > Barras de Herramientas > Visual Basic

Page 15: Macros VBA en Excel 2003 y 2007

www.serverms.es

Tres formas de acceder al editor:Tres formas de acceder al editor:

H i t > M > Edit d Vi l B i◦ Herramientas > Macros > Editor de Visual Basic

◦ Desde el botón Editor de Visual Basic de la Barra de◦ Desde el botón Editor de Visual Basic de la Barra de Herramientas Visual Basic.

◦ Método abreviado del teclado: ALT+F11

Page 16: Macros VBA en Excel 2003 y 2007

www.serverms.es

Page 17: Macros VBA en Excel 2003 y 2007

www.serverms.es

La Ventana Proyecto VBA Project:La Ventana Proyecto ‐ VBA Project:◦ Muestra XLS (Libros de Calculo) y XLA (Complementos) abiertos(Complementos) abiertos

◦ En nuestro caso VBAProject (Libro1)j

Ventana de Código:

Page 18: Macros VBA en Excel 2003 y 2007

www.serverms.es

Tres métodos:Tres métodos:

M l t◦ Manualmente

◦ Mediante la Grabadora de Macros◦ Mediante la Grabadora de Macros

◦ Combinación de ambas (grabando y modificando el código)(g y g )

Page 19: Macros VBA en Excel 2003 y 2007

www.serverms.es

Objetivo: Escribir el valor 1 500 en la celda A1 de laObjetivo: Escribir el valor 1.500 en la celda A1 de la hoja Excel. 

◦ Comenzamos con una hoja vacía◦ Ejecutamos la macro◦ Ejecutamos la macro◦ Deberá escribir en A1, 1500

Page 20: Macros VBA en Excel 2003 y 2007

www.serverms.es

1 Prepara el Editor de VB1. Prepara el Editor de VB1. Crea un nuevo libro Excel y guárdalo con el nombre Libro 1.2. Abre el editor de Visual Basic con las teclas ALT+F11.3. Doble clic en VBAProject (Libro1) para ver las carpetas.4. Doble clic en Hoja1 (Hoja1) para empezar a escribir el código de la macro

2. Escribimos la macro' Esta macro escribe el valor 1500 en la celda A1Sub MiPrimeraMacro()Range("A1").Value=1500End Sub

Page 21: Macros VBA en Excel 2003 y 2007

www.serverms.es

Cinco formas:Cinco formas:◦ Desde el mismo editor

Desde el inicio de la macro pulsar F5Desde el inicio de la macro pulsar F5

◦ Desde ExcelF11 para volver a ExcelHerramientas > Macros > MacroSeleccionamos la macro > Ejecutar

Page 22: Macros VBA en Excel 2003 y 2007

www.serverms.es

◦ Desde Objetos:◦ Desde Objetos:Ver > Barra de Herramientas > DibujoUna vez creado el objeto, Botón Dcho.>Asignar Macro…j , g

◦ Desde botones:Ver> Barra de herramientas > Personalizar.Comandos> Categorías> MacrosC l b tó d B tó d h A i MCon el botón creado: Botón dcho.> Asignar Macro…

◦ Automáticamente:◦ Automáticamente:Cada cierto tiempo, o según la acción del Usuario

Page 23: Macros VBA en Excel 2003 y 2007

www.serverms.es

' Esta macro escribe el 1500 en la celda C10 Esta macro escribe el 1500 en la celda C10◦ Comentario sobre la macro◦ Siempre ha de empezar por ‘◦ Siempre ha de empezar por  ◦ En línea y cantidad ilimitadas◦ Muy útiles para macros complejasy p p j◦ No tiene efectos sobre la macro

Sub MiPrimeraMacro()◦ Toda macro comienza con Sub NombreMacro()◦ NombreMacro  se utilizara para ejecutar la macro

Page 24: Macros VBA en Excel 2003 y 2007

www.serverms.es

Range("A1") Value = 1500Range( A1 ).Value = 1500◦ Corazón de la macro◦ Objeto: Range(“A1”)◦ Objeto:   Range( A1 ).◦ Propiedad: Value◦ Valor: = 1500◦ a la celda A1 de Excel asígnale el valor 1500

End Sub◦ Toda macro termina con End Sub

Page 25: Macros VBA en Excel 2003 y 2007

www.serverms.es

1 Grabar la macro1. Grabar la macro1. Ve al menú Herramientas > Macros 2. Selecciona la opción Grabar nueva macro…3. Se abrirá un cuadro de diálogo como el que se muestra a continuación.

4 Borra Macro 1 y escribe MiPrimeraMacro4. Borra Macro 1 y escribe MiPrimeraMacro5. Pulsa Aceptar. A partir de ahora se grabara cada clic que hagas6. Posiciónate en A1 y escribe 1500

7. Cuando termines presiona            o Herramientas > Macros > Detener grabación 

Page 26: Macros VBA en Excel 2003 y 2007

www.serverms.es

Ver el códigoVer el código

Page 27: Macros VBA en Excel 2003 y 2007

www.serverms.es

Escrita GrabadaEscrita1. Como la hicimos

1. Creamos un Libro Excel llamado Libro

Grabada1. Como la hicimos

1. Creamos un Libro Excel llamado Libro12 Herramientas > Macros > Grabar macro2. Abrimos el editor de macros con ALT+F11

3. En VBAProject (Libro1) hicimos doble clic en Hoja1 (Hoja1) 

4. Escribimos el código de la macro.

2. Herramientas > Macros > Grabar macro…3. En la celda A1 escribimos 15004. Herramientas > Macros > Detener grabación

2. El código de la macro4. Escribimos el código de la macro.

2. El código de la macro1. Con ALT+F11 accedemos al editor de 

macros.

1. Con ALT+F11 accedemos al editor de macros.

2. El código que escribimos manualmente fue el siguiente:

2. El código que escribimos manualmente fue el siguiente:‘ escribe el valor 1500 en la celda A1Sub MiPrimeraMacro()

Sub MiPrimeraMacro()' MiPrimeraMacro Macro' Macro grabada el 02/03/2008 por MSLRange("A1").SelectSub MiPrimeraMacro()

Range("A1").Value=1500End Sub

Range( A1 ).SelectActiveCell.FormulaR1C1 = "1500"Range("B1").SelectEnd Sub

Page 28: Macros VBA en Excel 2003 y 2007

www.serverms.es

Escrita GrabadaEscritaComo la hicimos◦ Desventaja: Requiere conocer OPM

GrabadaComo la hicimos◦ Ventaja: No es necesario saber 

El código de la macro◦ Ventaja:  Código más eficiente y 

programar

El código de la macrosintético

' Esta macro escribe el valor 1500 en la celda A1

◦ Desventaja: Código habitualmenteredundante y excesivo

Sub MiPrimeraMacro()Sub MiPrimeraMacro()

Range("A1").Value = 1500

End Sub

Sub MiPrimeraMacro()' MiPrimeraMacro Macro' Macro grabada el 02/03/2008 por MSLRange("A1").SelectActiveCell.FormulaR1C1 = "1500"ActiveCell.FormulaR1C1    1500Range("B1").Select

End Sub

Page 29: Macros VBA en Excel 2003 y 2007

www.serverms.es

Procedimiento SUB Nombre()Procedimiento SUB Nombre()◦ General

Se le llama manualmente desde códigoSe le llama manualmente desde código

◦ Asociado a un eventoEjecuta de forma automáticajNobreObjeto_Evento (ej: Workbook_Open)

Sub Macro ()Range(“A1”)=1500End Sub

Page 30: Macros VBA en Excel 2003 y 2007

www.serverms.es

Procedimiento Function Nombre(Argumentos)Procedimiento Function Nombre(Argumentos)◦ Devuelven un valor resultado de una función

Function Terminar() As BooleanDim x As Byteyx = MsgBox("¿Desea salir?", vbOKCancel, "Salir")If x = 1 ThenActiveCell.Value = "SI"End IfEnd Function

Page 31: Macros VBA en Excel 2003 y 2007

www.serverms.es

Llamar función desde ExcelLlamar función desde Excel◦ Insertar > Función… > Definidas por el Usuario

Function CalcEdad(FechaNac As Date)Dim zFecha As DateCalcEdad = Abs(DateDiff("YYYY", FechaNac, Date))zFecha = DateAdd("YYYY", CalcEdad, FechaNac)If zFecha > Date Then CalcEdad = CalcEdad ‐ 1End Function

Page 32: Macros VBA en Excel 2003 y 2007

www.serverms.es

ArgumentosArgumentos◦ Declarar variable◦ Pedira al usuario el valor del argumento◦ Pedira al usuario el valor del argumento

◦ Variable As tipop

Page 33: Macros VBA en Excel 2003 y 2007

www.serverms.es

Disparar macros según acciones (a nivel de Libro)Disparar macros según acciones (a nivel de Libro)◦ Guardar, abrir, cerrar, imprimir…

Han de escribirse en “ThisWorkbook”

Page 34: Macros VBA en Excel 2003 y 2007

www.serverms.es

Ejemplo:Ejemplo:Private Sub Workbook_Activate()Msgbox "Hola, Excel te saluda“End Sub

Sub Workbook Open()Sub Workbook_Open()Workbooks.Open Filename:=“Ruta”End Sub

Private: macro/función solo se puede llamar desde el mismo modulo

Existen 20 macros de evento

Page 35: Macros VBA en Excel 2003 y 2007

www.serverms.es

Disparar macros según acciones (a nivel de hoja)Disparar macros según acciones (a nivel de hoja)◦ Activarla, desactivarla, crear nueva…

Han de escribirse en “Hoja1(Nombre)”

Page 36: Macros VBA en Excel 2003 y 2007

www.serverms.es

Ejemplo:Ejemplo:Private Sub Worksheet_Activate()MsgBox "Hola, Estas en la Hoja 1"End Sub

Existen 9 macros de evento a nivel hojaExisten 9 macros de evento a nivel hoja

Page 37: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub Primero()Sub Primero()Range("A1").Value = "Hola"End Sub

Queremos que sea el usuario quien diga que ponerNecesitamos un lugar donde guardar lo que escribaSOLUCIÓN: Variable

DIM variable AS tipo.En este caso: DIM MiVariable AS String.g

Page 38: Macros VBA en Excel 2003 y 2007

www.serverms.es

Ventana para introducir datosVentana para introducir datosSINTAXIS: InputBox(Mensaje, Título).

En nuestro caso: ◦ MiVariable = (“Introduzca datos”, “Entrada de datos”)

Si pulsamos Aceptar los datos se guardaran enSi pulsamos Aceptar, los datos se guardaran en MiVariable

Page 39: Macros VBA en Excel 2003 y 2007

www.serverms.es

11.Sub datos()Dim MiVariable As StringDim MiVariable As StringMiVariable = InputBox("Introduzca Datos", "Entrada de Datos")ActiveSheet.Range("A1").Value = MiVariableActiveSheet.Range( A1 ).Value   MiVariableEnd Sub2.2.Sub datos()ActiveSheet.Range("A1").Value = InputBox ("Introduzca Datos", "Entrada de Datos") 

End Sub

Page 40: Macros VBA en Excel 2003 y 2007

www.serverms.es

33.Sub Entrar_ValorDi C ill A S iDim Casilla As StringDim Texto As StringCasilla = InputBox("En que casilla quiere entrar el valor", "Entrar Casilla")Texto = InputBox (“Introduzca datos para ”  &Casilla, "Entrada de Datos")ActiveSheet Range(Casilla) Value = TextoActiveSheet.Range(Casilla).Value = Texto

End Sub

Page 41: Macros VBA en Excel 2003 y 2007

www.serverms.es

Herramientas > Opciones > Requerir declaración de VarHerramientas > Opciones > Requerir declaración de Var.MUY RECOMENDABLE declarar variablesEjemplo practico:Ejemplo practico:

Sub Entrar_ValorTexto = InputBox(“Introduzca datos", "Entrada de datos")ActiveSheet Range("A1") Value = TestoActiveSheet.Range( A1 ).Value   TestoEnd Sub

Option ExplicitOption ExplicitSub Entrar_ValorDim Texto As StringTexto = InputBox(“Introduzca datos", "Entrada de datos")Texto   InputBox( Introduzca datos ,  Entrada de datos )ActiveSheet.Range("A1").Value = TestoEnd Sub

Page 42: Macros VBA en Excel 2003 y 2007

www.serverms.es

Byte | 1 byte | 0 a 255Byte  | 1 byte  | 0 a 255Integer  |2 bytes  | ‐32.768 a 32.767D i l |14 b |D i lDecimal  |14 bytes |DecimalesDate  |8 bytes  |FechasString  |10 bytes |TextoVariant |22 bytes |= String

Page 43: Macros VBA en Excel 2003 y 2007

www.serverms.es

Dim Var Objeto As ObjetoDim Var_Objeto As ObjetoDim R As Range; Dim Hoja As WorkSheet

Set Variable_Objeto = ObjetoSet R= ActiveSheet.Range("A1:B10“); Set Hoja = ActiveSheet

Ejemplo Practico:Sub macrobj()Di R A RDim R As RangeSet R = ActiveSheet.Range("A10:B15")R.Value = "Hola"R.Font.Bold = TrueEnd Sub

Page 44: Macros VBA en Excel 2003 y 2007

www.serverms.es

Valor lógico SIValor lógico SI

Si C di ió E If C di ió ThSi Condición EntoncesSenténcia1Senténcia2

If Condición ThenSenténcia1Senténcia2Senténcia2

.

.S é i N

Senténcia2..S é i NSenténciaN

Fin SiSenténciaN

End If

Page 45: Macros VBA en Excel 2003 y 2007

www.serverms.es

Ejemplo (Desarrolla tu mismo un ejemplo sencillo)Ejemplo (Desarrolla tu mismo un ejemplo sencillo)

Page 46: Macros VBA en Excel 2003 y 2007

www.serverms.es

Ejercicio:Ejercicio:Entrar una cantidad que representa el precio de algo por el teclado con la instrucción InputBox y guardarlo en la celda A1 de la hojacon la instrucción InputBox y guardarlo en la celda A1 de la hoja activa. 

Si el valor entrado desde el teclado (y guardado en A1) essuperior a 1000, pedir descuento con otro InputBox y guardarlo en la casilla A2 de la hoja activacasilla A2 de la hoja activa.

Calcular en A3 el precio de A1 menos el descuento de A2Calcular en A3, el precio de A1 menos el descuento de A2.

Page 47: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub Precios()

Range("A1").Value = InputBox("Entrar el precio", "Entrar")

Sub Precios()

If Range("A1").Value > 1000 Then

( ) ( )Range("A2").Value = InputBox("Entrar Descuento", "Entrar")

End If

Range("A3").Value = Range("A1").Value ‐ Range("A2").Value

End Sub

Page 48: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub Precios()Dim Precio As IntegerDim Descuento As IntegerPrecio = 0Precio = 0Descuento = 0Precio = (InputBox("Entrar el precio", "Entrar")( p ( p , )

If Precio > 1000 ThenDescuento = InputBox("Entrar Descuento", "Entrar")p ( , )End If

Range("A1").Value = Preciog ( )Range("A2").Value = DescuentoRange("A3").Value = Precio ‐ Descuento

End Sub

Page 49: Macros VBA en Excel 2003 y 2007

www.serverms.es

‘Compara celdas si son iguales las pone en AZULCompara celdas, si son iguales, las pone en AZUL

S b C di i l2()Sub Condicional2()If Range("A1").Value = Range("A2").Value ThenRange("A1").Font.Color = RGB(0, 0, 255)Range("A2").Font.Color = RGB(0, 0, 255)End IfEnd Sub

Page 50: Macros VBA en Excel 2003 y 2007

www.serverms.es

‘Compara celdas si son iguales las pone en AZULCompara celdas, si son iguales, las pone en AZUL

S b C di i l2()Sub Condicional2()If Range("A1").Value = Range("A2").Value ThenRange("A1").Font.Color = RGB(0, 0, 255)Range("A2").Font.Color = RGB(0, 0, 255)End IfEnd Sub

Page 51: Macros VBA en Excel 2003 y 2007

www.serverms.es

IF ThenIF …… Then ……

IF Th E d IFIF …… Then ……End IF

IF …… Then ……Else …… End IF

IF …… Then …… ElseIf …… Else …… End IF

Page 52: Macros VBA en Excel 2003 y 2007

www.serverms.es

Deberán cumplirse todas las condicionesDeberán cumplirse todas las condiciones

If Condición1 And Condición2 ThenIf Condición1 And Condición2 Then…. SenteciasEnd IfEnd If

Page 53: Macros VBA en Excel 2003 y 2007

www.serverms.es

Deberán cumplirse UNA de las condicionesDeberán cumplirse UNA de las condiciones

If Condición1 Or Condición2 ThenIf Condición1 Or Condición2 Then…. SenteciasEnd IfEnd If

Page 54: Macros VBA en Excel 2003 y 2007

www.serverms.es

No deberá cumplirse la condiciónNo deberá cumplirse la condición

If NOT(Condición) ThenIf NOT(Condición) Then…. SenteciasEnd IfEnd If

Page 55: Macros VBA en Excel 2003 y 2007

www.serverms.es

Var 1 Var2 Rspsta Var1 Var2 RspstaFalse False False False False FalseFalse True False False True TrueTrue False False True False TrueTrue False False True False TrueTrue True True True True True

Y O

Page 56: Macros VBA en Excel 2003 y 2007

www.serverms.es

En función del Valor de UNA casilla variable expresiónEn función del Valor de UNA casilla, variable, expresión….

Select Case ExpresiónC lCase valores :

Instrucciones.C lCase valores :

Instrucciones.….Case Else‘Si no se cumple ninguna de las anterioresSi no se cumple ninguna de las anteriores

End Select

Page 57: Macros VBA en Excel 2003 y 2007

Sub Ejemplo_15()Dim Signo As StringDi V l 1 A I t V l 2 A I t T t l A I t

www.serverms.es

Dim Valor1 As Integer, Valor2 As Integer, Total As IntegerValor1 = Range("A1").ValueValor2 = Range("A2").ValueSi R ("B1") V lSigno = Range("B1").ValueTotal=0If Signo = "+" Then

Total Valor1 + Valor2Total = Valor1 + Valor2End ifIf Signo = "‐" Then

Total = Valor1 Valor2Total = Valor1 ‐ Valor2End ifIf Signo = "x" Then

Total = Valor1 * Valor2Total = Valor1 * Valor2End ifIf Signo = ":" Then

Total = Valor1 / Valor2Total = Valor1 / Valor2End ifActiveCell.Range("A3").Value = TotalEnd SubEnd Sub

Page 58: Macros VBA en Excel 2003 y 2007

Sub Ejemplo_16()Dim Signo As StringDi V l 1 A I t V l 2 A I t T t l A I t

www.serverms.es

Dim Valor1 As Integer, Valor2 As Integer, Total As IntegerValor1 = ActiveSheet.Range("A1").ValueValor2 = ActiveSheet.Range("A2").ValueSi A ti Sh t R ("A3") V lSigno = ActiveSheet.Range("A3").ValueSelect Case signo

Case "+"T t l V l 1 + V l 2Total = Valor1 + Valor2

Case "‐"Total = Valor1 ‐ Valor2

Case "x"Case "x"Total = Valor1 * Valor2

Case ":"Total Valor1 / Valor2Total = Valor1 / Valor2

Case ElseTotal = 0

End SelectEnd Select

ActiveCell.Range("A3").Value = TotalEnd SubEnd Sub

Page 59: Macros VBA en Excel 2003 y 2007

www.serverms.es

Cuadro de diálogo con botonesCuadro de diálogo con botonesVariable = MsgBox( “Mensaje”, Botones, “Título”)MsgBox “Mensaje”, Botones, “Titutlo”MsgBox  Mensaje , Botones,  Titutlo

VbOK 1  AceptarVbCancel 2  CancelarVbAbort 3  AnularVbRetry 4  ReintentarVbIgnore 5  IgnorarVbY 6 SíVbYes 6  SíVbNo 7  No.

Page 60: Macros VBA en Excel 2003 y 2007

www.serverms.es

Permiten ejecutar más de una vez las mismas sentenciasS b Ejemplo 20 ()Sub Ejemplo_20 ()Dim Nota As IntegerDim Media As SingleN t V l(I tB ("E t N t " "E t N t "))Nota = Val(InputBox("Entrar Nota : ","Entrar Nota"))ActiveSheet.Range("A1").Value = NotaMedia = Media + Nota

( (" " " "))Nota = Val(InputBox("Entrar Nota : ","Entrar Nota"))ActiveSheet.Range("A2").Value = NotaMedia = Media + NotaNota = Val(InputBox("Entrar Nota : ","Entrar Nota"))ActiveSheet.Range("A3").Value = NotaMedia = Media + NotaMedia = Media / 5ActiveSheet.Range("A6").Value = MediaEnd Sub

Page 61: Macros VBA en Excel 2003 y 2007

www.serverms.es

Se repite:Se repite:Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))ActiveSheet.Range("AX").Value = NotaActiveSheet.Range( AX ).Value   NotaMedia = Media + Nota

Con Estructuras ciclicas ahorramos lineas de código:

Page 62: Macros VBA en Excel 2003 y 2007

www.serverms.es

5 funciones fundamentales:5 funciones fundamentales:

◦ Para (For Next)Para (For…Next)◦ Do While...Loop (Hacer Mientras)◦ Do…Loop While.Do…Loop While.◦ Do..Loop Until (Hacer.. Hasta).◦ For Each

Page 63: Macros VBA en Excel 2003 y 2007

www.serverms.es

Para var =Valor Inicial Hasta Valor Final Paso Incremento Hacera a a a o _ c a asta a o _ a aso c e e o aceSentencia 1Sentencia 2…Sentencia N

Siguiente

For Varible = Valor_Inicial To Valor_Final Step IncrementoSentencia 1Sentencia 2Sentencia N

N V i blNext Variable

Page 64: Macros VBA en Excel 2003 y 2007

www.serverms.es

Ejemplo:je p oSub Ejemplo_21()Dim i As Integer

lDim Total As IntegerDim Valor As IntegerFor i=1 To 10o o 0Valor= Val(InputBox("Entrar un valor","Entrada"))Total = Total + Valor

Next iActiveSheet.Range("A1").Value = TotalEnd Subd Sub

Page 65: Macros VBA en Excel 2003 y 2007

www.serverms.es

Hacer Mientras (se cumpla la condición)ace e t as (se cu p a a co d c ó )Sentencia1Sentencia2Sentencia N

Fin Hacer Mientras

Do While (se cumpla la condición)Sentencia1Sentencia2Sentencia N

Loop

Page 66: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub Ejemplo_27()Dim Nombre As StringDi Ci d d A S iDim Ciudad As StringWorkSheets("Hoja1").ActivateActiveSheet.Range("A2").ActivateN b I tB ("E t l N b (R t T i ) " "N b ")Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")Do While Nombre <> ""

Ciudad  =  InputBox("Entre la Ciudad : ", "Ciudad")Ed d I tB ("E t l Ed d " "Ed d")Edad  =  InputBox("Entre la Edad : ", "Edad")Fecha = InputBox("Entra la Fecha : ", "Fecha")With ActiveCell

Value Nombre.Value = Nombre.Offset(0,1).Value = Ciudad

End WithActiveCell Offset(1 0) ActivateActiveCell.Offset(1,0).ActivateNombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")

LoopEnd SubEnd Sub

Page 67: Macros VBA en Excel 2003 y 2007

www.serverms.es

DoNombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")Edad = Val(InputBox("Entre la Edad : ", "Edad"))fecha = CDate(InputBox("Entra la Fecha : " "Fecha"))fecha = CDate(InputBox( Entra la Fecha :  ,  Fecha ))With ActiveCell.Value = Nombreff ( ) l d d.Offset(0, 1).Value = Ciudad

.Offset(0, 2).Value = Edad

.Offset(0, 3).Value = fecha( , )End WithActiveCell.Offset(1, 0).ActivateMas Datos = MsgBox("Otro registro ?" vbYesNo + vbQuestion “Datos")Mas_Datos = MsgBox( Otro registro ? , vbYesNo + vbQuestion,  Datos )‘Mientras Mas_Datos = vbYesLoop While Mas_Datos = vbYes

Page 68: Macros VBA en Excel 2003 y 2007

www.serverms.es

DoNombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")Edad = Val(InputBox("Ent re la Edad : ", "Edad"))fecha = CDate(InputBox("Fecha Nac : ", "Fecha"))( p ( , ))With ActiveCell

.Value = NombreOffset(0 1) Value = Ciudad.Offset(0, 1).Value = Ciudad.Offset(0, 2).Value = Edad.Offset(0, 3).Value = fecha

E d Wi hEnd WithActiveCell.Offset(1, 0).ActivateMas_Datos = MsgBox("Otro registro ?", vbYesNo + vbQuestion, "Entrada de datos")'Hasta que Mas_Datos sea igual a vbNoLoop Until Mas_Datos = vbNo

Page 69: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub Ejemplo_29()Dim Nuevo Nombre As String_ gDim Hoja As Worksheet'Para cada hoja del conjunto WorkSheetsFor Each Hoja In WorksheetsNuevo_Nombre = InputBox("Nombre de la Hoja : " & Hoja.Name, "Nombrar Hojas")Hojas )If Nuevo_Nombre <> "" Then

Hoja.Name = Nuevo_NombreEnd If

NextEnd SubEnd Sub

Page 70: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub Ejemplo_30()Dim R As Rangeg'Para cada celda del rango A1:B10 de la hoja activaFor Each R In ActiveSheet.Range("A1:B10")R.Value = InputBox("Entrar valor para la celda " & R.Address, "Entrada de valores")NextEnd SubEnd Sub

Page 71: Macros VBA en Excel 2003 y 2007

www.serverms.es

Crear un cuadro de dialogoCrear un cuadro de dialogoIntroducir, ver, … datosH i O iHerramientas > Opciones

Aplicaciones de aspecto profesionalMás guiado e intuitivo

Page 72: Macros VBA en Excel 2003 y 2007

www.serverms.es

Abrir Editor de VB (Alt+F11)Abrir Editor de VB (Alt+F11)Insertar un objeto Userform.S l i l Lib◦ Seleccionamos el Libro◦ Botón drcho Insertar > Userform

Page 73: Macros VBA en Excel 2003 y 2007

www.serverms.es

Podemos diseñar nuestro formulario con controlesPodemos diseñar  nuestro formulario con controles

Situándonos encima vemos la descripción del control

Page 74: Macros VBA en Excel 2003 y 2007

www.serverms.es

Seleccionar objetos: sirve para seleccionar controles insertados en el UserformSeleccionar objetos: sirve para seleccionar controles insertados en el UserformLabel: sirve para poner un título o un texto.Textbox: sirve para que un usuario introduzca datos. C b i i lij ió d liComboBox: sirve para que un usuario elija una opción de una lista.ListBox: sirve para que un usuario rellene o elija varias opciones de una lista.CheckBox: sirve para que un usuario active una determinada función.OptionButton:  Seleccionar una opción determinada entre varias posibilidades. ToggleButton:  Activa o desactiva alguna funcionalidad. "Encendido" / "Apagado".

Page 75: Macros VBA en Excel 2003 y 2007

www.serverms.es

Frame: sirve para agrupar elementos de un UserformFrame: sirve para agrupar elementos de un UserformCommandButton: es un simple botón que nos permite ejecutar acciones.TabStrip: en un mismo Userform se pueden crear distintas secciones.

l i i U f d di i á iMultiPage: en un mismo Userform se pueden crear distintas páginas.ScrollBar: Para listas con muchos elementos el scrollbar nos permite navegarlos.SpinButton: permite aumentar o disminuir valores.Image: permite introducir imágenes en el Userform.RefEdit: permite hacer referencia a una celda de Excel.

Page 76: Macros VBA en Excel 2003 y 2007

www.serverms.es

Page 77: Macros VBA en Excel 2003 y 2007

www.serverms.es

Establecer objetivo y controlesEstablecer objetivo y controles◦ Objetivo

Crear un Userform para que un usuario complete unos datosCrear un Userform para que un usuario complete unos datos personales (Nombre, Edad y Fecha de Nacimiento). Luego que el usuario complete sus datos al apretar un botón los mismos se l á bl d E lvolcarán en una tabla de Excel.

◦ Los controles que utilizaremos son:◦ Los controles que utilizaremos son:Textbox: para que el usuario ingrese los datosLabel: para darle el nombre de los TextboxpCommandButton: para proceder con el ingreso de datos o cancelar

Page 78: Macros VBA en Excel 2003 y 2007

www.serverms.es

Creamos la tabla en la hojaCreamos la tabla en la hoja

C U f (UF)Creamos un Userform (UF)

En el código del Agregar:

Page 79: Macros VBA en Excel 2003 y 2007

www.serverms.es

Private Sub agregar Click()g g _ ()'definimos las variablesDim iFila As LongDim ws As Worksheet

' Copia los datos a la tabla excelws.Cells(iFila, 1).Value = 

Me.TBNombre.ValueSet ws = Worksheets(1)

' Encuenta la siguiente fila vacía

ws.Cells(iFila, 2).Value = Me.TBEdad.Value

ws.Cells(iFila, 3).Value = Me TBFecha Valueg

iFila = ws.Cells(Rows.Count, 1) _.End(xlUp).Offset(1, 0).Row

Me.TBFecha.Value

' Limpa el formularioMe TBNombre Value = ""

' Verifica que se ingrese un nombreIf Me.TBNombre.Value = "" ThenMe.TBNombre.SetFocus

Me.TBNombre.Value = Me.TBEdad.Value = ""Me.TBFecha.Value = ""Me TBNombre SetFocus

MsgBox "Debe ingresar un nombre"Exit SubEnd If

Me.TBNombre.SetFocusEnd Sub

Page 80: Macros VBA en Excel 2003 y 2007

www.serverms.es

Desarrollar funciones macro separadasDesarrollar funciones macro separadasUna única función “Main” que llame a todas

Sub Macro1()'El código de mi Macro1Macro2

Sub Macro1()'El código de mi Macro1Call Macro2

End Sub End Sub

Page 81: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub SuperMacro()p ()'Asigna Formato NuméricoSelection.NumberFormat = "#,##0;[Red]#,##0“

'Asigna BordesgWith Selection.Borders.LineStyle = xlContinuous.Weight = xlThin

Sub Macro1()Call FormatoNCall Bordesg

.ColorIndex = xlAutomaticEnd With

'Asigna Color de Relleno

Call BordesCall RellenoEnd Sub

With Selection.Interior.ColorIndex = 36.Pattern = xlSolid.PatternColorIndex = xlAutomatic

End WithEnd Sub

Page 82: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub FormatoN() Sub Relleno()Sub FormatoN()'Asigna Formato NuméricoSelection.NumberFormat = 

"# ##0;[Red]# ##0“

Sub Relleno()'Asigna Color de RellenoWith Selection.Interior

C l I d 36#,##0;[Red]#,##0End Sub

Sub Bordes()

.ColorIndex = 36

.Pattern = xlSolid

.PatternColorIndex = xlAutomaticSub Bordes()'Asigna BordesWith Selection.Borders

End WithEnd Sub

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic.ColorIndex  xlAutomaticEnd With

End Sub

Page 83: Macros VBA en Excel 2003 y 2007

www.serverms.es

Sub Macro() Modo DepuraciónSub Macro()range("a2).selectEnd Sub

Modo Depuración◦ Ejecuta Paso a Paso◦ Determina mejor donde está el 

Sab Macro()Range("A2").Select

error

End Sub

Sub Macro()Sub Macro()If Range("a2").value = 2 ThenMsgBox "Mal“End Sub

Page 84: Macros VBA en Excel 2003 y 2007

www.serverms.es

Podemos convertir nuestra macro en ComplementoPodemos convertir nuestra macro en ComplementoUtil para posible distribución.

Desde el Editor de VB◦ Archivo > Guardar como…◦ Guardar como tipo: Complemento de Microsoft Excel (XLA)

Para instalarlo◦ Herramientas > Complementos > Examinar◦ Herramientas > Complementos > Examinar

Page 85: Macros VBA en Excel 2003 y 2007

www.serverms.es

Existen 3 niveles de seguridad (depende de la versión)Existen 3 niveles de seguridad (depende de la versión)Recomendable “Medio”

Page 86: Macros VBA en Excel 2003 y 2007

www.serverms.es

Al igual que hojas o el Libro las macros se puedenAl igual que hojas o el Libro, las macros se pueden proteger◦ Herramientas > Propiedades de VBAProject >Proteger◦ Herramientas > Propiedades de VBAProject...>Proteger

Page 87: Macros VBA en Excel 2003 y 2007

www.serverms.es

Evitar actualización de pantallaEvitar actualización de pantallaApplication.ScreenUpdating=False

Prevenir cálculos mientras se ejecuta el códigoApplication Calculation = xlCalculationManualApplication.Calculation = xlCalculationManual'El código de la macro aquíApplication.Calculation = xlCalculationAutomaticpp

Evitar el uso de Copiar, Pegar y SeleccionarEvitar el uso de Copiar, Pegar y Seleccionar◦ Range("C10:C12").Copy Range("E10")