View
216
Download
0
Category
Preview:
Citation preview
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
www.serverms.es
ContenidosContenidos◦ Concepto de macro
◦ Creación automática de macro
◦ Edición de macro
◦ Asignación a objetos
◦ Editor VB Excel
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
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
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.
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
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.
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
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
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,…).
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.
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)
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
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
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:
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 )
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
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
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
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
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
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
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
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
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
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
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
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
www.serverms.es
ArgumentosArgumentos◦ Declarar variable◦ Pedira al usuario el valor del argumento◦ Pedira al usuario el valor del argumento
◦ Variable As tipop
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”
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
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)”
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
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
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
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
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
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
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
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
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
www.serverms.es
Ejemplo (Desarrolla tu mismo un ejemplo sencillo)Ejemplo (Desarrolla tu mismo un ejemplo sencillo)
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.
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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:
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
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
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
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
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
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
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
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
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
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
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
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
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".
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.
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
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:
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
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
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
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
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
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
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”
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
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")
Recommended