Excel: Macros Básicos Visual Basic para aplicaciones • Una macro Excel es una serie de procedimientos o funciones agrupados en un módulo vba (visual basic para aplicaciones) que se almacena para poder ejecutarse cuando se invoque a dicha macro. • El lenguaje vba esta enfocado a la realización de programas sobre las herramientas Excel, Access, Word. Con macros vba podemos crear nuevas funciones para nuestras hojas Excel, personalizar estilos y formatos, crear programas para la resolución de cálculos complejos y automatizar tareas. • Las macros son usadas para economizar procesos, evitando tener que repetir de tareas dentro de una hoja de Excel. • Excel incluye protecciones para ayudar a proteger contra virus susceptibles de ser transmitidos por macros. Para poder trabajar con un libro que contiene macros, se debe habilitar el manejo de macros dentro de Microsoft Excel. • En Excel se pueden realizar : Procedimientos: pasos repetidos y automáticos Manejo de Objetos: un ítem que puedes controlar con botones Funciones: Hacer calculos y devolver un valor x Porque usar Macros • Hacerlo mas rápido • Evitar errores de entradas manuales • Maximizar el uso de Excel ¿Por que Visual Basic? • Visual Basic es el lenguaje en el que se apoya Excel para hacer procedimientos por medio de programación. Grabar un Macro Record Macro: Asigna un nombre y un procedimiento, pon "stop" Puedes asignar un "shortcut" Puedes editar las líneas de la grabación Ejercicio: GRABA un Macro que ejecute lo siguiente: "Miprimermacro" Cambia el nombre a la hoja por "Prueba" Pon tu nombre completo en la Celda "B2" Pon los años que tienes en la celda "B3" Haz un "Scroll down" (Muévete en la hoja con las barritas) En la celda "B4" pon una formula que calcule el numero de días vividos En la celda "C5" coloca la leyenda "Días vividos" STOP Correr un Macro • Pasos para correr • • • • Selecciona todo lo que escribiste en la hoja Bórralo En el menú de macros, pon "play" Revisa que ejecute lo mismo que hicimos en el ejercido anterior Agrega Shortcuts (atajos de teclado) Veamos ¿Que hicimos? • La carpeta de modulo solo aparece ya que se grabó un macro, si no hay macros grabados no aparece • Abre la barra de herramientas de EDIT en Visual Basic • Las letras en verde no son parte de la programación, son comentarios y empiezan con un apostrofe ' o REM (juega con estos dos iconos: ) Lenguaje visual: • Empezemos a hablar en Visual Basic Visual Basic Sub Nombre() End Sub Nosotros Mellamo Nombre() Acabé Todas las instrucciones Visual Basic es mejor decirles que empiezen Y que acaben SIEMPRE Activar y desactivar Codigo: "Miprimermacro" . Que Como (Accion o propiedad) Range("B2").Select Referencia Absoluta Activecell.Select Referencia Relativa El texto siempre va entre comillas Para no ser confunido con Texto Propiedades: Propiedades: Cambian valores, formatos, ubican, etc, Absolutas Range("A2").Select Range("A2").Value = 5 Range("A3").Select • Select: Referencia de ubicación • Value: = "Texto" o = valor • Offset: Desfase (Row,Column) Relativas ActiveCell.select ActiveCell.Value = 5 Activecell.Offset(1,0).Select Propiedades: • Ejercico: GRABA un macro de nombre formatos Escribe en 3 celdas diferentes 3 nombres de superheroes Rellena una celda de color Cambia el color del texto a otra Agrega bordes a la tercera Selecciona las 3 celdas y centra el texto STOP Revisa Lo que es necesario en la macro Lo que da valor al macro Sub superheroe() '' Range("J4").Select ActiveCell.FormulaR1C1 = "Superman" Range("J5").Select ActiveCell.FormulaR1C1 = "La mujer maravilla" Range("J6").Select ActiveCell.FormulaR1C1 = "Afroman" Range("J4").Select With Selection.Interior .ColorIndex = 39 .Pattern = xlSolid End With Range("J5").Select Selection.Font.ColorIndex = 5 Range("J6").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With ..... Range("J4:J6").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Revision de Codigo: Sub superheroe() ' Escribe 3 superheroes Range("J4").Select ActiveCell.FormulaR1C1 = "Superman" Range("J5").Select ActiveCell.FormulaR1C1 = "La mujer maravilla" Range("J6").Select ActiveCell.FormulaR1C1 = "Afroman" Rem Pone color solido a una celda Range("J4").Select With Selection.Interior .ColorIndex = 39 .Pattern = xlSolid End With Rem Cambia color de celda Range("J5").Select Selection.Font.ColorIndex = 5 Rem Agrega bordes (Los bordes usan muchas lineas de codigo x que son 4 lineas 'en un rectangulo mas dos lineas interiores) Range("J6").Select With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin End With ' Centra los textos de la seleccion de J4 a J6 Range("J4:J6").Select With Selection .HorizontalAlignment = xlCenter End With End Sub Revision de Codigo: Correr completo: F5 Correr completo: F5 Loop infinito: Esc (una sola vez, basta) Resumen: Hasta ahora ya aprendí: • Grabar macros, correr macros y editar macros • Identificar donde acaba y donde empieza una macro • Ordenar la macro con comentarios para recordar que está haciendo • Leer codigo de Visual Basic • Manejar coordenada absolutas y relativas • Saber que es importante y que puedo borrar Cuadros de dialogo: Comando Uso Para dar un aviso: Puedes tener OK, Abort, Yes & No, etc Ejemplo MsgBox "Tu mensaje", (boton+simbolo) MsgBox "Botones OK y Cancel", 1 Msgbox "Tu mensaje", 4+32 Msgbox Inputbox Para pedir información al usuario como números o Texto y guardar esa información (variable) Se requiere declarar variable Dim x as integer Dim x as integer __________________________________________ Sub box() X = InputBox("¿Cuantos escalones hay en tu casa?") Range("J8").Value = X Range("J8").Select End Sub Comandos Logicos: IF Comando Uso Ejemplo Condicion con una alternativa , Si la condicion no es verdadera, no pasa nada Sub Macro5() ' Condicion con una alternativa If ActiveCell.Value < 0 Then MsgBox "Tu mensaje" End If End Sub If condition Then statement Else Condicion con dos alternativas: si la condicion es verdadera se ejecuta un procedimiento, si es falsa se ejecuta otro procedimiento Sub Macro6() ' Condicion con dos alternativas If ActiveCell.Value < 0 Then MsgBox "Tu mensaje" Else Msgbox "Tu mensaje altenativo" End If End Sub IF condition Then statement ElseIF condition Then statement End if Ejecuta mas alternativas Cada vez que se llega a un "Elseif" se vuelve a evaluar la condicion No disponible para este curso If condition Then Statement Ejercicio: Quiero hacer un Gaffette para una expo de accesorios para automoviles: Si el participante es propietario de dos o mas coches, es mas probable que compre mis productos: Haz un Macro que funcione para hacer estas Dos variantes de gaffette : Tu escoge los colores (6 columnas x 8 renglones) empieza en C3 y usa referencia absolutas Participante Participante Comprador Comprador Potencial Comandos Logicos: Do...Loop Comando Do Until Loop (Si es Falso , ejectuto) Uso Ejemplo Sirve para repetir el procedimiento muchas veces hasta que aparezca una condicion que nos hara parar el ciclo de repeticiones Sub colores() ´hace la instruccion desde el inicio y hasta que la condicion se cumpla Do Until counter = 50 counter = counter + 1 ActiveCell.Select ActiveCell.Value = counter ActiveCell.Select Selection.Interior.ColorIndex = counter 15 ActiveCell.Offset(1, 0).Select 16 Loop 17 End Sub 18 Dim counter as integer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 Comandos Logicos: Do...Loop Comando Uso Sirve para repetirse mientras las condiciones se cumplan Do While Loop (Si es verdadero, ejecuto) Ejemplo Sub Ahora() ´hace la instruccion hasta que se cambie de estado Range("a2").Select Do While ActiveCell.Value > 0 ActiveCell.Offset(0, 1).Select If ActiveCell.Value = "" Then ActiveCell.Value = Date + Time ActiveCell.Offset(1, -1).Select Else ActiveCell.Offset(1, -1).Select End If Loop End Sub Cuando corro un Macro: Boton ¿Como hago para que al presionar un Boton (imagen) se corra un Macro? Al abrir o cerrar el libro: • automaticos Auto_Open () o Auto_Close() son procedimientos que se ejecutan al abrir o cerrar el libro. Sub Auto_Open() Statements End Sub Sub Auto_Close() Statements End Sub ¿Porque sería bueno correr los macros al abrir o al cerrar el libro? Ejercicio: • Haz un macro que al abrirlo te de la bienvenida Y al cerrarlo se despida de ti. (usa msgbox) Hola!!!! Adios!!!! Practicas ¿Que reportes hago? Ejercicio: Sheets • Haz una base de datos de gastos: Mes Enero Enero Febrero Marzo Marzo Abril Abril Mayo Mayo Mayo Pagos $2,500 $500 $800 $2,000 $6,000 $2,500 $1,700 $1,800 $2,000 $2,500 Concepto Colegiatura Mantenimiento Varios Mantenimiento Varios Colegiatura Varios Mantenimiento Varios Colegiatura Tarjeta Amex Amex Amex BBVA Amex BBVA BBVA BBVA BBVA Amex Sheets • GRABA un macro que haga una tabla dinamica con Mes en Renglones, Concepto en columnas y Tarjeta como campo de pagina. STOP Tarjeta (All) Sum of Pagos Concepto Mes Colegiatura Mantenimiento Varios Abril 2500 Enero 2500 500 Febrero Marzo 2000 Mayo 2500 1800 Grand Total 7500 4300 1700 800 6000 2000 10500 Grand Total 4200 3000 800 8000 6300 22300 Sheets • GRABA un Macro que cambie el nombre a la Hoja de la tabla pivote por "Pivote" Stop Graba un macro que copie los valores de la tabla pivote y los pegue en el renglon "A100" pero como valor Stop Sheets Graba un macro que grafique los gastos como columnas moradas STOP *Haz una Macro "General" que llame a todas las macros que grabaste Graba un macro que al cerrarse el libro borre la Hoja llamada Pivote STOP Explication: Aplicaciones para hojas: Absolutas : Sheets("Sheet4").Select Sheets("Sheet4").Name = "Pivote" Relativas: ActiveSheet.Select ActiveSheet.Name = "Pivote2" Funciones • Son "Formulas" que con argumentos devuelven un valor. • Hacen trasformaciones de datos a partir de bases lógicas • Se llaman por medio de un macro Function Name(argument) Statments Function CelciusConversion(F) Celsiusconversion = (5 / 9) * (F - 32) End function End Function Sub Fahrenheit_Celsius() F = ActiveCell.Value ActiveCell.Offset(0, 3) = Celsiusconversion(F) End Sub Llamar a la función: Ahora apaece en el menu de f(x) funcion Aparece como formula