MACROS Clase 1
MACROS Clase 1
MACROS Clase 1
1 INTRODUCCIÓN
Abrir Visual Basic: ALT F11
F5 Te ejecuta la macro, F8 Te la ejecuta por partes
Si hago click sobre el código y aprieto F5 te ejecuta esa macro sin salir o tener que crear botón.
Barra superior
Guardar: no solo guarda el código sino también el archivo de Excel.
Importante guardar el Excel en formato habilitado para macros xlsm.
Lo que ejecuto en la macro no se puede revertir, así que tengo que guardar siempre antes de
ejecutar la macro.
Cuando se programa para todo el archivo hay que crear un módulo. También se pueden crear
macros para cada hoja.
Inmediato
Escribir el nombre de la macro, hacer un click y se ejecuta.
Apóstrofe (verde) y estructuras (azul)
Para comentario o para anular cosas escritas, las convierte en texto
En azul te indica las estructuras, funciones.
2 GRABADORA
Abrir grabadora (ventana programador)
Nombre de la macro (no puede tener espacio)
Método abreviado (no elegir una letra que se use normalmente). Si quiero cambiarlo
después: programador, macro, opciones y ahí le puedo cambiar la letra al método
abreviado.
Guardar: en este libro, en libro de macros personal o libro nuevo (esto se puede usar por
ejemplo para que ese libro nuevo afecte otros excels). Cuando estoy grabando en el libro
personal para guardar tengo que hacerlo siempre en la ventana de visual basic.
Listo estoy grabando. Empiezo a ejecutar las acciones que quiero grabar.
Si veo la ventana de visual basic a la vez voy a ver el código que se está escribiendo.
3 OBJETOS, MÉTODOS, PROPIEDADES
3.1 Objetos
Cells Celda
ActiveCell Celda activa
Selection Selección
Rows Filas
Columns Columnas
Windows Ventana
ActiveWindow Ventana activa
ActiveWorkbook Libro activo
4 ESCRIBIENDO EN VB
4.2 Range
Permite trabajar con una celda o un conjunto de celdas.
Range("A1").Select Selecciona la celda A1
Range("A4", Range("A4").End(xlDown)).Count Se coloca en A4 y cuenta desde A4 hasta lo último
escrito para abajo.
Semana = Range("C2")
Range("1:1").Find(Semana).Column
Para que me seleccione una celda me conviene ponerle nombre a la celda por si la muevo (creo
filas o columnas) siempre me toma el valor de la celda original:
Range = “carpeta”
ActiveCell.Formula
ActiveCell.Formula = "=sum(A1:B1)"
Me paro en la celda que quiero en el Excel, ejecuto esa macro y me va a devolver la suma de esas
celdas.
ActiveCell.FormulaR1C1
Para que la macro sea flexible y se ejecute en cualquier parte. Me paro en la celda que quiero del
Excel y aprieto la macro (por ej con F5)
ActiveCell.FormulaR1C1 = "RC(-2) + RC(-1)" Toma dos filas por arriba de la celda seleccionada y una
columna para la izquierda.
Function
Creo funciones que uso en el Excel, devuelven un resultado.
Function IVA (importe) donde importe es el argumento
IVA = importe * 0.21
End Function
Voy al Excel y escribo “=IVA (celda a la que voy a aplicar la función)” y devuelve el valor ese por
0.21.
1) Ejemplo 1: Selection.Interior
Si grabo pintar una celda de color amarillo escribe lo siguiente:
With Selection.Interior (selection es la acción, ¨punto¨ Interior es la propiedad)
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
2) Ejemplo 2
Sub FormatoEncabezado()
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.RowHeight = 30
End With
End Sub
Clear
Borra el rango que dice la celda D7 (fila 7, columna 4)
Sub borrar()
Range(Cells(7, 4)).Clear
End Sub
Ejercicios
3) Copiar el dato de la celda C7 a todas las celdas del rango indicado en D7
Sub ejercicio1()
Cells(7, 3).Copy
Range(Cells(7, 4)).PasteSpecial (xlPasteValues)
End Sub
4) Copiar el dato de la celda C7 a todas las celdas del rango indicado en D7 pero incluyendo los
bordes:
Sub Ejemplo1()
Range("c7").Copy Range(Range("D7"))
End Sub
Lo mismo escrito distinto:
Sub macro3()
Cells(7, 3).Copy Range(Cells(7, 4))
End Sub
Count
Indicar en D13 la cantidad de celdas incluidas en el rango indicado en D7
Sub ejercicio3()
Range("d13") = Range(Cells(7, 4)).Count
End Sub
Sheets.Select
Seleccionar hoja
Sub hoja ()
Sheets (“FGE”). Select también puedo poner sheets (1) selecciona hoja 1
End Sub
Sheets.Add
Crear una hoja con el nombre “ejemplo”
Sub ejercicio4()
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "Ejemplo"
End Sub
Crear una hoja con lo que diga una celda
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = Sheets("06 Práctica").Range("D17")
ActiveWorkbook
Como obtener la ruta del archivo que tengo abierto y me lo muestra en la ventana inmediato
(abajo)
Sub ruta()
Debug.Print ActiveWorkbook.Path
End Sub
El guión bajo me indica que la función sigue abajo
Workbook.Open
ActiveWorkbook.Path &"/"&
Debug.Print "tomi"
Debug.Print Range("d13")
Sub hablar()
texto = InputBox("Sigue vivo Jacinto") Te sale un cuadro con esto escrito
Debug.Print texto Te muestra en la ventana de inmediato lo que significa texto
Application.Speech.Speak texto
End Sub
On Error Resume Next
Cuando encuentra un error la macro te salta a la siguiente acción y no ejecuta esa fila. Sirve para
que no te salga un cartel y te abra el visual basic.
Sub ejercicio4b()
On Error GoTo
Si se produce un error realiza una acción sino sigue con la acción del segundo GoTo
On Error GoTo cuandohayaerror
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = Sheets("06 Práctica").Range("D17")
GoTo estabien
cuandohayaerror:
ActiveSheet.Delete
estabien:
End Sub
Dim
Crear variable.
Dim texto as XX
No es necesario escribir antes la variable se puede poner:
= es para una variable
cuando es de goto pones dos puntos
FOR-NEXT
Se empieza con For y se termina con Next
Cells (se define con n° de fila y n° de columna)
Sub repetir ()
For i = 1 to Range (“D1”) Desde 1 hasta el valor que este en esa celda
Cells (i, 1) = i
Next i
End Sub
IF-THEN
If a = b Then x1 (puedo escribir que haga algo x1 o dejarlo en blanco y va a seguir la macro)
Else x2
Next i
alfinal: el goto llega hasta aca y va a hacer lo que este después, en este caso terminar la macro
End Sub
VER
Crear variables
Private variable solo se crea para esta macro
Se pueden crear macros que se ejecuten con lo que ocurre en una hoja}
Private variable1 defino la variable
Public variable1 la variable creada sirve para todos los archivos
Eventos
Private Sub y selecciono arriba a la derecha que quiero que haga
Private Sub (macro q se ejecuta solo en esta hoja)