Sie sind auf Seite 1von 87

CarlosAsenjo MCSEMCT

www.serverms.es

ObjetivodelCurso Objetivo del Curso


Conceptosbsicos Creacindemacros Creacin de macros Automatizartareas p ConceptosfundamentalesdeVBExcel

Contenidos
Conceptodemacro Creacinautomticademacro Edicindemacro Asignacinaobjetos

www.serverms.es

Contenidos
Conceptodemacro Creacinautomticademacro Edicindemacro Asignacinaobjetos EditorVBExcel

www.serverms.es

Conceptosfundamentales Conceptos fundamentales


Procedimientosymdulos Estructuras(IF,ForNext,DoLoop,) OPM Variables, constantes, Variables,constantes, MsgBox,Inputbox, Erroresydepuracindecdigo

www.serverms.es

Unadefinicinsencilla Una definicin sencilla


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

www.serverms.es

Sepuedendefinir4grandes reas donde se aplican Se pueden definir 4 grandes "reas"dondeseaplican lasmacrosqueson:


1. Automatizacindetareasyprocesosqueinvolucran muchospasos muchos pasos 2. Creacindenuevasfuncionesamedida(apartedelasque yaposeeExcel!) 3.Creacindenuevoscomandos,complementosymens. 4. Creacindecompletasaplicacionesamedida.

www.serverms.es

Automatizacindeprocesos: Automatizacin de procesos:


Todoslosdasllevamosacabolasmismasacciones(Centrar, Negrita,Tamaox,) Negrita, Tamao x, ) Individualmentesonmuysencillas,peroenconjuntoforman y p j untediosotrabajo SOLUCIN:Macro

www.serverms.es

Creacindefuncionesamedida: Creacin de funciones a medida:


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

www.serverms.es

Creacindenuevoscomandos,complementosy Creacin de nuevos comandos complementos y mens:


Cada vez tengo que buscar comandos en diferentes mens Cadaveztengoquebuscarcomandosendiferentesmens Me vuelvo loco Mevuelvoloco SOLUCIN:Macro.Puedescrearunmenpersonalizadocon tuscomandosmsfrecuentes

www.serverms.es

Creacindeaplicacionesamedida: Creacin de aplicaciones a medida:


Excelesutilizadoenmuchoscampospormuchosusuarios Lasmacrostepermitencreartodounprogramadesoftware LopodrnusarcualquierusuarioaunquenosepaExcel

www.serverms.es

(OPM). (OPM) Supongamosquetenemosunacanastadefruta


Obj t seranlasmismasfrutas(naranjas,peras). Objetos: 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

EnExcel: En Excel:
Objetos:unlibroexcel,unahoja,unrango,unacelda,un men,ungrfico,unatabladinmica,uncuadrodedilogo, men, un grfico, una tabla dinmica, un cuadro de dilogo, lasetiquetasdehojas,lascolumnas,lasfilas,etc. Propiedades:porejemplo
Celda:alto,ancho,color,bloqueadaodesbloqueada, Hoja:visibleuoculta,conosinlneasdedivisin,

Mtodos: para una hoja Mtodos:paraunahoja,


activar,mover,copiaroborrar.

www.serverms.es

Hablardemacros,lenguajeVBAyOPMeslomismo. Hablar de macros lenguaje VBA y OPM es lo mismo EllenguajeVBAsoloesteningls. Lenguajefcilymuyintuitivo L j f il i ii


EjemplosdeObjetosVBA
Cell(celda),Range(rango),Worksheet(hoja),Workbook(libro) Cell (celda) Range (rango) Worksheet (hoja) Workbook (libro)

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

EjemplosdeMtodosVBA
Copy(copiar),Protect(proteger),Delete(borrar)

www.serverms.es

NecesarioqueconozcaslabarradeherramientasVBA Necesario que conozcas la barra de herramientas VBA


Herramientas>Macros

Ver>BarrasdeHerramientas>VisualBasic

www.serverms.es

Tresformasdeaccederaleditor: Tres formas de acceder al editor:


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

www.serverms.es

www.serverms.es

La Ventana Proyecto VBA Project: LaVentanaProyecto VBAProject:


MuestraXLS(LibrosdeCalculo)yXLA (Complementos)abiertos (Complementos) abiertos EnnuestrocasoVBAProject(Libro1) j
Ventana de Cdigo:

www.serverms.es

Tresmtodos: Tres mtodos:


M Manualmente l t Mediante la Grabadora de Macros MediantelaGrabadoradeMacros 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 Ejecutamos la macro Ejecutamoslamacro DeberescribirenA1,1500

www.serverms.es

1. 1
1. 2. 3. 4.

PreparaelEditordeVB Prepara el Editor de VB


CreaunnuevolibroExcelygurdaloconelnombreLibro1. AbreeleditordeVisualBasicconlasteclasALT+F11. DobleclicenVBAProject(Libro1)paraverlascarpetas. DobleclicenHoja1(Hoja1)paraempezaraescribirelcdigodelamacro

2.

Escribimoslamacro
'Estamacroescribeelvalor1500enlaceldaA1 Sub MiPrimeraMacro() Range("A1").Value=1500 EndSub

www.serverms.es

Cincoformas: Cinco formas:


Desdeelmismoeditor
DesdeeliniciodelamacropulsarF5 Desde el inicio de la macro pulsar F5

DesdeExcel
F11paravolveraExcel Herramientas>Macros>Macro Seleccionamoslamacro>Ejecutar

www.serverms.es

Desde Objetos: DesdeObjetos:


Ver>BarradeHerramientas>Dibujo Unavezcreadoelobjeto,BotnDcho.>AsignarMacro j , g

Desdebotones:
Ver>Barradeherramientas>Personalizar. Comandos>Categoras>Macros Conelbotncreado:Botndcho.>AsignarMacro C l b t d B t d h Ai M

Automticamente:
Cadaciertotiempo,osegnlaaccindelUsuario

www.serverms.es

'Estamacroescribeel1500enlaceldaC10 Esta macro escribe el 1500 en la celda C10


Comentariosobrelamacro Siemprehadeempezarpor Siempre ha de empezar por Enlneaycantidadilimitadas y p p j Muytilesparamacroscomplejas Notieneefectossobrelamacro

Sub MiPrimeraMacro()
TodamacrocomienzaconSubNombreMacro() NombreMacroseutilizaraparaejecutarlamacro

www.serverms.es

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


Corazndelamacro Objeto: Objeto: Range( A1 ). Range(A1) Propiedad: Value Valor: =1500 alaceldaA1deExcelasgnaleelvalor1500

EndSub
TodamacroterminaconEndSub

www.serverms.es

1. 1
1. 2. 3.

Grabarlamacro Grabar la macro


VealmenHerramientas>Macros SeleccionalaopcinGrabarnuevamacro Seabriruncuadrodedilogocomoelquesemuestraacontinuacin.

4. 4 5. 6. 7.

BorraMacro1 yescribeMiPrimeraMacro Borra Macro 1 y escribe MiPrimeraMacro PulsaAceptar.Apartirdeahorasegrabaracadaclicquehagas PosicinateenA1 yescribe1500 CuandoterminespresionaoHerramientas>Macros>Detenergrabacin

www.serverms.es

Verelcdigo Ver el cdigo

www.serverms.es

Escrita
1.

Grabada
1.

Comolahicimos
1. 2. 3. 4. CreamosunLibroExcelllamadoLibro AbrimoseleditordemacrosconALT+F11 EnVBAProject(Libro1)hicimosdobleclicen Hoja1(Hoja1) Escribimoselcdigodelamacro. Escribimos el cdigo de la macro. ConALT+F11accedemosaleditorde macros. Elcdigoqueescribimosmanualmentefue elsiguiente: escribeelvalor1500enlaceldaA1 Sub MiPrimeraMacro() Range("A1").Value=1500 EndSub

Comolahicimos
1. 2. 2 3. 4. CreamosunLibroExcelllamadoLibro1 Herramientas>Macros>Grabar macro Herramientas > Macros > Grabar macro Enlacelda A1escribimos1500 Herramientas>Macros>Detenergrabacin ConALT+F11accedemosaleditorde macros. Elcdigoqueescribimosmanualmentefue elsiguiente: Sub MiPrimeraMacro() 'MiPrimeraMacroMacro 'Macrograbadael02/03/2008porMSL Range( A1 ).Select Range("A1").Select ActiveCell.FormulaR1C1="1500" Range("B1").Select EndSub

2.

Elcdigodelamacro
1. 2.

2.

Elcdigodelamacro
1. 2.

www.serverms.es

Escrita
Comolahicimos
Desventaja:Requiere conocerOPM

Grabada
Comolahicimos
Ventaja: Noesnecesariosaber programar

Elcdigodelamacro
Ventaja:Cdigomseficientey sinttico

Elcdigodelamacro
Desventaja: Cdigohabitualmente redundanteyexcesivo

'Estamacroescribeelvalor1500enlaceldaA1 SubMiPrimeraMacro() Range("A1").Value=1500 EndSub

Sub MiPrimeraMacro() 'MiPrimeraMacroMacro 'Macrograbadael02/03/2008porMSL Range("A1").Select ActiveCell.FormulaR1C1 1500 ActiveCell.FormulaR1C1 ="1500" Range("B1").Select EndSub

www.serverms.es

ProcedimientoSUBNombre() Procedimiento SUB Nombre()


General
Selellamamanualmentedesdecdigo Se le llama manualmente desde cdigo

Asociadoaunevento
Ejecutadeformaautomtica j NobreObjeto_Evento(ej:Workbook_Open)

Sub Macro() Range(A1)=1500 EndSub

www.serverms.es

ProcedimientoFunctionNombre(Argumentos) Procedimiento Function Nombre(Argumentos)


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

www.serverms.es

LlamarfuncindesdeExcel Llamar funcin desde Excel


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 Pedira al usuario el valor del argumento Pediraalusuarioelvalordelargumento VariableAstipo p

www.serverms.es

Dispararmacrossegnacciones(aniveldeLibro) Disparar macros segn acciones (a nivel de Libro)


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

Dispararmacrossegnacciones(aniveldehoja) Disparar macros segn acciones (a nivel de hoja)


Activarla,desactivarla,crearnueva

HandeescribirseenHoja1(Nombre)

www.serverms.es

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

Existen9macrosdeeventoanivelhoja Existen 9 macros de evento a nivel hoja

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() DimMiVariableAsString Dim MiVariable As String


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 Dim CasillaAsString Di 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 Ejemplopractico: Ejemplo practico:
Sub Entrar_Valor Texto=InputBox(Introduzcadatos","Entradadedatos") ActiveSheet.Range( A1 ).Value Testo ActiveSheet Range("A1") Value =Testo EndSub Option Explicit SubEntrar_Valor DimTextoAsString Texto =InputBox( Introduzcadatos ,"Entrada de datos") Texto InputBox(Introduzca datos", Entradadedatos ) ActiveSheet.Range("A1").Value=Testo EndSub

www.serverms.es

Byte Byte Integer Decimal D i l Date String Variant

|1byte | 1 byte |2bytes |14bytes |14 b |8bytes |10bytes |22bytes

|0a255 | 0 a 255 |32.768a32.767 |Decimales |D i l |Fechas |Texto |=String

www.serverms.es

Dim Var Objeto As Objeto Var_Objeto AsObjeto Dim RAsRange;DimHojaAsWorkSheet Set Variable_Objeto =Objeto
SetR=ActiveSheet.Range("A1:B10);SetHoja =ActiveSheet

EjemploPractico:
Submacrobj() DimR AsRange Di R A R SetR=ActiveSheet.Range("A10:B15") R.Value ="Hola" R.Font.Bold =True EndSub

www.serverms.es

ValorlgicoSI Valor lgico SI SiCondicin Entonces Si C di i E


Sentncia1 Sentncia2 . . SentnciaN S i N

If C di i Th CondicinThen
Sentncia1 Sentncia2 . . SentnciaN S i N

FinSi

EndIf

www.serverms.es

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

www.serverms.es

Ejercicio:
Entrarunacantidadquerepresentaelpreciodealgoporelteclado conlainstruccinInputBoxyguardarloenlaceldaA1delahoja con la instruccin InputBox y guardarlo en la celda A1 de la hoja activa. Si elvalorentradodesdeelteclado(yguardadoenA1)es superiora1000,pedirdescuentoconotroInputBoxyguardarloenla casillaA2delahojaactiva. casilla A2 de la hoja activa Calcular en A3 el precio de A1 menos el descuento de A2 CalcularenA3,elpreciodeA1menoseldescuentodeA2.

www.serverms.es

SubPrecios() Sub Precios()


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 celdas si son iguales las pone en AZUL Compara celdas,si soniguales,las poneenAZUL Sub Condicional2() S b 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 celdas si son iguales las pone en AZUL Compara celdas,si soniguales,las poneenAZUL Sub Condicional2() S b 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

IFThen IF Then IFThenEndIF IF Th E d IF IFThenElse EndIF IFThenElseIf Else EndIF

www.serverms.es

Deberncumplirsetodaslascondiciones Debern cumplirse todas las condiciones


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

www.serverms.es

DeberncumplirseUNAdelascondiciones Debern cumplirse UNA de las condiciones


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

www.serverms.es

Nodebercumplirselacondicin No deber cumplirse la condicin


If NOT(Condicin) Then NOT(Condicin)Then .Sentecias EndIf End If

www.serverms.es

Var 1 False False True True

Var2 False True False True

Rspsta False False False True

Var1 False False True True

Var2 False True False True

Rspsta False True True True

www.serverms.es

EnfuncindelValordeUNAcasilla,variable,expresin. En funcin del Valor de UNA casilla variable expresin SelectCaseExpresin Casevalores: C l Instrucciones. Casevalores: C l Instrucciones. . CaseElse Si no se cumple ninguna de las anteriores Sinosecumpleningunadelasanteriores EndSelect

SubEjemplo_15() www.serverms.es DimSignoAsString Dim Valor1AsInteger,Valor2AsInteger,TotalAsInteger Di V l 1 A I t V l 2A I t T t lA I t Valor1=Range("A1").Value Valor2=Range("A2").Value Signo=Range("B1").Value Si R ("B1") V l Total=0 If Signo="+"Then Total=Valor1+Valor2 Total Valor1 + Valor2 Endif If Signo=""Then Total=Valor1 Total = Valor1 Valor2 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 EndSub End Sub

SubEjemplo_16() www.serverms.es DimSignoAsString Dim Valor1AsInteger,Valor2AsInteger,TotalAsInteger Di V l 1 A I t V l 2A I t T t lA I t Valor1=ActiveSheet.Range("A1").Value Valor2=ActiveSheet.Range("A2").Value Signo=ActiveSheet.Range("A3").Value Si A ti Sh t R ("A3") V l SelectCasesigno Case"+" Total=Valor1+Valor2 T t l V l 1+V l 2 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 EndSub End Sub

www.serverms.es

Cuadrodedilogoconbotones Cuadro de dilogo con botones Variable=MsgBox(Mensaje,Botones,Ttulo) MsgBox Mensaje ,Botones, Titutlo MsgBox Mensaje, Botones, 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
Sub Ejemplo_20() S b Ejemplo 20 () Dim NotaAsInteger Dim MediaAsSingle Nota=Val(InputBox("EntrarNota:","EntrarNota")) N t V l(I 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

Serepite: Se repite:
Nota=Val(InputBox("Entrarla1Nota:","EntrarNota")) ActiveSheet.Range( AX ).Value Nota ActiveSheet.Range("AX").Value =Nota Media=Media+Nota

ConEstructurasciclicas ahorramoslineas decdigo:

www.serverms.es

5funcionesfundamentales: 5 funciones fundamentales:


Para(ForNext) Para (For Next) DoWhile...Loop (HacerMientras) DoLoop While. Do..Loop Until (Hacer..Hasta). For Each

www.serverms.es

Para var =Valor_Inicial Hasta Valor_Final Paso IncrementoHacer aa a ao c a asta a o a aso c e e o ace Sentencia1 Sentencia2 SentenciaN Siguiente For Varible =Valor_Inicial To Valor_Final Step Incremento Sentencia1 Sentencia2 SentenciaN N Next V i bl Variable

www.serverms.es

Ejemplo: je p o Sub Ejemplo_21() Dim iAsInteger Dim TotalAsInteger l Dim ValorAsInteger o o 0 For i=1To 10 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 CiudadAsString Di Ci d d A S i WorkSheets("Hoja1").Activate ActiveSheet.Range("A2").Activate Nombre=InputBox("EntreelNombre(Return paraTerminar):","Nombre") N b I tB ("E t l N b (R t T i ) " "N b ") DoWhile Nombre<>"" Ciudad=InputBox("EntrelaCiudad:","Ciudad") Edad=InputBox("EntrelaEdad:","Edad") Ed d I 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 EndSub End Sub

www.serverms.es

Do Nombre=InputBox("EntreelNombre(Return paraTerminar):","Nombre") Ciudad=InputBox("EntrelaCiudad:","Ciudad") Edad=Val(InputBox("EntrelaEdad:","Edad")) fecha=CDate(InputBox( EntralaFecha: Fecha )) fecha = CDate(InputBox("Entra la 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("Otro registro ?",vbYesNo + vbQuestion Datos") Mas_Datos =MsgBox( Otroregistro? vbYesNo +vbQuestion, 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=CDate(InputBox("FechaNac :","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 EndWith E d Wi h 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() g DimNuevo_Nombre AsString 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 EndSub End Sub

www.serverms.es

Crearuncuadrodedialogo Crear un cuadro de dialogo Introducir,ver,datos Herramientas>Opciones H i O i Aplicacionesdeaspectoprofesional Msguiadoeintuitivo

www.serverms.es

AbrirEditordeVB(Alt+F11) Abrir Editor de VB (Alt+F11) InsertarunobjetoUserform.


S l i SeleccionamoselLibro l Lib Botndrcho Insertar>Userform

www.serverms.es

Podemosdisearnuestroformularioconcontroles Podemos disear nuestro formulario con controles

Situndonosencimavemosladescripcindelcontrol

www.serverms.es

Seleccionarobjetos:sirveparaseleccionarcontrolesinsertadosenelUserform Seleccionar objetos: sirve para seleccionar controles insertados en el Userform Label:sirveparaponerunttuloountexto. Textbox:sirveparaqueunusuariointroduzcadatos. ComboBox:sirveparaqueunusuarioelijaunaopcindeunalista. C b 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 sepuedencreardistintaspginas. li i U f d di i i ScrollBar:Paralistasconmuchoselementoselscrollbar nospermitenavegarlos. SpinButton:permiteaumentarodisminuirvalores. Image:permiteintroducirimgenesenelUserform. RefEdit:permitehacerreferenciaaunaceldadeExcel.

www.serverms.es

www.serverms.es

Establecerobjetivoycontroles Establecer objetivo y controles


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

Los controles que utilizaremos son: Loscontrolesqueutilizaremosson:


Textbox:paraqueelusuarioingreselosdatos Label:paradarleelnombredelosTextbox p CommandButton:paraprocederconelingresodedatoso cancelar

www.serverms.es

Creamoslatablaenlahoja Creamos la tabla en la hoja CreamosunUserform (UF) C U f

EnelcdigodelAgregar:

www.serverms.es

PrivateSubagregar_Click() g g () '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 =xlThin g .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 .ColorIndex =xlAutomatic xlAutomatic EndWith EndSub

SubRelleno() Sub Relleno() 'AsignaColordeRelleno With Selection.Interior .ColorIndex =36 C l I d 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 macro en Complemento macroenComplemento Util para posible distribucin. Desde elEditordeVB
Archivo >Guardar como Guardar como tipo:Complemento deMicrosoftExcel(XLA)

Parainstalarlo
Herramientas > Complementos > Examinar >Complementos >Examinar

www.serverms.es

Existen 3 niveles de seguridad (depende de la versin) 3niveles deseguridad delaversin) Recomendable Medio

www.serverms.es

AligualquehojasoelLibro,lasmacrossepueden Al igual que hojas o el Libro las macros se pueden proteger


Herramientas > Propiedades de VBAProject >Proteger Herramientas>PropiedadesdeVBAProject...>Proteger

www.serverms.es

Evitar actualizacin de pantalla depantalla


Application.ScreenUpdating=False

Prevenir clculos mientras seejecuta elcdigo


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

Evitar el uso de Copiar, Pegar y Seleccionar EvitarelusodeCopiar,PegarySeleccionar


Range("C10:C12").CopyRange("E10")

Das könnte Ihnen auch gefallen