Microsoft Excel
Macros en Visual Basic APP
¿Qué es una Macro en Excel?
• Las Macros en Excel son un conjunto de instrucciones que se ejecutan
de manera secuencial.
• Para escribir estas instrucciones utilizaremos los siguientes
elementos:
• Objetos de Excel
• Propiedades de los Objetos
• Metodos o acciones de los Objetos de Excel
• Funciones que devuelven valores
• Enunciados o palabras claves de VBA APP
¿Dónde están las Macros?
• Las Macros se escriben dentro de módulos en el Editor de Visual Basic.
Ventana de
proyecto
Área de
Trabajo del
Editor de VBA
Ventana
de
Propieda
des
Grabar una macro
• Necesitamos visualizar el menú Programador.
Libro de Macros Personales
• C:\Users\NombreUsuario\AppData\Roaming\Microsoft\Excel\XLSTART
Los objetos de Excel
Representan un elemento de una aplicación
Excel Libro Hoja celda gráfico formulario
Application Workbook Sheet Range - Cells Charts Form
Propiedades Métodos
Objeto.Propiedad=valor Objeto.Métodos
Identificar los Objetos
En el código de Visual Basic, debe identificar un objeto para aplicar uno de los métodos del
objeto o cambiar el valor de una de las propiedades
OBJETOS Identificar x Nombre Identificar x Ubicación
Worksheets Worksheets("facturas emitidas").Select Worksheets(1).Visible = False
Workbooks(1).Activate
Workbooks Workbooks("Ventas y Pagos.xlsm").Worksheets("cobros").Activate
Sheets(“Hoja1").Activate
Sheets(5).Activate
Sheets Sheets(Array("Hoja4", "Hoja5")).Move before:=Sheets(1)
Cells(1, 1).Value = 24
Range("A5").Value=1200
Range / Cells Cells.Item(1, 2).Value = 42
Range("Criteria").ClearContents
Cells(2, 1).Formula = "=Sum(B1:B5)"
ChartObjects ActiveSheet.ChartObjects("torta").RoundedCorners = True ActiveSheet.ChartObjects(2).RoundedCorners = True
Rangos y Celdas
Sub TrabajarConCeldasYRangos()
'Seleccionamos utilizando referencias absolutas con Range
Range("A1").Select
Range("A1:B7").Select
'Seleccionamos utilizando referencias absolutas con Cells(NRO DE FILA,NRO DE COLUMNA)
Cells(1, 1).Select
Range(Cells(1, 1), Cells(7, 2)).Select
'Trabajamos con variables 1
FILA = 7
COLUMNA = 2
Cells(FILA, COLUMNA).Select
'Trabajamos con variables 2
Range("A1").Select
FILA = Selection.Row ‘Guarda en la variable en valor de la fila actual
Range("B2").Select
COLUMNA = Selection.Column ‘Guarda en la variable en valor de la columna actual
Cells(FILA, COLUMNA) = "FILA 1 Y COLUMNA B"
FILA = FILA + 10
Cells(FILA, COLUMNA) = "FILA 10 Y COLUMNA B"
End Sub
Rangos y Celdas
Sub TrabajarConBuclesInfinitos()
'Guardamos la ubicacion de fila y columna en las variables (UBICACION B7)
FILA = 7
COLUMNA = 2
'Usamos las variables para seleccionar las celdas
Cells(FILA, COLUMNA).Select
'Usamos el OBJETO ACTIVECELL para almacenar su contenido en una variable
CONTENIDO_ORIGEN = ActiveCell
'Inicia una sub rutina que permite generar un bucle infinito
SUBRUTINA
'Modificamos la variable FILA sumando 1 (UBICACION B8)
FILA = FILA + 1
'Seleccionamos una nueva celda con el NUEVO VALOR de la variable FILA y el valor de la variable COLUMNA
Cells(FILA, COLUMNA).Select
'Volcamos el valor de la variable CONTENIDO_ORIGEN en la nueva ACTIVECELL
ActiveCell = CONTENIDO_ORIGEN
'Regresa a SUBRUTINA y genera el bucle infinito
GoTo SUBRUTINA
End Sub
Hojas
Sub TrabajarConHojas1()
'Seleccionar una hoja por nombre
Sheets("Hoja1").Select
'Seleccionar una hoja por nombre usando una variable
NOMBRE_HOJA = "Hoja2"
Sheets(NOMBRE_HOJA).Select
'Seleccionar una hoja por posición
Sheets(3).Select
'Seleccionar la primera y la ultima hoja utilizando ARRAY y COUNT por posición
'ARRAY permite establecer un conjunto de hojas por posición
'COUNT almacena la cantidad totales de hojas del libro
Sheets(Array(1, Sheets.Count)).Select
'Seleccionar todas las hojas del libro
ActiveWorkbook.Sheets.Select
End Sub
Hojas
Sub TrabajarConHojas2()
'Cambia el color de todas las hojas del libro seleccionándolas previamente
For X = 1 To Sheets.Count
Sheets(X).Select
Sheets(X).Tab.Color = RGB(100, 50, 30)
Next X
'Cambia el color de todas las hojas del libro sin seleccionar
For X = 1 To Sheets.Count
Sheets(X).Tab.Color = RGB(100, 50, 30)
Next X
'Cambia el Nombre de todas las hojas del libro sin seleccionar usando el valor de la variable x
For X = 1 To Sheets.Count
Sheets(X).Name = "Nuevo Nombre " & X
Next X
End Sub
Hojas
Sub EscalaColorPestañas() 'Cambia el color de todas las hojas con escala de colores
R = 255
G = 255
B=0
For X = 1 To Sheets.Count
Sheets(X).Tab.Color = RGB(R, G, B)
R = R - 20
G = G - 20
Next X
End Sub
Cuadros de Mensajes
Sub cuadrosMSGBOX()
'Muestra un cuadro de dialogo
MsgBox "Mensaje en el cuerpo del cuadro", vbDefaultButton1, "Titulo del cuadro"
'Muestra un cuadro de dialogo y guarda el resultado de la respuesta en una variable
DECISION = MsgBox("Desea continuar trabajando en esta macro", vbYesNo, "Debe tomar una decisión")
If DECISION = vbYes Then
MsgBox "Su decisión fue SI"
End If
If DECISION = vbNo Then
MsgBox "Su decisión fue NO"
End If
End Sub
Cuadros de Entrada de datos
Sub CuadroEntradaDatos()
'Solo muestra el cuadro, pero no se almacena la respuesta y el cuadro se muestra centrado
InputBox "Mensaje del cuerpo del cuadro", "Titulo del cuadro", "valor x defecto"
'Almacena la entrada en la variable RESPUESTA y el cuadro sale a 600 px x 600 px en horizontal y vertical
Dim RESPUESTA As Date
RESPUESTA = InputBox("Ingrese su fecha de nacimiento", "Calculo de edad", #12/5/1998#, 600, 600)
EDAD = Int((Date - RESPUESTA) / 365)
MsgBox "Su edad es " & EDAD
End Sub
APPLICATION – Objeto Excel -
ACTIVEWINDOW
Sub DESACTIVA_BARRA_FORMULAS_ACTIVA_PANTALLA_COMPLETA()
Application.DisplayFormulaBar = False
Application.DisplayFullScreen = True
End Sub
Sub DESACTIVA_GRILLA_Y_ENCABEZADOS_FILAS_COLUMNAS()
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayHeadings = False
End Sub
Sub MODO_PRESENTACION()
ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines
ActiveWindow.DisplayHeadings = Not ActiveWindow.DisplayHeadings
Application.DisplayFormulaBar = Not Application.DisplayFormulaBar
Application.DisplayFullScreen = Not Application.DisplayFullScreen
End Sub
APPLICATION – Objeto Excel
Sub CONGELA_MOVIMIENTO_CURSOR()
Application.ScreenUpdating = False
Range("A1").Select
ActiveCell.CurrentRegion.Select
For Each CELDA In Selection
CELDA.Select
CELDA.Value = 1200
Next CELDA
End Sub
Funciones definidas x el usuario
Function Importe_Neto(Importe_Bruto As Currency, Tasa_IVA As Double)
Dim IVA As Double
IVA = Importe_Bruto* (Tasa_IVA / 100)
Importe_Neto = IMPORTE_BRUTO - IVA
End Function