Professional Documents
Culture Documents
MCSE MCT
www.serverms.es
` Contenidos
◦ Concepto de macro
◦ Creación automática de macro
◦ Edición de macro
◦ Asignación a objetos
www.serverms.es
` Contenidos
◦ Concepto de macro
◦ Creación automática de macro
◦ Edición de macro
◦ Asignación a objetos
◦ Editor VB Excel
www.serverms.es
` Conceptos fundamentales
Conceptos fundamentales
◦ Procedimientos y módulos
◦ Estructuras (IF,For‐Next, Do‐Loop,…)
◦ OPM
◦ Variables, constantes,…
Variables, constantes,…
◦ MsgBox, Inputbox,…
◦ Errores y depuración de código
www.serverms.es
◦ Las
Las macros se escriben en lenguaje de programación VBA (Visual Basic
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
Se pueden definir 4 grandes "áreas"
áreas donde se aplican
donde se aplican
las macros que son:
◦ 1. Automatización de tareas y procesos que involucran
muchos pasos
muchos 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 j
un tedioso trabajo
◦ SOLUCIÓN: Macro
Ó
www.serverms.es
◦ Ninguna de ellas se ajusta a lo que queremos
g j q q
◦ SOLUCION: Macro. Aparecerá en el menú de funciones como
una más.
www.serverms.es
` Creación de nuevos comandos, complementos y
Creació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 loco
Me vuelvo loco
◦ SOLUCIÓN: Macro. Puedes crear un menú personalizado con
tus comandos más frecuentes
www.serverms.es
◦ 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 fruta
◦ Obj t serían las mismas frutas (naranjas, peras…).
Objetos: í l i f t ( j )
◦ 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 ejemplo
x Celda: alto, ancho, color, bloqueada o desbloqueada,…
x Hoja: visible u oculta, con o sin líneas de división,…
◦ Métodos: para una hoja,
Métodos: para una hoja
x activar, mover, copiar o borrar.
www.serverms.es
` Hablar de macros, lenguaje VBA y OPM es lo mismo.
Hablar de macros lenguaje VBA y OPM es lo mismo
` El lenguaje VBA solo está en inglés.
` L
Lenguaje fácil y muy intuitivo
j fá il i ii
◦ Ejemplos de Objetos VBA
x Cell (celda), Range (rango), Worksheet (hoja), Workbook (libro)
Cell (celda) Range (rango) Worksheet (hoja) Workbook (libro)
◦ Ejemplos de Propiedades VBA
x Value (valor), Color (color), Format (formato)
Value (valor), Color (color), Format (formato)
◦ Ejemplos de Métodos VBA
x Copy (copiar), Protect (proteger), Delete (borrar)
www.serverms.es
◦ Ver > Barras de Herramientas > Visual Basic
www.serverms.es
◦ Herramientas > Macros > Editor de Visual Basic
H i t >M > Edit d Vi l B i
◦ Desde
Desde el botón
el botón Editor de Visual Basic de la
Editor de Visual Basic de la Barra de
Barra de
Herramientas Visual Basic.
◦ Método abreviado del teclado: ALT+F11
www.serverms.es
www.serverms.es
` La
La Ventana Proyecto ‐
Ventana Proyecto VBA
VBA Project:
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:
◦ Manualmente
M l t
◦ 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 la
Objetivo: 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
1. Prepara el Editor de VB
Prepara el Editor de VB
1. 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 A1
Sub MiPrimeraMacro()
Range("A1").Value=1500
End Sub
www.serverms.es
` Cinco formas:
Cinco formas:
◦ Desde el mismo editor
x Desde el inicio de la macro pulsar F5
Desde el inicio de la macro pulsar F5
◦ Desde Excel
x F11 para volver a Excel
x Herramientas > Macros > Macro
x Seleccionamos la macro > Ejecutar
www.serverms.es
◦ Desde Objetos:
Desde Objetos:
x Ver > Barra de Herramientas > Dibujo
x Una vez creado el objeto, Botón Dcho.>Asignar Macro…
j , g
◦ Desde botones:
x Ver> Barra de herramientas > Personalizar.
x Comandos> Categorías> Macros
x Con el botón creado: Botón dcho.> Asignar Macro…
C l b tó d B tó d h Ai M
◦ Automáticamente:
x 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
◦ y p p j
Muy útiles para macros complejas
◦ 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")
Range( A1 ).Value = 1500
Value = 1500
◦ Corazón de la macro
◦ Objeto:
Objeto: Range(“A1”)
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
1. Grabar la macro
Grabar la macro
1. 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.
4 Borra Macro 1
Borra Macro 1 y escribe MiPrimeraMacro
y escribe MiPrimeraMacro
5. Pulsa Aceptar. A partir de ahora se grabara cada clic que hagas
6. Posiciónate en A1 y escribe 1500
7. Cuando termines presiona o Herramientas > Macros > Detener grabación
www.serverms.es
` Ver el código
Ver el código
www.serverms.es
` Escrita ` Grabada
1. Como la hicimos 1. Como la hicimos
1. Creamos un Libro Excel llamado Libro 1. Creamos un Libro Excel llamado Libro1
2
2. Herramientas > Macros > Grabar macro…
Herramientas > Macros > Grabar macro
2. Abrimos el editor de macros con ALT+F11
3. En la celda A1 escribimos 1500
3. En VBAProject (Libro1) hicimos doble clic en
4. Herramientas > Macros > Detener grabación
Hoja1 (Hoja1)
4. Escribimos el código de la macro.
Escribimos el código de la macro. 2. El código de la macro
1. Con ALT+F11 accedemos al editor de
2. El código de la macro macros.
1. Con ALT+F11 accedemos al editor de 2. El código que escribimos manualmente fue
macros. el siguiente:
2. El código que escribimos manualmente fue Sub MiPrimeraMacro()
el siguiente: ' MiPrimeraMacro Macro
‘ escribe el valor 1500 en la celda A1 ' Macro grabada el 02/03/2008 por MSL
Sub MiPrimeraMacro() Range("A1").Select
Range( A1 ).Select
Range("A1").Value=1500 ActiveCell.FormulaR1C1 = "1500"
End Sub Range("B1").Select
End Sub
www.serverms.es
` Escrita ` Grabada
` Como la hicimos ` Como la hicimos
◦ Desventaja: Requiere conocer OPM ◦ Ventaja: No es necesario saber
programar
` El código de la macro
◦ Ventaja: Código más eficiente y ` El código de la macro
sintético ◦ Desventaja: Código habitualmente
redundante y excesivo
' Esta macro escribe el valor 1500 en la celda A1
Sub MiPrimeraMacro()
Sub MiPrimeraMacro()
' MiPrimeraMacro Macro
Range("A1").Value = 1500 ' Macro grabada el 02/03/2008 por MSL
End Sub Range("A1").Select
ActiveCell.FormulaR1C1 = "1500"
ActiveCell.FormulaR1C1 1500
Range("B1").Select
End Sub
www.serverms.es
Sub Macro ()
Range(“A1”)=1500
End Sub
www.serverms.es
Function Terminar() As Boolean
y
Dim x As Byte
x = MsgBox("¿Desea salir?", vbOKCancel, "Salir")
If x = 1 Then
ActiveCell.Value = "SI"
End If
End Function
www.serverms.es
Function CalcEdad(FechaNac As Date)
Dim zFecha As Date
CalcEdad = Abs(DateDiff("YYYY", FechaNac, Date))
zFecha = DateAdd("YYYY", CalcEdad, FechaNac)
If zFecha > Date Then CalcEdad = CalcEdad ‐ 1
End Function
www.serverms.es
` Argumentos
◦ Declarar variable
◦ Pedira al usuario el valor del argumento
Pedira al usuario el valor del argumento
◦ Variable As tipo
p
www.serverms.es
` Han de escribirse en “ThisWorkbook”
www.serverms.es
` 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
` Han de escribirse en “Hoja1(Nombre)”
www.serverms.es
` Ejemplo:
Private Sub Worksheet_Activate()
MsgBox "Hola, Estas en la Hoja 1"
End Sub
Sub Primero()
Sub Primero()
Range("A1").Value = "Hola"
End Sub
` Queremos que sea el usuario quien diga que poner
` Necesitamos un lugar donde guardar lo que escriba
` SOLUCIÓN: Variable
` Ventana para introducir datos
Ventana para introducir datos
` SINTAXIS: InputBox(Mensaje, Título).
` En nuestro caso:
◦ MiVariable = (“Introduzca datos”, “Entrada de datos”)
1.
Sub datos()
Dim MiVariable As String
Dim MiVariable As String
MiVariable = InputBox("Introduzca Datos", "Entrada de Datos")
ActiveSheet.Range( A1 ).Value = MiVariable
ActiveSheet.Range("A1").Value MiVariable
End Sub
2.
Sub datos()
ActiveSheet.Range("A1").Value = InputBox ("Introduzca Datos", "Entrada de
Datos")
End Sub
www.serverms.es
3.
Sub Entrar_Valor
Di Casilla As String
Dim C ill A S i
Dim Texto As String
Casilla = InputBox("En que casilla quiere entrar el valor", "Entrar Casilla")
Texto = InputBox (“Introduzca datos para ” &Casilla, "Entrada de Datos")
ActiveSheet Range(Casilla) Value = Texto
ActiveSheet.Range(Casilla).Value = Texto
End Sub
www.serverms.es
` Herramientas > Opciones > Requerir declaración de Var.
Herramientas > Opciones > Requerir declaración de Var
` MUY RECOMENDABLE declarar variables
` Ejemplo practico:
Ejemplo practico:
Sub Entrar_Valor
Texto = InputBox(“Introduzca datos", "Entrada de datos")
ActiveSheet Range("A1")
ActiveSheet.Range( A1 ).Value
Value = Testo
Testo
End Sub
Option Explicit
Sub Entrar_Valor
Dim Texto As String
Texto = InputBox(
Texto InputBox(“Introduzca datos",, "Entrada
Introduzca datos de datos"))
Entrada de datos
ActiveSheet.Range("A1").Value = Testo
End Sub
www.serverms.es
` Byte
Byte || 1 byte
1 byte || 0 a 255
0 a 255
` Integer |2 bytes | ‐32.768 a 32.767
` D i l
Decimal |14 b
|14 bytes |D i l
|Decimales
` Date |8 bytes |Fechas
` String |10 bytes |Texto
` Variant |22 bytes |= String
www.serverms.es
` Dim Var_Objeto
Var Objeto As Objeto
As Objeto
` Dim R As Range; Dim Hoja As WorkSheet
` Ejemplo Practico:
Sub macrobj()
Di R As Range
Dim R A R
Set R = ActiveSheet.Range("A10:B15")
R.Value = "Hola"
R.Font.Bold = True
End Sub
www.serverms.es
` Valor lógico SI
Valor lógico SI
Si C di ió Entonces
Si Condición E If Condición Then
C di ió Th
Senténcia1 Senténcia1
Senténcia2 Senténcia2
. .
. .
S é i N
SenténciaN S é i N
SenténciaN
Fin Si End If
www.serverms.es
` 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 hoja
con 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) es
superior a 1000, pedir descuento con otro InputBox y guardarlo en la
casilla A2 de la hoja activa
casilla A2 de la hoja activa.
Sub Precios()
Sub Precios()
Range("A1").Value = InputBox("Entrar el precio", "Entrar")
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 Integer
Dim Descuento As Integer
Precio = 0
=0
Descuento = 0
Precio = (InputBox("Entrar el precio", "Entrar")
( p ( p , )
If Precio > 1000 Then
Descuento = InputBox("Entrar Descuento", "Entrar")
p ( , )
End If
Range("A1").Value
g ( ) = Precio
Range("A2").Value = Descuento
Range("A3").Value = Precio ‐ Descuento
End Sub
www.serverms.es
‘Compara
Compara celdas, si
celdas si son iguales, las
son iguales las pone en AZUL
pone en AZUL
SSubb Condicional2()
C di i l2()
If Range("A1").Value = Range("A2").Value Then
Range("A1").Font.Color = RGB(0, 0, 255)
Range("A2").Font.Color = RGB(0, 0, 255)
End If
End Sub
www.serverms.es
‘Compara
Compara celdas, si
celdas si son iguales, las
son iguales las pone en AZUL
pone en AZUL
SSubb Condicional2()
C di i l2()
If Range("A1").Value = Range("A2").Value Then
Range("A1").Font.Color = RGB(0, 0, 255)
Range("A2").Font.Color = RGB(0, 0, 255)
End If
End Sub
www.serverms.es
` IF
IF …… Then ……
Then
` IF
IF …… Then ……End IF
Th E d IF
` IF …… Then ……Else …… End IF
If Condición1 And
Condición1 And Condición2 Then
Condición2 Then
…. Sentecias
End If
End If
www.serverms.es
If Condición1 Or
Condición1 Or Condición2 Then
Condición2 Then
…. Sentecias
End If
End If
www.serverms.es
If NOT(Condición) Then
NOT(Condición) Then
…. Sentecias
End If
End If
www.serverms.es
Y O
www.serverms.es
ActiveCell.Range("A3").Value = Total
End Sub
End Sub
www.serverms.es
` Cuadro de diálogo con botones
Cuadro de diálogo con botones
` Variable = MsgBox( “Mensaje”, Botones, “Título”)
` MsgBox “Mensaje”,
MsgBox Mensaje , Botones,
Botones, “Titutlo”
Titutlo
` VbOK 1 Aceptar
` VbCancel 2 Cancelar
` VbAbort 3 Anular
` VbRetry 4 Reintentar
` VbIgnore 5 Ignorar
` VbY
VbYes 6
6 Sí
` VbNo 7 No.
www.serverms.es
` Permiten ejecutar más de una vez las mismas sentencias
SSub
b Ejemplo_20 ()
Ejemplo 20 ()
Dim Nota As Integer
Dim Media As Single
N t V l(I
Nota = Val(InputBox("Entrar Nota : ","Entrar Nota"))
tB ("E t N t " "E t N t "))
ActiveSheet.Range("A1").Value = Nota
Media = Media + Nota
Nota = Val(InputBox("Entrar Nota : ","Entrar Nota"))
( (" "" "))
ActiveSheet.Range("A2").Value = Nota
Media = Media + Nota
Nota = Val(InputBox("Entrar Nota : ","Entrar Nota"))
ActiveSheet.Range("A3").Value = Nota
Media = Media + Nota
Media = Media / 5
ActiveSheet.Range("A6").Value = Media
End Sub
www.serverms.es
` Se repite:
Se repite:
Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))
ActiveSheet.Range("AX").Value
ActiveSheet.Range( AX ).Value = Nota
Nota
Media = Media + Nota
` 5 funciones fundamentales:
5 funciones fundamentales:
◦ Para (For…Next)
Para (For Next)
◦ Do While...Loop (Hacer Mientras)
◦ Do…Loop While.
◦ Do..Loop Until (Hacer.. Hasta).
◦ For Each
www.serverms.es
Para
a a var
a =Valor
a o _Inicial
c a Hasta
asta Valor
a o _Final
a Paso
aso Incremento Hacer
c e e o ace
Sentencia 1
Sentencia 2…
Sentencia N
Siguiente
` Ejemplo:
je p o
Sub Ejemplo_21()
Dim i As Integer
Dim Total As Integer
l
Dim Valor As Integer
o i=1 To
For o 10
0
Valor= Val(InputBox("Entrar un valor","Entrada"))
Total = Total + Valor
Next i
ActiveSheet.Range("A1").Value = Total
End Sub
d Sub
www.serverms.es
Hacer Mientras (se cumpla la condición)
ace e t as (se cu p a a co d c ó )
Sentencia1
Sentencia2
Sentencia N
Fin Hacer Mientras
Do While (se cumpla la condición)
Sentencia1
Sentencia2
Sentencia N
Loop
www.serverms.es
Sub Ejemplo_27()
Dim Nombre As String
Dim
Di Ciudad As String
Ci d d A S i
WorkSheets("Hoja1").Activate
ActiveSheet.Range("A2").Activate
N b
Nombre = InputBox("Entre el Nombre (Return
I tB ("E t l N b (R t para Terminar) : ", "Nombre")
T i ) " "N b ")
Do While Nombre <> ""
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Ed d I
Edad = InputBox("Entre la Edad : ", "Edad")
tB ("E t l Ed d " "Ed d")
Fecha = InputBox("Entra la Fecha : ", "Fecha")
With ActiveCell
.Value = Nombre
Value Nombre
.Offset(0,1).Value = Ciudad
End With
ActiveCell Offset(1 0) Activate
ActiveCell.Offset(1,0).Activate
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Loop
End Sub
End Sub
www.serverms.es
Do
Nombre = 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
fecha = CDate(InputBox( Entra la Fecha :
la Fecha : ", "Fecha"))
Fecha ))
With ActiveCell
.Value = Nombre
.Offset(0, 1).Value = Ciudad
ff ( ) l d d
.Offset(0, 2).Value = Edad
( , )
.Offset(0, 3).Value = fecha
End With
ActiveCell.Offset(1, 0).Activate
Mas Datos = MsgBox(
Mas_Datos = MsgBox("Otro registro ?", vbYesNo
Otro registro ? vbYesNo + vbQuestion,
+ vbQuestion “Datos")
Datos )
‘Mientras Mas_Datos = vbYes
Loop While Mas_Datos = vbYes
www.serverms.es
Do
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Ent re la Edad : ", "Edad"))
( p (
fecha = CDate(InputBox("Fecha Nac : ", "Fecha"))
, ))
With ActiveCell
.Value = Nombre
.Offset(0, 1).Value = Ciudad
Offset(0 1) Value = Ciudad
.Offset(0, 2).Value = Edad
.Offset(0, 3).Value = fecha
E d Wi h
End With
ActiveCell.Offset(1, 0).Activate
Mas_Datos = MsgBox("Otro registro ?", vbYesNo + vbQuestion, "Entrada de datos")
'Hasta que Mas_Datos sea igual a vbNo
Loop Until Mas_Datos = vbNo
www.serverms.es
Sub Ejemplo_29()
Dim Nuevo_Nombre As Stringg
Dim Hoja As Worksheet
'Para cada hoja del conjunto WorkSheets
For Each Hoja In Worksheets
Nuevo_Nombre = InputBox("Nombre de la Hoja : " & Hoja.Name, "Nombrar
Hojas )
Hojas")
If Nuevo_Nombre <> "" Then
Hoja.Name = Nuevo_Nombre
End If
Next
End Sub
End Sub
www.serverms.es
Sub Ejemplo_30()
Dim R As Rangeg
'Para cada celda del rango A1:B10 de la hoja activa
For Each R In ActiveSheet.Range("A1:B10")
R.Value = InputBox("Entrar valor para la celda " & R.Address, "Entrada de valores")
Next
End Sub
End Sub
www.serverms.es
` Crear un cuadro de dialogo
Crear un cuadro de dialogo
` Introducir, ver, … datos
` H
Herramientas > Opciones
i O i
` Aplicaciones de aspecto profesional
` Más guiado e intuitivo
www.serverms.es
` Abrir Editor de VB (Alt+F11)
Abrir Editor de VB (Alt+F11)
` Insertar un objeto Userform.
◦ Seleccionamos el Libro
S l i l Lib
◦ Botón drcho Insertar > Userform
www.serverms.es
` Situándonos encima vemos la descripción del control
www.serverms.es
` Seleccionar objetos: sirve para seleccionar controles insertados en el Userform
Seleccionar objetos: sirve para seleccionar controles insertados en el Userform
` Label: sirve para poner un título o un texto.
` Textbox: sirve para que un usuario introduzca datos.
` C b
ComboBox: sirve para que un usuario elija una opción de una lista.
i i lij ió d li
` 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 Userform
Frame: sirve para agrupar elementos de un Userform
` CommandButton: es un simple botón que nos permite ejecutar acciones.
` TabStrip: en un mismo Userform se pueden crear distintas secciones.
` MultiPage: en un mismo Userform
li i U f se pueden crear distintas páginas.
d di i á i
` 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
www.serverms.es
◦ Los controles que utilizaremos son:
Los controles que utilizaremos son:
x Textbox: para que el usuario ingrese los datos
x Label: para darle el nombre de los Textbox
p
x CommandButton: para proceder con el ingreso de datos o
cancelar
www.serverms.es
` C
Creamos un Userform
U f (UF)
` En el código del Agregar:
www.serverms.es
Private Sub agregar
g g _Click()
()
'definimos las variables ' Copia los datos a la tabla excel
Dim iFila As Long ws.Cells(iFila, 1).Value =
Dim ws As Worksheet Me.TBNombre.Value
Set ws = Worksheets(1) ws.Cells(iFila, 2).Value =
Me.TBEdad.Value
' Encuenta la siguiente fila vacía
g ws.Cells(iFila, 3).Value =
Me TBFecha Value
Me.TBFecha.Value
iFila = ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row
' Limpa el formulario
Me TBNombre Value =
Me.TBNombre.Value = ""
' Verifica que se ingrese un nombre
Me.TBEdad.Value = ""
If Me.TBNombre.Value = "" Then
Me.TBFecha.Value = ""
Me.TBNombre.SetFocus
Me TBNombre SetFocus
Me.TBNombre.SetFocus
MsgBox "Debe ingresar un nombre"
End Sub
Exit Sub
End If
www.serverms.es
` Desarrollar funciones macro separadas
Desarrollar funciones macro separadas
` Una única función “Main” que llame a todas
Sub Macro1() Sub Macro1()
'El código de mi Macro1 'El código de mi Macro1
Macro2 Call Macro2
End Sub End Sub
www.serverms.es
Sub SuperMacro()
p ()
'Asigna Formato Numérico
Selection.NumberFormat = "#,##0;[Red]#,##0“
'Asigna Bordes
g
With Selection.Borders Sub Macro1()
.LineStyle = xlContinuous Call FormatoN
.Weight
g = xlThin Call Bordes
.ColorIndex = xlAutomatic Call Relleno
End With End Sub
'Asigna Color de Relleno
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
www.serverms.es
Sub FormatoN()
Sub FormatoN() Sub Relleno()
Sub Relleno()
'Asigna Formato Numérico 'Asigna Color de Relleno
Selection.NumberFormat = With Selection.Interior
"##,##0;[Red]#,##0
##0;[Red]# ##0“ .ColorIndex
C l I d = 36 36
End Sub .Pattern = xlSolid
.PatternColorIndex = xlAutomatic
Sub Bordes()
Sub Bordes()
End With
'Asigna Bordes
End Sub
With Selection.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
xlAutomatic
End With
End Sub
www.serverms.es
Sub Macro()
Sub Macro() ` Modo Depuración
range("a2).select ◦ Ejecuta Paso a Paso
End Sub ◦ Determina mejor donde está el
error
Sab Macro()
Range("A2").Select
End Sub
Sub Macro()
Sub Macro()
If Range("a2").value = 2 Then
MsgBox "Mal“
End Sub
www.serverms.es
` Desde el Editor de VB
◦ Archivo > Guardar como…
◦ Guardar como tipo: Complemento de Microsoft Excel (XLA)
` Para instalarlo
◦ Herramientas > Complementos
> Complementos > Examinar
> Examinar
www.serverms.es
` Existen 3 niveles
3 niveles de seguridad
de seguridad (depende de la versión)
de la versión)
` Recomendable “Medio”
www.serverms.es
` Al igual que hojas o el Libro, las macros se pueden
Al igual que hojas o el Libro las macros se pueden
proteger
◦ Herramientas > Propiedades de VBAProject...>Proteger
Herramientas > Propiedades de VBAProject >Proteger
www.serverms.es