You are on page 1of 87

CarlosAsenjo MCSEMCT

www.serverms.es

ObjetivodelCurso
Conceptosbsicos Creacindemacros Automatizartareas p fundamentalesdeVBExcel Conceptos

Contenidos
Conceptodemacro Creacinautomticademacro Edicindemacro Asignacinaobjetos

www.serverms.es

Contenidos
Conceptodemacro Creacinautomticademacro Edicindemacro Asignacinaobjetos EditorVBExcel

www.serverms.es

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

www.serverms.es

Unadefinicinsencilla
Macro:esunconjuntodeinstruccionesdecdigo(programado)que permitenrealizarunatareadeterminadacomoastambinexpandir p p e incrementarlasprestacionesdeExcel. LasmacrosseescribenenlenguajedeprogramacinVBA(VisualBasic for Applications)eneleditordeVBqueincorporaExcel

www.serverms.es

Sepuedendefinir4grandes"reas" reas dondeseaplican lasmacrosqueson:


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

www.serverms.es

Automatizacindeprocesos:
Todoslosdasllevamosacabolasmismasacciones(Centrar, Negrita,Tamaox,) Individualmentesonmuy ysencillas,pero p enconjunto j forman untediosotrabajo SOLUCIN: Macro

www.serverms.es

Creacindefuncionesamedida:
Excelincorpora+ 330funcionesquesepuedenusardeforma aisladaoanidada Ninguna g deellasseajusta j aloque q queremos q SOLUCION:Macro.Aparecerenelmendefuncionescomo unams.

www.serverms.es

Creacindenuevoscomandos comandos,complementosy mens:


Cadaveztengoquebuscarcomandosendiferentesmens Mevuelvoloco SOLUCIN:Macro.Puedescrearunmenpersonalizadocon tuscomandosmsfrecuentes

www.serverms.es

Creacindeaplicacionesamedida:
Excelesutilizadoenmuchoscampospormuchosusuarios Lasmacrostepermitencreartodounprogramadesoftware LopodrnusarcualquierusuarioaunquenosepaExcel

www.serverms.es

` `

(OPM). (OPM) Supongamosquetenemosunacanastadefruta


Obj Objetos: t seran las l mismas i f frutas t ( (naranjas, j peras). ) Propiedades: seranlascaractersticasdelasfrutas(color,olor, sabor textura). sabor, textura ) Mtodos: sonlasaccionesquepodramosejercersobrelas frutas(comprarlas,venderlas,comerlas,almacenarlas, limpiarlas,quitarleslapiel,).

www.serverms.es

EnExcel:
Objetos:unlibroexcel,unahoja,unrango,unacelda,un men,ungrfico,unatabladinmica,uncuadrodedilogo, lasetiquetasdehojas,lascolumnas,lasfilas,etc. Propiedades:porejemplo
x Celda:alto,ancho,color,bloqueadaodesbloqueada, x Hoja:visibleuoculta,conosinlneasdedivisin,

hoja Mtodos:paraunahoja,
x activar,mover,copiaroborrar.

www.serverms.es

` ` `

Hablardemacros macros,lenguajeVBAyOPMeslomismo. mismo EllenguajeVBAsoloesteningls. L Lenguaje j f fcil ilymuyi intuitivo ii


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

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

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

www.serverms.es

NecesarioqueconozcaslabarradeherramientasVBA
Herramientas>Macros

Ver>BarrasdeHerramientas>VisualBasic

www.serverms.es

Tresformasdeaccederaleditor:
Herramientas H i t > M Macros>Editor Edit de d Visual Vi lBasic B i Desdeelbotn EditordeVisualBasicdela Barrade HerramientasVisualBasic. Mtodoabreviadodelteclado:ALT+F11

www.serverms.es

www.serverms.es

LaVentanaProyecto VBAProject:
MuestraXLS(LibrosdeCalculo)yXLA (Complementos)abiertos EnnuestrocasoVBAProject j (Libro1)

Ventana de Cdigo:

www.serverms.es

Tresmtodos:
Manualmente M l t MediantelaGrabadoradeMacros Combinacindeambas(g (grabandoymodificandoelcdigo) g )

www.serverms.es

Objetivo:Escribirelvalor1 1.500 500enlaceldaA1dela hojaExcel.


Comenzamosconunahojavaca Ejecutamoslamacro DeberescribirenA1,1500

www.serverms.es

1 1.
1. 2. 3. 4.

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

2.

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

www.serverms.es

Cincoformas:
Desdeelmismoeditor
x DesdeeliniciodelamacropulsarF5

DesdeExcel
x F11paravolveraExcel x Herramientas>Macros>Macro x Seleccionamoslamacro>Ejecutar

www.serverms.es

DesdeObjetos:
x Ver>BarradeHerramientas>Dibujo x Unavezcreadoelobjeto, j ,BotnDcho.>Asignar g Macro

Desdebotones:
x Ver>Barradeherramientas>Personalizar. x Comandos>Categoras>Macros x Con C el lbotn b t creado: d Botn B t d dcho.> h A Asignar i M Macro

Automticamente:
x Cadaciertotiempo,osegnlaaccindelUsuario

www.serverms.es

'Estamacroescribeel1500enlaceldaC10
Comentariosobrelamacro Siemprehadeempezarpor Enlneaycantidadilimitadas ytilesp paramacroscomplejas p j Muy Notieneefectossobrelamacro

Sub MiPrimeraMacro()
TodamacrocomienzaconSubNombreMacro() NombreMacroseutilizaraparaejecutarlamacro

www.serverms.es

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


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

EndSub
TodamacroterminaconEndSub

www.serverms.es

1 1.
1. 2. 3.

Grabarlamacro
VealmenHerramientas>Macros SeleccionalaopcinGrabarnuevamacro Seabriruncuadrodedilogocomoelquesemuestraacontinuacin.

4. 4 5. 6. 7.

BorraMacro1 yescribeMiPrimeraMacro PulsaAceptar.Apartirdeahorasegrabaracadaclicquehagas PosicinateenA1 yescribe1500 CuandoterminespresionaoHerramientas>Macros>Detenergrabacin

www.serverms.es

Verelcdigo

www.serverms.es

`
1.

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

`
1.

Grabada
Comolahicimos
1. 2 2. 3. 4. CreamosunLibroExcelllamadoLibro1 Herramientas>Macros>Grabar macro 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" 1500 Range("B1").Select EndSub

www.serverms.es

ProcedimientoSUBNombre()
General
x Selellamamanualmentedesdecdigo

Asociadoaunevento
x Ejecuta j deformaautomtica x NobreObjeto_Evento(ej:Workbook_Open)

Sub Macro() Range(A1)=1500 EndSub

www.serverms.es

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

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 VariableAstipo p

www.serverms.es

Dispararmacrossegnacciones(aniveldeLibro)
Guardar,abrir,cerrar,imprimir

HandeescribirseenThisWorkbook

www.serverms.es

Ejemplo:
PrivateSubWorkbook_Activate() Msgbox"Hola,Exceltesaluda EndSub SubWorkbook_Open() Workbook Open() Workbooks.OpenFilename:=Ruta EndSub

Private:macro/funcinsolosepuedellamardesdeelmismomodulo Existen20macrosdeevento

www.serverms.es

Dispararmacrossegnacciones(aniveldehoja)
Activarla,desactivarla,crearnueva

HandeescribirseenHoja1(Nombre)

www.serverms.es

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

Existen9macrosdeeventoanivelhoja

www.serverms.es

SubPrimero() Range("A1").Value="Hola" EndSub

` ` `

Queremosqueseaelusuarioquiendigaqueponer Necesitamosunlugardondeguardarloqueescriba SOLUCIN:Variable DIM variableAS tipo. Enestecaso:DIM MiVariableASString. g

` `

www.serverms.es

` `

Ventanaparaintroducirdatos SINTAXIS: InputBox(Mensaje,Ttulo). Ennuestrocaso:


MiVariable=(Introduzcadatos,Entradadedatos)

Aceptar losdatosseguardaranen SipulsamosAceptar, MiVariable

www.serverms.es

1. Subdatos() DimMiVariableAsString
MiVariable=InputBox("IntroduzcaDatos","EntradadeDatos")

ActiveSheet.Range( A1 ).Value=MiVariable ActiveSheet.Range("A1").Value EndSub 2. Subdatos()


ActiveSheet.Range("A1").Value=InputBox("IntroduzcaDatos","Entradade Datos")

EndSub

www.serverms.es

3. Sub Entrar_Valor Di Casilla Dim C ill As A String S i Dim TextoAsString


Casilla=InputBox("Enquecasillaquiereentrarelvalor","EntrarCasilla") Texto=InputBox (Introduzcadatospara&Casilla,"EntradadeDatos") ActiveSheet Range(Casilla) Value =Texto ActiveSheet.Range(Casilla).Value

EndSub

www.serverms.es

` `

` Sub Entrar_Valor Texto=InputBox(Introduzcadatos","Entradadedatos") ActiveSheet Range("A1") ActiveSheet.Range( A1 ).Value Value=Testo EndSub

Herramientas>Opciones>RequerirdeclaracindeVar Var. MUYRECOMENDABLEdeclararvariables Ejemplopractico:

Option Explicit SubEntrar_Valor DimTextoAsString InputBox(Introduzca datos") Texto=InputBox( Introduzcadatos", datos ,"Entrada Entradadedatos ) ActiveSheet.Range("A1").Value=Testo EndSub

www.serverms.es

` ` ` ` ` `

Byte Integer D i l Decimal Date String Variant

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

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

www.serverms.es

` ` `
`

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

EjemploPractico:

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

www.serverms.es

ValorlgicoSI If Condicin C di i Then Th


Sentncia1 Sentncia2 . . S i N SentnciaN

SiCondicin C di i Entonces E
Sentncia1 Sentncia2 . . S i N SentnciaN

FinSi

EndIf

www.serverms.es

Ejemplo(Desarrollatumismounejemplosencillo)

www.serverms.es

Ejercicio:

Entrarunacantidadquerepresentaelpreciodealgoporelteclado conlainstruccinInputBoxyguardarloenlaceldaA1delahoja activa. Si elvalorentradodesdeelteclado(yguardadoenA1)es superiora1000,pedirdescuentoconotroInputBoxyguardarloenla casillaA2delahojaactiva activa. A3 elpreciodeA1menoseldescuentodeA2. A2 CalcularenA3,

www.serverms.es

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 Descuento =0 Precio=( (InputBox("Entrar p ( elp precio", ,"Entrar") ) IfPrecio >1000Then Descuento=InputBox("Entrar p ( Descuento", ,"Entrar") ) EndIf
Range("A1").Value =Precio g ( ) Range("A2").Value =Descuento Range("A3").Value =Precio Descuento

EndSub

www.serverms.es

Compara Compara celdas, celdas si soniguales, iguales las poneenAZUL Sub S 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, celdas si soniguales, iguales las poneenAZUL Sub S 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

IFThen IFTh ThenEnd E dIF IFThenElse EndIF IFThenElseIf Else EndIF

www.serverms.es

Deberncumplirsetodaslascondiciones

If Condicin1And Condicin2Then .Sentecias EndIf

www.serverms.es

DeberncumplirseUNAdelascondiciones

If Condicin1Or Condicin2Then .Sentecias EndIf

www.serverms.es

Nodebercumplirselacondicin

If NOT(Condicin)Then .Sentecias EndIf

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, casilla variable, variable expresin expresin.

SelectCaseExpresin C valores Case l : Instrucciones. C valores Case l : Instrucciones. . CaseElse Si Sinosecumpleningunadelasanteriores EndSelect

SubEjemplo_15() www.serverms.es DimSignoAsString Di Valor1 Dim V l 1As A Integer, I t Valor2 V l 2A AsInteger, I t Total T t lA AsInteger I t Valor1=Range("A1").Value Valor2=Range("A2").Value Si Signo =R Range("B1").Value ("B1") V l Total=0 If Signo="+"Then Total=Valor1+Valor2 Endif If Signo=""Then Total=Valor1 Valor2 Endif If Signo="x"Then Total=Valor1*Valor2 Endif If Signo=":"Then Total=Valor1/Valor2 Endif ActiveCell.Range("A3").Value=Total EndSub

SubEjemplo_16() www.serverms.es DimSignoAsString Di Valor1 Dim V l 1As A Integer, I t Valor2 V l 2A AsInteger, I t Total T t lA AsInteger I t Valor1=ActiveSheet.Range("A1").Value Valor2=ActiveSheet.Range("A2").Value Si Signo =A ActiveSheet.Range("A3").Value ti Sh t R ("A3") V l SelectCasesigno Case"+" T t l=Valor1 Total V l 1+Valor2 V l 2 Case"" Total=Valor1 Valor2 Case"x" Total=Valor1*Valor2 Case":" Total=Valor1/Valor2 CaseElse Total=0 EndSelect ActiveCell.Range("A3").Value=Total EndSub

www.serverms.es

` ` `

Cuadrodedilogoconbotones Variable=MsgBox(Mensaje,Botones,Ttulo) MsgBoxMensaje, Mensaje ,Botones,Titutlo Titutlo VbOK VbCancel VbAbort VbRetry VbIgnore VbY VbYes VbNo 1 2 3 4 5 6 7 Aceptar Cancelar Anular Reintentar Ignorar S No.

` ` ` ` ` ` `

www.serverms.es

Permitenejecutarmsdeunavezlasmismassentencias
Sub S b Ejemplo_20 Ejemplo 20() Dim NotaAsInteger Dim MediaAsSingle N t =V Nota Val(InputBox("Entrar l(I tB ("E t N Nota t :" ","Entrar "E t N Nota")) 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("EntrarNota:","EntrarNota")) ActiveSheet.Range("A3").Value=Nota Media=Media+Nota Media=Media/5 ActiveSheet.Range("A6").Value=Media EndSub

www.serverms.es

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

ConEstructurasciclicas ahorramoslineas decdigo:

www.serverms.es

5funcionesfundamentales:
Para(ForNext) (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 Incremento c e e oHacer 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 Total lAsInteger Dim ValorAsInteger o i=1To o 10 0 For Valor=Val(InputBox("Entrarunvalor","Entrada")) Total=Total+Valor Next i ActiveSheet.Range("A1").Value=Total End dSub

www.serverms.es

Hacer ace Mientras e t as(secu cumpla p ala aco condicin) dc ) Sentencia1 Sentencia2 SentenciaN FinHacerMientras

DoWhile (secumplalacondicin) Sentencia1 Sentencia2 SentenciaN Loop

www.serverms.es

SubEjemplo_27() Dim NombreAsString Dim Di Ciudad Ci d dAs A String S i WorkSheets("Hoja1").Activate ActiveSheet.Range("A2").Activate N b =I Nombre InputBox("Entre tB ("E t el lNombre N b (Return (R t paraTerminar) T i ):" ","N "Nombre") b ") DoWhile Nombre<>"" Ciudad=InputBox("EntrelaCiudad:","Ciudad") Ed d=InputBox("Entre Edad I tB ("E t l laEdad Ed d:", " "Ed "Edad") d") Fecha=InputBox("EntralaFecha:","Fecha") With ActiveCell .Value 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

www.serverms.es

Do Nombre=InputBox("EntreelNombre(Return paraTerminar):","Nombre") Ciudad=InputBox("EntrelaCiudad:","Ciudad") Edad=Val(InputBox("EntrelaEdad:","Edad")) fecha=CDate(InputBox( CDate(InputBox("Entra EntralaFecha:","Fecha")) Fecha )) With ActiveCell .Value=Nombre .Offset(0, ff ( 1).Value ) l =Ciudad d d .Offset(0,2).Value=Edad ( ,3).Value ) =fecha .Offset(0, EndWith ActiveCell.Offset(1,0).Activate Mas Datos =MsgBox("Otro 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 ( Nac :", ,"Fecha")) )) fecha=CDate(InputBox("Fecha With ActiveCell .Value=Nombre .Offset(0, Offset(0 1).Value 1) Value=Ciudad .Offset(0,2).Value=Edad .Offset(0,3).Value=fecha E dWith End 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 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

www.serverms.es

` ` `

Crearuncuadrodedialogo Introducir,ver,datos H Herramientas i >O Opciones i Aplicacionesdeaspectoprofesional Msguiadoeintuitivo

` `

www.serverms.es

` `

AbrirEditordeVB(Alt+F11) InsertarunobjetoUserform.
Seleccionamos S l i el lLib Libro Botndrcho Insertar>Userform

www.serverms.es

Podemosdisearnuestroformularioconcontroles

Situndonosencimavemosladescripcindelcontrol

www.serverms.es

` ` ` ` ` ` ` `

Seleccionarobjetos:sirveparaseleccionarcontrolesinsertadosenelUserform Label:sirveparaponerunttuloountexto. Textbox:sirveparaqueunusuariointroduzcadatos. C b ComboBox: sirve i paraqueunusuario i elija lij unaopcin i de d unalista. li ListBox:sirveparaqueunusuariorelleneoelijavariasopcionesdeunalista. CheckBox:sirveparaqueunusuarioactiveunadeterminadafuncin. OptionButton:Seleccionarunaopcindeterminadaentrevariasposibilidades. ToggleButton:Activaodesactivaalgunafuncionalidad."Encendido"/"Apagado".

www.serverms.es

` ` ` ` ` ` ` `

Frame:sirveparaagruparelementosdeunUserform CommandButton:esunsimplebotnquenospermiteejecutaracciones. TabStrip:enunmismoUserform sepuedencreardistintassecciones. MultiPage: li enunmismo i Userform U f sepueden d creardi distintas i pginas. i ScrollBar:Paralistasconmuchoselementoselscrollbar nospermitenavegarlos. SpinButton:permiteaumentarodisminuirvalores. Image:permiteintroducirimgenesenelUserform. RefEdit:permitehacerreferenciaaunaceldadeExcel.

www.serverms.es

www.serverms.es

Establecerobjetivoycontroles
Objetivo
x CrearunUserform paraqueunusuariocompleteunosdatos personales(Nombre,EdadyFechadeNacimiento).Luegoqueel usuariocompletesusdatosalapretarunbotnlosmismosse volcarn l enunatabla bl de d Excel. E l

Loscontrolesqueutilizaremosson:
x Textbox:paraqueelusuarioingreselosdatos x Label:p paradarleelnombredelosTextbox x CommandButton:paraprocederconelingresodedatoso cancelar

www.serverms.es

Creamoslatablaenlahoja C Creamos unUserform U f (UF)

EnelcdigodelAgregar:

www.serverms.es

PrivateSubagregar g g _Click() () 'definimoslasvariables DimiFila AsLong Dimws AsWorksheet Setws =Worksheets(1) 'Encuenta lasiguiente g filavaca 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 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 'Asigna g Bordes 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() 'AsignaFormatoNumrico Selection.NumberFormat = "# #,##0;[Red]#,##0 ##0;[Red]# ##0 EndSub SubBordes() 'AsignaBordes With Selection.Borders .LineStyle =xlContinuous .Weight =xlThin .ColorIndex =xlAutomatic EndWith EndSub

SubRelleno() 'AsignaColordeRelleno With Selection.Interior .ColorIndex C l I d =36 .Pattern =xlSolid .PatternColorIndex =xlAutomatic EndWith EndSub

www.serverms.es

SubMacro() range("a2).select EndSub Sab Macro() Range("A2").Select EndSub SubMacro() IfRange("a2").value=2Then MsgBox "Mal EndSub

Modo Depuracin
Ejecuta PasoaPaso Determina mejor donde est el error

www.serverms.es

` `

Podemos convertir nuestra macroenComplemento Util para posible distribucin. Desde elEditordeVB
Archivo >Guardar como Guardar como tipo:Complemento deMicrosoftExcel(XLA)

Parainstalarlo
Herramientas >Complementos >Examinar

www.serverms.es

` `

Existen 3niveles deseguridad (depende delaversin) Recomendable Medio

www.serverms.es

AligualquehojasoelLibro, Libro lasmacrossepueden proteger


Herramientas>PropiedadesdeVBAProject...>Proteger VBAProject >Proteger

www.serverms.es

Evitar actualizacin depantalla


Application.ScreenUpdating=False

Prevenir clculos mientras seejecuta elcdigo


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

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

You might also like