Download - MSExcel VBA Macros ICR.pdf
05-11-2012
1
Macros y VBA en MS Excel(Visual Basic for Applications)
Aplicaciones para Ingeniería
Profesores: Hugo Mora, Ignacio Casas
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Tutorial de Excel: Programador
Activación de las Macros y VBA
Para poder acceder a las Macros y VBA en MS Exel, primero debemos activar la “Ficha de Programador” (Developer Tab”):
Hacer click el Botón de Office (esquina superior izquierda) para abrir el menú de archivo.
Hacer click en “Opciones de Excel”.Seleccionar “Customizar” (menú izquierdo).Seleccionar “Ficha de Programador” (menú der.)Hacer click en OK.
La planilla Excel se debe guardar en una carpeta “segura” y en formato con “macros”.
ICC2100 Taller de Herramientas Computacionales para Ingeniería
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
2
Tutorial de Excel: Programador
Macros
Excel permite automatizar tareas repetitivas utilizando un grabador de “macros” (programas):Herramientas Macro Grabar nueva macro
Mientras se graba la macro, todas las accionesque realicemos en Excel quedarán guardadasen un procedimiento/programa en lenguaje VBA.
Se puede crear la macro con referencia absolutao referencia relativa. (OJO con esto.)
Las macros se pueden correr desde el menú o con combinación de teclas. Para ver la macro presione Alt + f11.
Ejercicio: Crear una macro que pegue valores con pegado especial y asígnele control + q.
ICC2100 Taller de Herramientas Computacionales para Ingeniería
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial de Excel: Progamador
Controles-Botones
Excel permite agregar controles-botones a las hojas de cálculo: permiten interactuar con los datos y con otros controles en la misma hoja. Son útiles para llamar a las macros.Cada control-botón tiene su nombre. En la planilla de ejemplo, el Botón que se muestrase llama “Mi_Macro” y está asociado a “test”.
Se utiliza la barra de controles para insertarlos y manipularlos.
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Pasar a modo diseño
Ver Código
Insertar Controles
Propiedades
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
3
Tutorial de Excel: Visual Basic para Aplicaciones
Introducción
ICC2100 Taller de Herramientas Computacionales para Ingeniería
VBA es un lenguaje de programación orientado a objetos: es una versión del lenguaje Visual Basic que se integra a los productos/aplicaciones MS Office.
Por ejemplo en Excel, el VBA además de permitirnos construir programas (macros), integra como objetos-métodos-propiedades (que podemos manipular) elementos tales como: planillas, comandos , funciones y los datos que hemos ingresado.
Permite programar tareas (programas-macros) otorgándole un lenguaje orientado a objetos a las aplicaciones Word, Excel, Outlook y Access de Microsoft.
Permite comunicación entre las distintas aplicaciones.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Editor de Visual Basic
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Para entrar al editor de Visual Basic desde el Excel usar:
Herramientas Macros Editor de Visual Basic
O simplemente presione: Alt + F11
Cada objeto en VBA tiene propiedadesy métodos. Las propiedades se puedencambiar en la ventana propiedades (F4).
Por ejemplo, el objeto Ventanapuede tener una propiedad Estado que dice si está abierta o cerrada, y los métodos Abrir y Cerrar.
Panel de Proyectos
Panel de Propiedades
Panel de Código
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
4
Tutorial Visual Basic de Aplicaciones
Subrutinas
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Para escribir Programas (Funciones o Subrutinas) en VBA se debe primero crear un Módulo que los contenga:
Insertar Módulo
Subrutina:
Public Sub MiSub (A as Integer, B as Double)‘Código de la subrutina
End Sub
El alcance (“scope”) es Public o Private:le indica a VBA si el programase puede llamar desde cualquier parte osólo desde esta planilla.
Panel de Proyectos
Panel de Propiedades
Panel de Código
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Subrutinas
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Para escribir Funciones o Subrutinasen VBA se debe crear un Móduloque las contenga:
Insertar Módulo
Subrutina
Public Sub MiSub(A as Integer, B as Double)‘Código de la subrutina
End Sub
La palabra-clave “Sub” le indica a VBAque se está definiendo una subrutina llamada “MiSub”. A diferencia de una función, una subrutina no entrega un resultado directo.
Panel de Proyectos
Panel de Propiedades
Panel de Código
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
5
Tutorial Visual Basic de Aplicaciones
Subrutinas
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Los parámetros se definen como:
(ByValue) NombreParam as Tipo
Donde Tipo puede ser:
• Integer: un número entero (%)• Double: un número real (#)• Boolean: un número binario (V o F)• Byte: guarda un valor entre 0 y 255• String: Caracteres ASCII ($)
Para ver los otros tipos de datos presioneayuda (F1) y escriba “tipos de datos”
Para pasar sólo los valores (cuando se invocaLa subrutina) usar ByValue (opcional).
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Subrutinas
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Las subrutinas se pueden llamar (invocar) desde otras partes de un programa en VBA, usando su nombre y agregando los parámetros que necesita.
Por ejemplo, para llamar a nuestra subrutina llamada MiSub, se pueden usar dos formatos:
MiSub 4, 2.87oCall MiSub (4, 2.87)
También se puede agregar el nombre de la subrutina a botones u otros controles de VBA.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
6
Tutorial Visual Basic de Aplicaciones
Funciones
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Las funciones son similares a las subrutinas: usamos Function en vez de Sub. La función retorna un valor.:
Public Function Calcq(y1 As Double, y3 As Double) As DoubleCalcq = 1 / ((Abs(y3 - y1)) ^ 0.74)
End Function
Nota: tenemos que definir un Tipo para la función.Las funciones “internas” de Excel están así construidas.
Función que calcula el Factorial:
Public Function MiFactorial(N As Integer) As IntegerMiFactorial = 1For i% = 1 To N
MiFactorial = i * MiFactorialNext
End Function
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Definir Variables y Constantes
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Con Dim o Public se declaran las variables:
Dim b As Double, a As DoubleDim n, m As Integer
En este caso n no es integer sino Variant (tipo genérico).
En general debe ser:
Dim NombreVariable As DataType
Con Const se declaran las constantes:
Const MiConstante As Integer = 14Const MiConstante2 As Double = 1.025
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
7
Tutorial Visual Basic de Aplicaciones
Usar Matrices
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Matrices (Arrays) se definen similar a las variables, pero con un tamaño:
Dim y(1 To 4) As DoubleDim x(4) As Double
Dim M(1 To 8, 1 To 8) As DoubleDim N(8, 8) As Double
Para acceder a los elementos de la Matriz:
y(3) = 2.983M(1, 2) = 4.321
Si no se sabe el tamaño, se puede usar ReDim:
Dim Matriz() As DoubleReDim Matriz(10)ReDim Preserve Matriz(12) ‘Mantiene lo que estaba
Por omisión (default) la base es 0. Option Base 1.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Conceptos Básicos del Lenguaje
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Para comentar el código se usa un a comilla ‘ o Rem
´Declaración de variablesDim y As DoubleDim x As Double
Rem Declaración de MatricesDim M(1 To 8, 1 To 8) As DoubleDim N(8, 8) As Double
Para separar una línea en múltiples líneas, se usa un underscore (_):
K2(1) = dt * dy1dt(y(1) + k1(1) / 2#, y(2) + _k1(2) / 2#, y(3) + k1(3) / 2#, y(4) + _k1(4) /2#)
Nota: Tiene que haber un espacio antes del underscore.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
8
Tutorial Visual Basic de Aplicaciones
Condicionales
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Los tests lógicos en VBA tienen la siguiente sintaxis:
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
If (contador < 10) ThenMsgBox “El Contador es menor a 10”
ElseIf (contador < 20) ThenMsgBox “El Contador es mayor que 10 y menor que 20”
ElseIf (contador < 30) ThenMsgBox “El Contador es mayor que 20 y menor que 30”
End If
If (MiCondicion = True) ThenMsgBox “Mi Condición es Verdad”
ElseMsgBox “Mi Condición No es Verdad”
End If
If (time = 32000) ThenMsgBox “time vale 32000”
End If
Tutorial Visual Basic de Aplicaciones
Iteraciones - Loops
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Los For tienen la siguiente sintaxis:
For i = 1 To n‘CódigoNext i
For i = 1 To n Step 2‘CódigoNext i
For i = 1 To n‘CódigoIf tiempo >10 Then
Exit ForEnd If‘Más CódigoNext i
Los Do tienen la siguiente sintaxis:
Do While (tiempo < 10)‘CódigoLoop
Do‘CódigoLoop While (tiempo < 10)
Do Until (tiempo > 10)‘CódigoLoop
Do‘Más CódigoLoop Until (tiempo > 10)
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
9
Tutorial Visual Basic de Aplicaciones
Depuración
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Para desplegar menú de depuración:Ver Barras de Herramientas Depuración
Para crear un breakpoint haga click en la zona que se encuentra al lado del código (donde está el punto rojo).
Para poder ir paso a paso se puede usar F8 sobre un procedimiento.
Se pueden ver las variables con las ventanas Locales, Inmediato e Inspección.
Para imprimir en Inmediato: Debug.Print x
Ejercicio: Ver las variables en el Sub llamado MiFactorial2.
Continuar Resetear Ir Paso a paso(F8)
Ventanas Locales
Ventanas Inspección
Ventanas Inmediato
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Funciones de VBA
ICC2100 Taller de Herramientas Computacionales para Ingeniería M
En la ayuda aparecen todas las funciones de VBA.Acá se muestran algunas:
• Abs(x): Valor absoluto.• Cos(x): Coseno de un ángulo en radianes.• Exp(x): La constante e elevada a la potencia de x.• Int(x): La parte entera de x, trunca el número.• Log(x): Logaritmo natural base e. Log(e)/Log(10).• Round(x, n): Redondea x con n decimales.• Sgn(x): Devuelve el signo de un número (-1, 1 o 0).• Sin(x): Seno de un ángulo en radianes.• Sqr(x): Calcula la raíz cuadrada de x.• Tan(x): Tangente de un ángulo en radianes.
Para usar en VBA una función de Excel: WorksheetFunction.Pi()
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
10
Tutorial Visual Basic de Aplicaciones
Objetos de VBA
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Excel incluye cerca de 200 objetos, que representan rangos de celdas, gráficos, hojas de cálculo, libros y la propia aplicación de Excel.
Cada objeto tiene propiedades (que permiten acceder y controlar sus atributos) y métodos (funcionalidades).
El examinador de objetos es una herramienta que permite navegar por los objetos para explorar sus propiedades y métodos.
Para abrir el examinador de objetos en VBA presione F2o vaya a:
Ver Examinador de Objetos
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Aplicación Excel
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Excel es una aplicación con un modelo de tres niveles:
El primer nivel es el de servicios de cliente, que es la interfaz que permite a los usuarios manejar la aplicación.
El segundo nivel es el modelo de objetos de Excel, que es el que se utiliza para realizar las operaciones en el libro de cálculo (Workbook) o en las hojas de cálculo (Worksheets). Cada comando de Excel se puede manejar mediante el modelo de objetos.
El tercer nivel es el de servicios de datos, que es el que mantiene los datos en las hojas de cálculo que son modificados por los comandos del modelo de objetos de Excel.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
11
Tutorial Visual Basic de Aplicaciones
Modelo de Objetos de Excel
ICC2100 Taller de Herramientas Computacionales para Ingeniería
El modelo de objetos de Excel contiene una gran cantidad de elementos ordenados en forma jerárquica. Algunos de los objetos de Excel son:
Application: Es el objeto que se encuentra en la base de la jerarquía del modelo de objetos de Excel y representa a la aplicación en sí misma.
Workbooks: Objetos que representan los libros de cálculo o archivos de Excel. El objeto workbook se encuentra debajo del objeto Application en la jerarquía del modelo de objetos de Excel.
Worksheets: Objetos que representan las hojas de cálculo de Excel. Este objeto pertenece al objeto Workbook.
Ranges: Objeto que representa un rango de celdas. Este objeto pertenece al objeto Worksheet.
Charts: Objetos que representan gráficos.Pivot Tables: Objetos que representan tablas dinámicas.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Objeto Application
ICC2100 Taller de Herramientas Computacionales para Ingeniería
El objeto Application representa el programa Excel. Entrega acceso a las opciones y otras funcionalidades de Excel.
La propiedad ActiveSheet se refiere a la hoja de cálculo activa. Ejemplo:Application.ActiveSheet.Cells(1, 2) = time
Le dice a Excel que coloque el valor de time en la celda que está en la fila 1 y columna 2.
La propiedad ScreenUpdating le indica a Excel si debe refrescar la pantalla cuando se ejecuta código.Application.ScreenUpdating = False
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
12
Tutorial Visual Basic de Aplicaciones
Objeto Workbook
ICC2100 Taller de Herramientas Computacionales para Ingeniería
El objeto Workbook representa un archivo Excel.
El objeto ActiveWorkbook pertenece al objeto Application, y entrega el objeto Workbook activo. Ejemplo:Application.ActiveWorkbook.Save
El objeto ActiveSheet pertenece al objeto Workbook y se refiere a la hoja de cálculo activa. Application.ActiveSheet.Delete
La propiedad Names entrega la lista de nombres que se han definido en ese Workbook (ver Sub ContarNombres).
La propiedad Path se refiere al directorio donde se encuentra el Workbook. Ejemplo:directorio = Application.ActiveWorkbook.path
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Colección Workbooks
ICC2100 Taller de Herramientas Computacionales para Ingeniería
La colección Workbooks agrupa a todos los archivos de Excel que se encuentran abiertos.
El método Open, Save y SaveAs le indican a Excel si debe abrir, guardar o guardar como el workbook correspondiente. Ejemplos:
Application.Workbooks(“ClaseIndustrial”).SaveWorkbooks.Open(“C:\Archivo.xls”)Workbooks(“Libro1”).SaveAs(“Archivo.xls”,,”clavesecreta”)
Se pueden entregar los parámetros por nombre a los métodos. Ejemplos:
Workbooks.Open FileName :=“C:\Archivo.xls”, ReadOnly:=True, Password:=“clavesecreta”Application.Workbooks(“ClaseIndustrial”).Save
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
13
Tutorial Visual Basic de Aplicaciones
Objeto Worksheet
ICC2100 Taller de Herramientas Computacionales para Ingeniería
El objeto Worksheet representa una hoja de cálculo Excel. El objeto ActiveSheet es un subobjeto del objeto Workbook que entrega el Worksheet activo.
Se puede copiar, pegar, imprimir, guardar, activar y borrar la hoja de cálculo. Ejemplo:
With Application.Workbooks(“ClaseIndustrial”)ActiveSheet.CopyActiveSheet.PasteActiveSheet.PrintOutActiveSheet.SaveAsActiveSheet.ActivateActiveSheet.Delete
End With
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Colección Worksheets
ICC2100 Taller de Herramientas Computacionales para Ingeniería
La colección Worksheets contiene a todas las hojas de cálculo que pertenecen a algún workbook.
Se le puede dar un nombre a un worksheet en particular para referirse a él. Ejemplo:
Dim w As Workbook, s As WorksheetSet w = Workbooks(“Libro1”)Set s = w.Worksheets(“Hoja1”)MsgBox s.Range(“a1”).Value
Se pueden nombrar todas las hojas de un archivo usando el comando For Each … Next Loop.
Sub MuestraNombres()Dim w As WorksheetFor Each w In Worksheets
MsgBox w.NameNextEnd Sub
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
14
Tutorial Visual Basic de Aplicaciones
Objeto WorksheetFunction
ICC2100 Taller de Herramientas Computacionales para Ingeniería
El objeto WorksheetFunction permite usar las funciones de Excel desde VBA.
Para ver las funciones que existen (todas en inglés) se puede ocupar el Explorador de Objetos.
Ejemplo:area = WorksheetFunction.Pi * r ^ 2
a = WorksheetFunction.Acos(b)
Set TestRange = Worksheets(“Hoja1”).Range(“A1:A5”)TestSum = WorksheetFunction.Sum(TestRange)
Ejercicio: Promediar las celdas Funciones!F2:F13 con la función Average de Excel usando un Sub llamado Promediar.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Objeto Range
ICC2100 Taller de Herramientas Computacionales para Ingeniería
El objeto Range representa rangos de celdas. También es posible acceder a las celdas usando la propiedad Cells de ActiveSheet.
Ejemplos:Set notas = Worksheets(“Funciones”).Range(“F2:F13”)prom = WorksheetFunction.Average(notas)
Worksheets(“Funciones”).Range(“F14”).Value = promWorksheets(“Funciones”).Range(“F15”).Formula = “=average(F2:F13)”Worksheets(“Funciones”).Cells(2, 1).Select
Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”).Value = 10Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A2.A10”).Value = 5Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A2:A10”).Value = 5Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A2”, ”A10”).Value = 5
Ejercicio: Hacer correr el sub Rango1() y el sub Rango2() de la hoja Rango y tratar de predecir el resultado de antemano.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
15
Tutorial Visual Basic de Aplicaciones
Objeto Range
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Los ejemplos siguientes son equivalentes; todos se refieren a la celda “D5”:
Range (“D5”)
[D5]
Cells (5 , 4) ‘Se especifica primero la fila.
Range (“A1”) . Offset (4, 3) ‘Offset: se especifica primero la fila.
Range (“B3”) . Range (“C3”)
Range (“Mi-Rango”) ‘Asumiendo que D5 tiene como nombre “Mi-Rango”.
ActiveCell ‘Asumiendo que D5 es la “celda activa” actual.
Si queremos referirnos al contenido en la celda D5:Range(“D5").Value
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Tutorial Visual Basic de Aplicaciones
Formularios
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Podemos agregar Formularios a las hojas de cálculo para realizar algunas tareas específicas y como interfaz de usuario (GUI).
Para insertar un formulario ir a InsertarUserForm.
Se pueden agregar controles a los formularios para darles distintas funcionalidades.
Para mostrar un Formulario primero se diseña con el nombre UserForm1 por ejemplo y después se usa el método Show. Para esconderlo se usa el método Hide. Ejemplo:Sub MostrarForm()UserForm1.ShowEnd Sub
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
05-11-2012
16
Tutorial Visual Basic de Aplicaciones
Formularios
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Se puede insertar código a cada uno de los objetos que componen el formulario.
Presionando F7 se muestra el código detrás del formulario.
En el ComboBox de la izquierda (el que dice CommandButton1) se muestran los objetos que componen el formulario.
En el ComboBox de la derecha (el que dice Click) se muestran los eventos que pueden ocurrir para cada objeto donde se puede insertar código.
Ejemplo: Escriba un código que cierre el formulario si se hace Click sobre el botón.
IntroducciónExcel
Visual Basic de AplicacionesAccess
Proyecto
Links
ICC2100 Taller de Herramientas Computacionales para Ingeniería
Pueden ver videos tutoriales en www.datapigtechnologies.com.
Pueden ver ejemplos de código VBA en http://www.vba-programmer.com/.
Pueden ver la página del curso para encontrar más materiales.