Está en la página 1de 87

CarlosAsenjo

MCSEMCT

www.serverms.es

Objetivo del Curso


ObjetivodelCurso

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

Una definicin sencilla


Unadefinicinsencilla
Macro:esunconjuntodeinstruccionesdecdigo(programado)que
p
permitenrealizarunatareadeterminadacomoastambinexpandire
p
incrementarlasprestacionesdeExcel.
Las
LasmacrosseescribenenlenguajedeprogramacinVBA(VisualBasic
macros se escriben en lenguaje de programacin VBA (Visual Basic
for Applications)eneleditordeVBqueincorporaExcel

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

Creacin de funciones a medida:


Creacindefuncionesamedida:
Excelincorpora+ 330funcionesquesepuedenusardeforma
aislada o anidada
aisladaoanidada
Ningunadeellasseajustaaloquequeremos
g
j
q q
SOLUCION:Macro.Aparecerenelmendefuncionescomo
unams.

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

Creacin de aplicaciones a medida:


Creacindeaplicacionesamedida:
Excelesutilizadoenmuchoscampospormuchosusuarios
Lasmacrostepermitencreartodounprogramadesoftware
LopodrnusarcualquierusuarioaunquenosepaExcel

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,

Mtodos: para una hoja


Mtodos:paraunahoja,
x activar,mover,copiaroborrar.

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

Necesario que conozcas la barra de herramientas VBA


NecesarioqueconozcaslabarradeherramientasVBA
Herramientas>Macros

Ver>BarrasdeHerramientas>VisualBasic

www.serverms.es

Tres formas de acceder al editor:


Tresformasdeaccederaleditor:
Herramientas>Macros>EditordeVisualBasic
H
i t >M
> Edit d Vi l B i
Desde
Desdeelbotn
el botn EditordeVisualBasicdela
Editor de Visual Basic de la Barrade
Barra de
HerramientasVisualBasic.
Mtodoabreviadodelteclado:ALT+F11

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

Procedimiento SUB Nombre()


ProcedimientoSUBNombre()
General
x Selellamamanualmentedesdecdigo
Se le llama manualmente desde cdigo

Asociadoaunevento
x Ejecutadeformaautomtica
j
x NobreObjeto_Evento(ej:Workbook_Open)

Sub Macro()
Range(A1)=1500
EndSub

www.serverms.es

Procedimiento Function Nombre(Argumentos)


ProcedimientoFunctionNombre(Argumentos)
Devuelvenunvalorresultadodeunafuncin
Function Terminar()AsBoolean
y
Dim xAsByte
x=MsgBox("Deseasalir?",vbOKCancel,"Salir")
If x=1Then
ActiveCell.Value="SI"
EndIf
EndFunction

www.serverms.es

Llamar funcin desde Excel


LlamarfuncindesdeExcel
Insertar>Funcin>DefinidasporelUsuario
FunctionCalcEdad(FechaNac AsDate)
DimzFecha AsDate
CalcEdad=Abs(DateDiff("YYYY",FechaNac,Date))
zFecha=DateAdd("YYYY",CalcEdad,FechaNac)
IfzFecha>DateThenCalcEdad=CalcEdad 1
EndFunction

www.serverms.es

Argumentos
Declararvariable
Pediraalusuarioelvalordelargumento
Pedira al usuario el valor del argumento
VariableAstipo
p

www.serverms.es

Disparar macros segn acciones (a nivel de Libro)


Dispararmacrossegnacciones(aniveldeLibro)
Guardar,abrir,cerrar,imprimir

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

Disparar macros segn acciones (a nivel de hoja)


Dispararmacrossegnacciones(aniveldehoja)
Activarla,desactivarla,crearnueva

HandeescribirseenHoja1(Nombre)

www.serverms.es

Ejemplo:
PrivateSubWorksheet_Activate()
MsgBox"Hola,EstasenlaHoja1"
EndSub

Existen 9 macros de evento a nivel hoja


Existen9macrosdeeventoanivelhoja

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)

Si pulsamos Aceptar los datos se guardaran en


SipulsamosAceptar,losdatosseguardaranen
MiVariable

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

Set Variable_Objeto =Objeto

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

Ejemplo (Desarrolla tu mismo un ejemplo sencillo)


Ejemplo(Desarrollatumismounejemplosencillo)

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

IFThenElseIf Else EndIF

www.serverms.es

Debern cumplirse todas las condiciones


Deberncumplirsetodaslascondiciones

If Condicin1And
Condicin1 And Condicin2Then
Condicin2 Then
.Sentecias
End If
EndIf

www.serverms.es

Debern cumplirse UNA de las condiciones


DeberncumplirseUNAdelascondiciones

If Condicin1Or
Condicin1 Or Condicin2Then
Condicin2 Then
.Sentecias
End If
EndIf

www.serverms.es

No deber cumplirse la condicin


Nodebercumplirselacondicin

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

En funcin del Valor de UNA casilla variable expresin


EnfuncindelValordeUNAcasilla,variable,expresin.

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

ConEstructurasciclicas ahorramoslineas decdigo:

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

Podemos disear nuestro formulario con controles


Podemosdisearnuestroformularioconcontroles

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

Establecer objetivo y controles


Establecerobjetivoycontroles
Objetivo
x Crear
CrearunUserform
un Userform paraqueunusuariocompleteunosdatos
para que un usuario complete unos datos
personales(Nombre,EdadyFechadeNacimiento).Luegoqueel
usuariocompletesusdatosalapretarunbotnlosmismosse
volcarnenunatabladeExcel.
l
bl d E l

Loscontrolesqueutilizaremosson:
Los controles que utilizaremos son:
x Textbox:paraqueelusuarioingreselosdatos
x Label:paradarleelnombredelosTextbox
p
x CommandButton:paraprocederconelingresodedatoso
cancelar

www.serverms.es

Creamos la tabla en la hoja


Creamoslatablaenlahoja

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

Podemos convertir nuestra macroenComplemento


macro en Complemento
Util para posible distribucin.

Desde elEditordeVB

Archivo >Guardar como


Guardar como tipo:Complemento deMicrosoftExcel(XLA)
`

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

Evitar actualizacin depantalla


de pantalla
Application.ScreenUpdating=False

Prevenir clculos mientras seejecuta elcdigo


Application.Calculation
Application
Calculation =xlCalculationManual
= xlCalculationManual
'Elcdigo delamacroaqu
Application.Calculation
pp
=xlCalculationAutomatic

Evitar el uso de Copiar, Pegar y Seleccionar


EvitarelusodeCopiar,PegarySeleccionar
Range("C10:C12").CopyRange("E10")

También podría gustarte