Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Macros VBA Exce 2003 y 2007
Macros VBA Exce 2003 y 2007
MCSEMCT
www.serverms.es
Conceptosbsicos
Creacin de macros
Creacindemacros
Automatizartareas
p
ConceptosfundamentalesdeVBExcel
Contenidos
Conceptodemacro
Creacinautomticademacro
Edicindemacro
Asignacinaobjetos
www.serverms.es
Contenidos
Conceptodemacro
Creacinautomticademacro
Edicindemacro
Asignacinaobjetos
EditorVBExcel
www.serverms.es
Conceptos fundamentales
Conceptosfundamentales
Procedimientosymdulos
Estructuras(IF,ForNext,DoLoop,)
OPM
Variables,constantes,
Variables, constantes,
MsgBox,Inputbox,
Erroresydepuracindecdigo
www.serverms.es
www.serverms.es
Sepuedendefinir4grandes
Se
pueden definir 4 grandes "reas"
reas dondeseaplican
donde se aplican
lasmacrosqueson:
1. Automatizacindetareasyprocesosqueinvolucran
muchos pasos
muchospasos
2. Creacindenuevasfuncionesamedida(apartedelasque
yaposeeExcel!)
3.Creacindenuevoscomandos,complementosymens.
4. Creacindecompletasaplicacionesamedida.
www.serverms.es
Automatizacin de procesos:
Automatizacindeprocesos:
Todoslosdasllevamosacabolasmismasacciones(Centrar,
Negrita, Tamao x, )
Negrita,Tamaox,)
Individualmentesonmuysencillas,peroenconjuntoforman
y
p
j
untediosotrabajo
SOLUCIN:Macro
www.serverms.es
www.serverms.es
Creacindenuevoscomandos,complementosy
Creacin
de nuevos comandos complementos y
mens:
Cadaveztengoquebuscarcomandosendiferentesmens
Cada vez tengo que buscar comandos en diferentes mens
Mevuelvoloco
Me vuelvo loco
SOLUCIN:Macro.Puedescrearunmenpersonalizadocon
tuscomandosmsfrecuentes
www.serverms.es
www.serverms.es
`
`
(OPM).
(OPM)
Supongamosquetenemosunacanastadefruta
Obj
Objetos:
t seranlasmismasfrutas(naranjas,peras).
l
i
f t (
j
)
Propiedades: seranlascaractersticasdelasfrutas(color,olor,
sabor textura )
sabor,textura).
Mtodos: sonlasaccionesquepodramosejercersobrelas
frutas(comprarlas,venderlas,comerlas,almacenarlas,
limpiarlas,quitarleslapiel,).
www.serverms.es
En Excel:
EnExcel:
Objetos:unlibroexcel,unahoja,unrango,unacelda,un
men, un grfico, una tabla dinmica, un cuadro de dilogo,
men,ungrfico,unatabladinmica,uncuadrodedilogo,
lasetiquetasdehojas,lascolumnas,lasfilas,etc.
Propiedades:porejemplo
x Celda:alto,ancho,color,bloqueadaodesbloqueada,
x Hoja:visibleuoculta,conosinlneasdedivisin,
www.serverms.es
`
`
`
Hablardemacros,lenguajeVBAyOPMeslomismo.
Hablar
de macros lenguaje VBA y OPM es lo mismo
EllenguajeVBAsoloesteningls.
L
Lenguajefcilymuyintuitivo
j f il
i ii
EjemplosdeObjetosVBA
x Cell(celda),Range(rango),Worksheet(hoja),Workbook(libro)
Cell (celda) Range (rango) Worksheet (hoja) Workbook (libro)
EjemplosdePropiedadesVBA
x Value(valor),Color(color),Format(formato)
Value (valor), Color (color), Format (formato)
EjemplosdeMtodosVBA
x Copy(copiar),Protect(proteger),Delete(borrar)
www.serverms.es
Ver>BarrasdeHerramientas>VisualBasic
www.serverms.es
www.serverms.es
www.serverms.es
La
LaVentanaProyecto
Ventana Proyecto VBA
VBAProject:
Project:
MuestraXLS(LibrosdeCalculo)yXLA
(Complementos) abiertos
(Complementos)abiertos
EnnuestrocasoVBAProject(Libro1)
j
Ventana de Cdigo:
www.serverms.es
Tres mtodos:
Tresmtodos:
Manualmente
M
l
t
MediantelaGrabadoradeMacros
Mediante la Grabadora de Macros
Combinacindeambas(grabandoymodificandoelcdigo)
(g
y
g )
www.serverms.es
Objetivo:Escribirelvalor1.500enlaceldaA1dela
Objetivo:
Escribir el valor 1 500 en la celda A1 de la
hojaExcel.
Comenzamosconunahojavaca
Ejecutamoslamacro
Ejecutamos la macro
DeberescribirenA1,1500
www.serverms.es
Prepara el Editor de VB
PreparaelEditordeVB
1
1.
1.
2.
3.
4.
2.
CreaunnuevolibroExcelygurdaloconelnombreLibro1.
AbreeleditordeVisualBasicconlasteclasALT+F11.
DobleclicenVBAProject(Libro1)paraverlascarpetas.
DobleclicenHoja1(Hoja1)paraempezaraescribirelcdigodelamacro
Escribimoslamacro
'Estamacroescribeelvalor1500enlaceldaA1
Sub MiPrimeraMacro()
Range("A1").Value=1500
EndSub
www.serverms.es
Cinco formas:
Cincoformas:
Desdeelmismoeditor
x DesdeeliniciodelamacropulsarF5
Desde el inicio de la macro pulsar F5
DesdeExcel
x F11paravolveraExcel
x Herramientas>Macros>Macro
x Seleccionamoslamacro>Ejecutar
www.serverms.es
DesdeObjetos:
Desde Objetos:
x Ver>BarradeHerramientas>Dibujo
x Unavezcreadoelobjeto,BotnDcho.>AsignarMacro
j ,
g
Desdebotones:
x Ver>Barradeherramientas>Personalizar.
x Comandos>Categoras>Macros
x Conelbotncreado:Botndcho.>AsignarMacro
C
l b t
d B t d h
Ai
M
Automticamente:
x Cadaciertotiempo,osegnlaaccindelUsuario
www.serverms.es
'Estamacroescribeel1500enlaceldaC10
Esta macro escribe el 1500 en la celda C10
Comentariosobrelamacro
Siempre ha de empezar por
Siemprehadeempezarpor
Enlneaycantidadilimitadas
y
p
p j
Muytilesparamacroscomplejas
Notieneefectossobrelamacro
Sub MiPrimeraMacro()
TodamacrocomienzaconSubNombreMacro()
NombreMacroseutilizaraparaejecutarlamacro
www.serverms.es
Range("A1")
Range(
A1 ).Value=1500
Value = 1500
Corazndelamacro
Objeto:
Objeto:
Range(A1)
Range(
A1 ).
Propiedad:
Value
Valor:
=1500
alaceldaA1deExcelasgnaleelvalor1500
EndSub
TodamacroterminaconEndSub
www.serverms.es
Grabar la macro
Grabarlamacro
1
1.
1.
2.
3.
VealmenHerramientas>Macros
SeleccionalaopcinGrabarnuevamacro
Seabriruncuadrodedilogocomoelquesemuestraacontinuacin.
4.
4
5.
6.
BorraMacro1
Borra
Macro 1 yescribeMiPrimeraMacro
y escribe MiPrimeraMacro
PulsaAceptar.Apartirdeahorasegrabaracadaclicquehagas
PosicinateenA1 yescribe1500
7.
CuandoterminespresionaoHerramientas>Macros>Detenergrabacin
www.serverms.es
Ver el cdigo
Verelcdigo
www.serverms.es
`
1.
Escrita
Comolahicimos
1.
2.
3.
4.
2.
CreamosunLibroExcelllamadoLibro
AbrimoseleditordemacrosconALT+F11
EnVBAProject(Libro1)hicimosdobleclicen
Hoja1(Hoja1)
Escribimos el cdigo de la macro.
Escribimoselcdigodelamacro.
Elcdigodelamacro
1.
2.
ConALT+F11accedemosaleditorde
macros.
Elcdigoqueescribimosmanualmentefue
elsiguiente:
escribeelvalor1500enlaceldaA1
Sub MiPrimeraMacro()
Range("A1").Value=1500
EndSub
`
1.
Grabada
Comolahicimos
1.
2
2.
3.
4.
2.
CreamosunLibroExcelllamadoLibro1
Herramientas > Macros > Grabar macro
Herramientas>Macros>Grabar
macro
Enlacelda A1escribimos1500
Herramientas>Macros>Detenergrabacin
Elcdigodelamacro
1.
2.
ConALT+F11accedemosaleditorde
macros.
Elcdigoqueescribimosmanualmentefue
elsiguiente:
Sub MiPrimeraMacro()
'MiPrimeraMacroMacro
'Macrograbadael02/03/2008porMSL
Range("A1").Select
Range(
A1 ).Select
ActiveCell.FormulaR1C1="1500"
Range("B1").Select
EndSub
www.serverms.es
Escrita
Comolahicimos
Grabada
Comolahicimos
Desventaja:Requiere conocerOPM
Ventaja: Noesnecesariosaber
programar
Elcdigodelamacro
Ventaja:Cdigomseficientey
sinttico
'Estamacroescribeelvalor1500enlaceldaA1
SubMiPrimeraMacro()
Range("A1").Value=1500
EndSub
Elcdigodelamacro
Desventaja: Cdigohabitualmente
redundanteyexcesivo
Sub MiPrimeraMacro()
'MiPrimeraMacroMacro
'Macrograbadael02/03/2008porMSL
Range("A1").Select
ActiveCell.FormulaR1C1 ="1500"
ActiveCell.FormulaR1C1
1500
Range("B1").Select
EndSub
www.serverms.es
Asociadoaunevento
x Ejecutadeformaautomtica
j
x NobreObjeto_Evento(ej:Workbook_Open)
Sub Macro()
Range(A1)=1500
EndSub
www.serverms.es
www.serverms.es
www.serverms.es
Argumentos
Declararvariable
Pediraalusuarioelvalordelargumento
Pedira al usuario el valor del argumento
VariableAstipo
p
www.serverms.es
HandeescribirseenThisWorkbook
www.serverms.es
Ejemplo:
PrivateSubWorkbook_Activate()
Msgbox"Hola,Exceltesaluda
EndSub
SubWorkbook_Open()
Sub
Workbook Open()
Workbooks.OpenFilename:=Ruta
EndSub
Private:macro/funcinsolosepuedellamardesdeelmismomodulo
Existen20macrosdeevento
www.serverms.es
HandeescribirseenHoja1(Nombre)
www.serverms.es
Ejemplo:
PrivateSubWorksheet_Activate()
MsgBox"Hola,EstasenlaHoja1"
EndSub
www.serverms.es
SubPrimero()
Sub
Primero()
Range("A1").Value="Hola"
EndSub
`
`
`
`
`
Queremosqueseaelusuarioquiendigaqueponer
Necesitamosunlugardondeguardarloqueescriba
SOLUCIN:Variable
DIM variableAS tipo.
Enestecaso:DIM MiVariableASString.
g
www.serverms.es
Ventanaparaintroducirdatos
Ventana
para introducir datos
SINTAXIS: InputBox(Mensaje,Ttulo).
Ennuestrocaso:
MiVariable=(Introduzcadatos,Entradadedatos)
www.serverms.es
1.
Subdatos()
Dim MiVariable As String
DimMiVariableAsString
MiVariable=InputBox("IntroduzcaDatos","EntradadeDatos")
ActiveSheet.Range( A1 ).Value=MiVariable
ActiveSheet.Range("A1").Value
MiVariable
EndSub
2.
Subdatos()
ActiveSheet.Range("A1").Value=InputBox("IntroduzcaDatos","Entradade
Datos")
EndSub
www.serverms.es
3.
Sub Entrar_Valor
Di CasillaAsString
Dim
C ill A S i
Dim TextoAsString
Casilla=InputBox("Enquecasillaquiereentrarelvalor","EntrarCasilla")
Texto=InputBox (Introduzcadatospara&Casilla,"EntradadeDatos")
ActiveSheet Range(Casilla) Value =Texto
ActiveSheet.Range(Casilla).Value
= Texto
EndSub
www.serverms.es
`
`
Herramientas>Opciones>RequerirdeclaracindeVar.
Herramientas
> Opciones > Requerir declaracin de Var
MUYRECOMENDABLEdeclararvariables
Ejemplo practico:
Ejemplopractico:
`
Sub Entrar_Valor
Texto=InputBox(Introduzcadatos","Entradadedatos")
ActiveSheet Range("A1")
ActiveSheet.Range(
A1 ).Value
Value =Testo
Testo
EndSub
Option Explicit
SubEntrar_Valor
DimTextoAsString
Texto =InputBox(
InputBox(Introduzca
datos",,"Entrada
de datos"))
Texto
Introduzcadatos
Entradadedatos
ActiveSheet.Range("A1").Value=Testo
EndSub
www.serverms.es
`
`
`
`
`
`
Byte
Byte
Integer
D i l
Decimal
Date
String
Variant
||1byte
1 byte
|2bytes
|14 b
|14bytes
|8bytes
|10bytes
|22bytes
||0a255
0 a 255
|32.768a32.767
|D i l
|Decimales
|Fechas
|Texto
|=String
www.serverms.es
Dim Var_Objeto
Var Objeto AsObjeto
As Objeto
Dim RAsRange;DimHojaAsWorkSheet
SetR=ActiveSheet.Range("A1:B10);SetHoja =ActiveSheet
EjemploPractico:
Submacrobj()
Di R AsRange
DimR
A R
SetR=ActiveSheet.Range("A10:B15")
R.Value ="Hola"
R.Font.Bold =True
EndSub
www.serverms.es
Valor lgico SI
ValorlgicoSI
Si C di i Entonces
SiCondicin
E
If CondicinThen
C di i Th
Sentncia1
Sentncia2
.
.
S i N
SentnciaN
Sentncia1
Sentncia2
.
.
S i N
SentnciaN
FinSi
EndIf
www.serverms.es
www.serverms.es
Ejercicio:
Entrarunacantidadquerepresentaelpreciodealgoporelteclado
con la instruccin InputBox y guardarlo en la celda A1 de la hoja
conlainstruccinInputBoxyguardarloenlaceldaA1delahoja
activa.
Si elvalorentradodesdeelteclado(yguardadoenA1)es
superiora1000,pedirdescuentoconotroInputBoxyguardarloenla
casilla A2 de la hoja activa
casillaA2delahojaactiva.
Calcular en A3 el precio de A1 menos el descuento de A2
CalcularenA3,elpreciodeA1menoseldescuentodeA2.
www.serverms.es
Sub Precios()
SubPrecios()
Range("A1").Value=InputBox("Entrarelprecio","Entrar")
If Range("A1").Value>1000Then
Range("A2").Value=InputBox("Entrar
(
)
(
Descuento","Entrar"))
EndIf
Range("A3").Value=Range("A1").Value Range("A2").Value
EndSub
www.serverms.es
SubPrecios()
Dim Precio AsInteger
Dim Descuento AsInteger
Precio =0
=0
Descuento =0
Precio=(InputBox("Entrarelprecio","Entrar")
( p
(
p
,
)
IfPrecio >1000Then
Descuento=InputBox("EntrarDescuento","Entrar")
p
(
,
)
EndIf
Range("A1").Value
=Precio
g (
)
Range("A2").Value =Descuento
Range("A3").Value =Precio Descuento
EndSub
www.serverms.es
Compara
Compara celdas,si
celdas si soniguales,las
son iguales las poneenAZUL
pone en AZUL
SSub
b Condicional2()
C di i
l2()
IfRange("A1").Value=Range("A2").ValueThen
Range("A1").Font.Color =RGB(0,0,255)
Range("A2").Font.Color =RGB(0,0,255)
EndIf
EndSub
www.serverms.es
Compara
Compara celdas,si
celdas si soniguales,las
son iguales las poneenAZUL
pone en AZUL
SSub
b Condicional2()
C di i
l2()
IfRange("A1").Value=Range("A2").ValueThen
Range("A1").Font.Color =RGB(0,0,255)
Range("A2").Font.Color =RGB(0,0,255)
EndIf
EndSub
www.serverms.es
IF
IFThen
Then
IF
IFThenEndIF
Th
E d IF
IFThenElse EndIF
www.serverms.es
If Condicin1And
Condicin1 And Condicin2Then
Condicin2 Then
.Sentecias
End If
EndIf
www.serverms.es
If Condicin1Or
Condicin1 Or Condicin2Then
Condicin2 Then
.Sentecias
End If
EndIf
www.serverms.es
If NOT(Condicin)Then
NOT(Condicin) Then
.Sentecias
End If
EndIf
www.serverms.es
Var 1
Var2
Rspsta
Var1
Var2
Rspsta
False
False
False
False
False
False
False
True
False
False
True
True
True
False
False
True
False
True
True
True
True
True
True
True
www.serverms.es
SelectCaseExpresin
C
Casevalores:
l
Instrucciones.
C
Casevalores:
l
Instrucciones.
.
CaseElse
Si
no se cumple ninguna de las anteriores
Sinosecumpleningunadelasanteriores
EndSelect
SubEjemplo_15()
www.serverms.es
DimSignoAsString
Di Valor1AsInteger,Valor2AsInteger,TotalAsInteger
Dim
V l 1A I t
V l 2A I t
T t lA I t
Valor1=Range("A1").Value
Valor2=Range("A2").Value
Si
Signo=Range("B1").Value
R
("B1") V l
Total=0
If Signo="+"Then
Total Valor1 + Valor2
Total=Valor1+Valor2
Endif
If Signo=""Then
Total = Valor1 Valor2
Total=Valor1
Endif
If Signo="x"Then
Total = Valor1 * Valor2
Total=Valor1*Valor2
Endif
If Signo=":"Then
Total = Valor1 / Valor2
Total=Valor1/Valor2
Endif
ActiveCell.Range("A3").Value=Total
End Sub
EndSub
SubEjemplo_16()
www.serverms.es
DimSignoAsString
Di Valor1AsInteger,Valor2AsInteger,TotalAsInteger
Dim
V l 1A I t
V l 2A I t
T t lA I t
Valor1=ActiveSheet.Range("A1").Value
Valor2=ActiveSheet.Range("A2").Value
Si
Signo=ActiveSheet.Range("A3").Value
A ti Sh t R
("A3") V l
SelectCasesigno
Case"+"
T t l V l 1+V l 2
Total=Valor1+Valor2
Case""
Total=Valor1 Valor2
Case "x"
Case"x"
Total=Valor1*Valor2
Case":"
Total Valor1 / Valor2
Total=Valor1/Valor2
CaseElse
Total=0
End Select
EndSelect
ActiveCell.Range("A3").Value=Total
End Sub
EndSub
www.serverms.es
`
`
`
`
`
`
`
`
`
`
Cuadrodedilogoconbotones
Cuadro
de dilogo con botones
Variable=MsgBox(Mensaje,Botones,Ttulo)
MsgBox Mensaje,
MsgBox
Mensaje ,Botones,
Botones, Titutlo
Titutlo
VbOK
VbCancel
VbAbort
VbRetry
VbIgnore
VbY
VbYes
VbNo
1
2
3
4
5
6
6
7
Aceptar
Cancelar
Anular
Reintentar
Ignorar
S
No.
www.serverms.es
Permitenejecutarmsdeunavezlasmismassentencias
SSub
b Ejemplo_20()
Ejemplo 20 ()
Dim NotaAsInteger
Dim MediaAsSingle
N t V l(I
Nota=Val(InputBox("EntrarNota:","EntrarNota"))
tB ("E t N t " "E t N t "))
ActiveSheet.Range("A1").Value=Nota
Media=Media+Nota
Nota=Val(InputBox("EntrarNota:","EntrarNota"))
(
("
""
"))
ActiveSheet.Range("A2").Value=Nota
Media=Media+Nota
Nota=Val(InputBox("EntrarNota:","EntrarNota"))
ActiveSheet.Range("A3").Value=Nota
Media=Media+Nota
Media=Media/5
ActiveSheet.Range("A6").Value=Media
EndSub
www.serverms.es
Se repite:
Serepite:
Nota=Val(InputBox("Entrarla1Nota:","EntrarNota"))
ActiveSheet.Range("AX").Value
ActiveSheet.Range(
AX ).Value=Nota
Nota
Media=Media+Nota
www.serverms.es
5 funciones fundamentales:
5funcionesfundamentales:
Para(ForNext)
Para
(For Next)
DoWhile...Loop (HacerMientras)
DoLoop 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 IncrementoHacer
c e e o ace
Sentencia1
Sentencia2
SentenciaN
Siguiente
For Varible =Valor_Inicial To Valor_Final Step Incremento
Sentencia1
Sentencia2
SentenciaN
N
V i bl
Next
Variable
www.serverms.es
Ejemplo:
je p o
Sub Ejemplo_21()
Dim iAsInteger
Dim TotalAsInteger
l
Dim ValorAsInteger
o i=1To
o 10
0
For
Valor=Val(InputBox("Entrarunvalor","Entrada"))
Total=Total+Valor
Next i
ActiveSheet.Range("A1").Value=Total
EndSub
d Sub
www.serverms.es
HacerMientras(secumplalacondicin)
ace
e t as (se cu p a a co d c )
Sentencia1
Sentencia2
SentenciaN
FinHacerMientras
DoWhile (secumplalacondicin)
Sentencia1
Sentencia2
SentenciaN
Loop
www.serverms.es
SubEjemplo_27()
Dim NombreAsString
Dim
Di CiudadAsString
Ci d d A S i
WorkSheets("Hoja1").Activate
ActiveSheet.Range("A2").Activate
N b
Nombre=InputBox("EntreelNombre(Return
I
tB ("E t
l N b (R t
paraTerminar):","Nombre")
T
i ) " "N b ")
DoWhile Nombre<>""
Ciudad=InputBox("EntrelaCiudad:","Ciudad")
Ed d I
Edad=InputBox("EntrelaEdad:","Edad")
tB ("E t l Ed d " "Ed d")
Fecha=InputBox("EntralaFecha:","Fecha")
With ActiveCell
.Value=Nombre
Value Nombre
.Offset(0,1).Value=Ciudad
EndWith
ActiveCell Offset(1 0) Activate
ActiveCell.Offset(1,0).Activate
Nombre=InputBox("EntreelNombre(Return paraTerminar):","Nombre")
Loop
End Sub
EndSub
www.serverms.es
Do
Nombre=InputBox("EntreelNombre(Return paraTerminar):","Nombre")
Ciudad=InputBox("EntrelaCiudad:","Ciudad")
Edad=Val(InputBox("EntrelaEdad:","Edad"))
fecha = CDate(InputBox("Entra
fecha=CDate(InputBox(
EntralaFecha:
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
EndWith
ActiveCell.Offset(1,0).Activate
Mas Datos =MsgBox(
= MsgBox("Otro
registro ?",vbYesNo
vbYesNo +vbQuestion,
+ vbQuestion Datos")
Mas_Datos
Otroregistro?
Datos )
MientrasMas_Datos =vbYes
Loop While Mas_Datos =vbYes
www.serverms.es
Do
Nombre=InputBox("EntreelNombre(Return paraTerminar):","Nombre")
Ciudad=InputBox("EntrelaCiudad:","Ciudad")
Edad=Val(InputBox("Ent relaEdad:","Edad"))
( p
(
:","Fecha"))
,
))
fecha=CDate(InputBox("FechaNac
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
EndWith
ActiveCell.Offset(1,0).Activate
Mas_Datos =MsgBox("Otroregistro?",vbYesNo +vbQuestion,"Entradadedatos")
'HastaqueMas_Datos seaigualavbNo
Loop Until Mas_Datos =vbNo
www.serverms.es
SubEjemplo_29()
DimNuevo_Nombre AsStringg
DimHoja AsWorksheet
'ParacadahojadelconjuntoWorkSheets
For Each Hoja InWorksheets
Nuevo_Nombre =InputBox("NombredelaHoja:"&Hoja.Name,"Nombrar
Hojas )
Hojas")
If Nuevo_Nombre <>""Then
Hoja.Name =Nuevo_Nombre
EndIf
Next
End Sub
EndSub
www.serverms.es
SubEjemplo_30()
g
Dim RAsRange
'ParacadaceldadelrangoA1:B10delahojaactiva
For Each RInActiveSheet.Range("A1:B10")
R.Value =InputBox("Entrarvalorparalacelda"&R.Address,"Entradadevalores")
Next
End Sub
EndSub
www.serverms.es
`
`
`
`
`
Crearuncuadrodedialogo
Crear
un cuadro de dialogo
Introducir,ver,datos
H
Herramientas>Opciones
i
O i
Aplicacionesdeaspectoprofesional
Msguiadoeintuitivo
www.serverms.es
`
`
AbrirEditordeVB(Alt+F11)
Abrir
Editor de VB (Alt+F11)
InsertarunobjetoUserform.
SeleccionamoselLibro
S l i
l Lib
Botndrcho Insertar>Userform
www.serverms.es
Situndonosencimavemosladescripcindelcontrol
www.serverms.es
`
`
`
`
`
`
`
`
Seleccionarobjetos:sirveparaseleccionarcontrolesinsertadosenelUserform
Seleccionar
objetos: sirve para seleccionar controles insertados en el Userform
Label:sirveparaponerunttuloountexto.
Textbox:sirveparaqueunusuariointroduzcadatos.
C b
ComboBox:sirveparaqueunusuarioelijaunaopcindeunalista.
i
i lij
i d
li
ListBox:sirveparaqueunusuariorelleneoelijavariasopcionesdeunalista.
CheckBox:sirveparaqueunusuarioactiveunadeterminadafuncin.
OptionButton:Seleccionarunaopcindeterminadaentrevariasposibilidades.
ToggleButton:Activaodesactivaalgunafuncionalidad."Encendido"/"Apagado".
www.serverms.es
`
`
`
`
`
`
`
`
Frame:sirveparaagruparelementosdeunUserform
Frame:
sirve para agrupar elementos de un Userform
CommandButton:esunsimplebotnquenospermiteejecutaracciones.
TabStrip:enunmismoUserform sepuedencreardistintassecciones.
MultiPage:enunmismoUserform
li
i
U f
sepuedencreardistintaspginas.
d
di i
i
ScrollBar:Paralistasconmuchoselementoselscrollbar nospermitenavegarlos.
SpinButton:permiteaumentarodisminuirvalores.
Image:permiteintroducirimgenesenelUserform.
RefEdit:permitehacerreferenciaaunaceldadeExcel.
www.serverms.es
www.serverms.es
Loscontrolesqueutilizaremosson:
Los controles que utilizaremos son:
x Textbox:paraqueelusuarioingreselosdatos
x Label:paradarleelnombredelosTextbox
p
x CommandButton:paraprocederconelingresodedatoso
cancelar
www.serverms.es
C
CreamosunUserform
U f
(UF)
EnelcdigodelAgregar:
www.serverms.es
PrivateSubagregar
g g _Click()
()
'definimoslasvariables
DimiFila AsLong
Dimws AsWorksheet
Setws =Worksheets(1)
'Encuenta lasiguientefilavaca
g
iFila =ws.Cells(Rows.Count,1)_
.End(xlUp).Offset(1,0).Row
'Verificaqueseingreseunnombre
If Me.TBNombre.Value =""Then
Me.TBNombre.SetFocus
MsgBox"Debeingresarunnombre"
Exit Sub
EndIf
'Copialosdatosalatablaexcel
ws.Cells(iFila,1).Value=
Me.TBNombre.Value
ws.Cells(iFila,2).Value=
Me.TBEdad.Value
ws.Cells(iFila,3).Value=
Me TBFecha Value
Me.TBFecha.Value
'Limpa elformulario
Me TBNombre Value =
Me.TBNombre.Value
= ""
Me.TBEdad.Value =""
Me.TBFecha.Value =""
Me TBNombre SetFocus
Me.TBNombre.SetFocus
EndSub
www.serverms.es
`
`
Desarrollarfuncionesmacroseparadas
Desarrollar
funciones macro separadas
UnanicafuncinMainquellameatodas
Sub Macro1()
'El cdigo de mi Macro1
Macro2
End Sub
Sub Macro1()
'El cdigo de mi Macro1
Call Macro2
End Sub
www.serverms.es
SubSuperMacro()
p
()
'AsignaFormatoNumrico
Selection.NumberFormat ="#,##0;[Red]#,##0
'AsignaBordes
g
With Selection.Borders
.LineStyle =xlContinuous
.Weight
g =xlThin
.ColorIndex =xlAutomatic
EndWith
'AsignaColordeRelleno
With Selection.Interior
.ColorIndex =36
.Pattern =xlSolid
.PatternColorIndex =xlAutomatic
EndWith
EndSub
Sub Macro1()
Call FormatoN
Call Bordes
Call Relleno
End Sub
www.serverms.es
SubFormatoN()
Sub
FormatoN()
'AsignaFormatoNumrico
Selection.NumberFormat =
"##,##0;[Red]#,##0
##0;[Red]# ##0
EndSub
SubBordes()
Sub
Bordes()
'AsignaBordes
With Selection.Borders
.LineStyle =xlContinuous
.Weight =xlThin
xlAutomatic
.ColorIndex =xlAutomatic
EndWith
EndSub
SubRelleno()
Sub
Relleno()
'AsignaColordeRelleno
With Selection.Interior
.ColorIndex
C l I d =36
36
.Pattern =xlSolid
.PatternColorIndex =xlAutomatic
EndWith
EndSub
www.serverms.es
SubMacro()
Sub
Macro()
range("a2).select
EndSub
Sab Macro()
Range("A2").Select
EndSub
SubMacro()
Sub
Macro()
IfRange("a2").value=2Then
MsgBox "Mal
EndSub
Modo Depuracin
Ejecuta PasoaPaso
Determina mejor donde est el
error
www.serverms.es
Desde elEditordeVB
Parainstalarlo
> Complementos >Examinar
> Examinar
Herramientas >Complementos
www.serverms.es
`
`
Existen 3niveles
3 niveles deseguridad
de seguridad (depende delaversin)
de la versin)
Recomendable Medio
www.serverms.es
AligualquehojasoelLibro,lasmacrossepueden
Al
igual que hojas o el Libro las macros se pueden
proteger
Herramientas>PropiedadesdeVBAProject...>Proteger
Herramientas > Propiedades de VBAProject >Proteger
www.serverms.es