Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
www.serverms.es
Contenidos
Conceptodemacro Creacinautomticademacro Edicindemacro Asignacinaobjetos
www.serverms.es
Contenidos
Conceptodemacro Creacinautomticademacro Edicindemacro Asignacinaobjetos EditorVBExcel
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
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,
www.serverms.es
EjemplosdePropiedadesVBA
Value(valor),Color(color),Format(formato) Value (valor), Color (color), Format (formato)
EjemplosdeMtodosVBA
Copy(copiar),Protect(proteger),Delete(borrar)
www.serverms.es
Ver>BarrasdeHerramientas>VisualBasic
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
1. 1
1. 2. 3. 4.
2.
Escribimoslamacro
'Estamacroescribeelvalor1500enlaceldaA1 Sub MiPrimeraMacro() Range("A1").Value=1500 EndSub
www.serverms.es
DesdeExcel
F11paravolveraExcel Herramientas>Macros>Macro Seleccionamoslamacro>Ejecutar
www.serverms.es
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
Sub MiPrimeraMacro()
TodamacrocomienzaconSubNombreMacro() NombreMacroseutilizaraparaejecutarlamacro
www.serverms.es
EndSub
TodamacroterminaconEndSub
www.serverms.es
1. 1
1. 2. 3.
4. 4 5. 6. 7.
BorraMacro1 yescribeMiPrimeraMacro Borra Macro 1 y escribe MiPrimeraMacro PulsaAceptar.Apartirdeahorasegrabaracadaclicquehagas PosicinateenA1 yescribe1500 CuandoterminespresionaoHerramientas>Macros>Detenergrabacin
www.serverms.es
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
Sub MiPrimeraMacro() 'MiPrimeraMacroMacro 'Macrograbadael02/03/2008porMSL Range("A1").Select ActiveCell.FormulaR1C1 1500 ActiveCell.FormulaR1C1 ="1500" Range("B1").Select EndSub
www.serverms.es
Asociadoaunevento
Ejecutadeformaautomtica j NobreObjeto_Evento(ej:Workbook_Open)
www.serverms.es
www.serverms.es
www.serverms.es
Argumentos
Declararvariable Pedira al usuario el valor del argumento Pediraalusuarioelvalordelargumento 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
www.serverms.es
www.serverms.es
EndSub
www.serverms.es
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
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
If C di i Th CondicinThen
Sentncia1 Sentncia2 . . SentnciaN S i N
FinSi
EndIf
www.serverms.es
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
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
www.serverms.es
www.serverms.es
www.serverms.es
www.serverms.es
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
www.serverms.es
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
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
www.serverms.es
www.serverms.es
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
www.serverms.es
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
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
www.serverms.es