Está en la página 1de 16

Macros y VBA en MS Excel

(Visual Basic for Applications)


Aplicaciones para Ingeniera
Profesores: Hugo Mora, Ignacio Casas

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial de Excel: Programador


Activacin 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 Botn 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 Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

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 acciones
que realicemos en Excel quedarn guardadas
en un procedimiento/programa en lenguaje VBA.
Se puede crear la macro con referencia absoluta
o referencia relativa. (OJO con esto.)
Las macros se pueden correr desde el men
o con combinacin de teclas. Para ver la macro presione Alt + f11.
Ejercicio: Crear una macro que pegue valores con pegado especial
y asgnele control + q.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial de Excel: Progamador


Controles-Botones
Excel permite agregar controles-botones a las hojas de clculo: permiten interactuar con los datos y
con otros controles en la misma hoja.
Son tiles para llamar a las macros.
Cada control-botn tiene su nombre.
En la planilla de ejemplo, el Botn que se muestra
se llama Mi_Macro y est asociado a test.
Propiedades

Pasar a modo Ver


diseo Cdigo

Insertar Controles

Se utiliza la barra de controles para insertarlos y


manipularlos.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial de Excel: Visual Basic para Aplicaciones


Introduccin
VBA es un lenguaje de programacin orientado a objetos: es una versin del
lenguaje Visual Basic que se integra a los productos/aplicaciones MS Office.
Por ejemplo en Excel, el VBA adems de permitirnos construir programas (macros),
integra como objetos-mtodos-propiedades (que podemos manipular) elementos
tales como: planillas, comandos , funciones y los datos que hemos ingresado.
Permite programar tareas (programas-macros) otorgndole un lenguaje orientado
a objetos a las aplicaciones Word, Excel, Outlook y Access de Microsoft.
Permite comunicacin entre las distintas aplicaciones.

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Editor de Visual Basic
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 propiedades


y mtodos. Las propiedades se pueden
cambiar en la ventana propiedades (F4).
Por ejemplo, el objeto Ventana
puede tener una propiedad Estado que
dice si est abierta o cerrada, y los
mtodos Abrir y Cerrar.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Panel de Proyectos

Panel de Cdigo

Panel de Propiedades

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Subrutinas
Para escribir Programas (Funciones o
Subrutinas) en VBA se debe primero
crear un Mdulo que los contenga:
Insertar Mdulo
Subrutina:

Panel de Proyectos

Public Sub MiSub (A as Integer, B as Double)


Cdigo de la subrutina
End Sub

El alcance (scope) es Public o Private:


le indica a VBA si el programa
se puede llamar desde cualquier parte o
slo desde esta planilla.

Panel de Cdigo

Panel de Propiedades

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Subrutinas
Para escribir Funciones o Subrutinas
en VBA se debe crear un Mdulo
que las contenga:
Insertar Mdulo
Subrutina

Public Sub MiSub(A as Integer, B as Double)


Cdigo de la subrutina
End Sub

La palabra-clave Sub le indica a VBA


que se est definiendo una subrutina
llamada MiSub.
A diferencia de una funcin, una
subrutina no entrega un resultado directo.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Panel de Proyectos

Panel de Cdigo

Panel de Propiedades

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Subrutinas
Los parmetros se definen como:
(ByValue) NombreParam as Tipo

Donde Tipo puede ser:


Integer: un nmero entero (%)
Double: un nmero real (#)
Boolean: un nmero binario (V o F)
Byte: guarda un valor entre 0 y 255
String: Caracteres ASCII ($)
Para ver los otros tipos de datos presione
ayuda (F1) y escriba tipos de datos
Para pasar slo los valores (cuando se invoca
La subrutina) usar ByValue (opcional).
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Subrutinas
Las subrutinas se pueden llamar (invocar) desde otras
partes de un programa en VBA, usando su nombre y
agregando los parmetros que necesita.
Por ejemplo, para llamar a nuestra subrutina llamada
MiSub, se pueden usar dos formatos:
MiSub 4, 2.87
o
Call MiSub (4, 2.87)

Tambin se puede agregar el nombre de la subrutina a


botones u otros controles de VBA.

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Funciones
Las funciones son similares a las subrutinas: usamos
Function en vez de Sub. La funcin retorna un valor.:
Public Function Calcq(y1 As Double, y3 As Double) As Double
Calcq = 1 / ((Abs(y3 - y1)) ^ 0.74)
End Function

Nota: tenemos que definir un Tipo para la funcin.


Las funciones internas de Excel estn as construidas.

Funcin que calcula el Factorial:


Public Function MiFactorial(N As Integer) As Integer
MiFactorial = 1
For i% = 1 To N
MiFactorial = i * MiFactorial
Next
End Function
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Definir Variables y Constantes
Con Dim o Public se declaran las variables:
Dim b As Double, a As Double
Dim n, m As Integer

En este caso n no es integer sino Variant (tipo


genrico).
En general debe ser:
Dim NombreVariable As DataType

Con Const se declaran las constantes:


Const MiConstante As Integer = 14
Const MiConstante2 As Double = 1.025

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Usar Matrices
Matrices (Arrays) se definen similar a las
variables, pero con un tamao:
Dim y(1 To 4) As Double
Dim x(4) As Double
Dim M(1 To 8, 1 To 8) As Double
Dim N(8, 8) As Double

Para acceder a los elementos de la Matriz:


y(3) = 2.983
M(1, 2) = 4.321

Si no se sabe el tamao, se puede usar ReDim:


Dim Matriz() As Double
ReDim Matriz(10)
ReDim Preserve Matriz(12) Mantiene lo que estaba

Por omisin (default) la base es 0. Option Base 1.


ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Conceptos Bsicos del Lenguaje
Para comentar el cdigo se usa un a comilla o Rem
Declaracin de variables
Dim y As Double
Dim x As Double
Rem Declaracin de Matrices
Dim M(1 To 8, 1 To 8) As Double
Dim N(8, 8) As Double

Para separar una lnea en mltiples lneas, 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.


ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Condicionales
Los tests lgicos en VBA tienen la siguiente sintaxis:
If (MiCondicion = True) Then
MsgBox Mi Condicin es Verdad
Else
MsgBox Mi Condicin No es Verdad
End If

If (time = 32000) Then


MsgBox time vale 32000
End If

If (contador < 10) Then


MsgBox El Contador es menor a 10
ElseIf (contador < 20) Then
MsgBox El Contador es mayor que 10 y menor que 20
ElseIf (contador < 30) Then
MsgBox El Contador es mayor que 20 y menor que 30
End If
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Iteraciones - Loops
Los For tienen la siguiente sintaxis:

Los Do tienen la siguiente sintaxis:

For i = 1 To n
Cdigo
Next i

Do While (tiempo < 10)


Cdigo
Loop

For i = 1 To n Step 2
Cdigo
Next i

Do
Cdigo
Loop While (tiempo < 10)

For i = 1 To n
Cdigo
If tiempo >10 Then
Exit For
End If
Ms Cdigo
Next i
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Do Until (tiempo > 10)


Cdigo
Loop
Do
Ms Cdigo
Loop Until (tiempo > 10)

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Depuracin
Para desplegar men de depuracin:
Ver Barras de Herramientas Depuracin

Para crear un breakpoint haga click en la zona que


se encuentra al lado del cdigo (donde est el
Continuar
punto rojo).

Resetear

Ir Paso a paso
(F8)

Ventanas
Locales

Para poder ir paso a paso se puede usar F8 sobre


un procedimiento.

Ventanas
Inmediato

Se pueden ver las variables con las ventanas


Locales, Inmediato e Inspeccin.
Para imprimir en Inmediato: Debug.Print x
Ejercicio: Ver las variables en el Sub llamado
MiFactorial2.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Funciones de VBA
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 nmero.
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 nmero (-1, 1 o 0).
Sin(x): Seno de un ngulo en radianes.
Sqr(x): Calcula la raz cuadrada de x.
Tan(x): Tangente de un ngulo en radianes.
Para usar en VBA una funcin de Excel: WorksheetFunction.Pi()
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Ventanas
Inspeccin

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Objetos de VBA
Excel incluye cerca de 200 objetos, que representan
rangos de celdas, grficos, hojas de clculo, libros y la
propia aplicacin de Excel.
Cada objeto tiene propiedades (que permiten acceder
y controlar sus atributos) y mtodos (funcionalidades).
El examinador de objetos es una herramienta que
permite navegar por los objetos para explorar sus
propiedades y mtodos.
Para abrir el examinador de objetos en VBA presione F2
o vaya a:
Ver Examinador de Objetos
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Aplicacin Excel
Excel es una aplicacin 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 aplicacin.
El segundo nivel es el modelo de objetos de Excel, que es el que se utiliza para realizar las
operaciones en el libro de clculo (Workbook) o en las hojas de clculo (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 clculo que son modificados por los comandos del modelo de objetos de Excel.

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Modelo de Objetos de Excel
El modelo de objetos de Excel contiene una gran cantidad de elementos ordenados en forma
jerrquica. Algunos de los objetos de Excel son:
Application: Es el objeto que se encuentra en la base de la jerarqua del modelo de
objetos de Excel y representa a la aplicacin en s misma.
Workbooks: Objetos que representan los libros de clculo o archivos de Excel. El
objeto workbook se encuentra debajo del objeto Application en la jerarqua del
modelo de objetos de Excel.
Worksheets: Objetos que representan las hojas de clculo 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 grficos.
Pivot Tables: Objetos que representan tablas dinmicas.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Objeto Application
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 clculo 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 cdigo.
Application.ScreenUpdating = False

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Objeto Workbook
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 clculo 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

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Coleccin Workbooks
La coleccin Workbooks agrupa a todos los archivos de Excel que se encuentran abiertos.
El mtodo Open, Save y SaveAs le indican a Excel si debe abrir, guardar o guardar como el
workbook correspondiente. Ejemplos:
Application.Workbooks(ClaseIndustrial).Save
Workbooks.Open(C:\Archivo.xls)
Workbooks(Libro1).SaveAs(Archivo.xls,,clavesecreta)

Se pueden entregar los parmetros por nombre a los mtodos. Ejemplos:


Workbooks.Open FileName :=C:\Archivo.xls, ReadOnly:=True, Password:=clavesecreta
Application.Workbooks(ClaseIndustrial).Save

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Objeto Worksheet
El objeto Worksheet representa una hoja de clculo
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 clculo. Ejemplo:
With Application.Workbooks(ClaseIndustrial)
ActiveSheet.Copy
ActiveSheet.Paste
ActiveSheet.PrintOut
ActiveSheet.SaveAs
ActiveSheet.Activate
ActiveSheet.Delete
End With

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Coleccin Worksheets
La coleccin Worksheets contiene a todas las hojas
de clculo que pertenecen a algn workbook.
Se le puede dar un nombre a un worksheet en
particular para referirse a l. Ejemplo:
Dim w As Workbook, s As Worksheet
Set 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 Worksheet
For Each w In Worksheets
MsgBox w.Name
Next
End Sub
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Objeto WorksheetFunction
El objeto WorksheetFunction permite usar las funciones
de Excel desde VBA.
Para ver las funciones que existen (todas en ingls) 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


funcin Average de Excel usando un Sub llamado Promediar.

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Objeto Range
El objeto Range representa rangos de celdas. Tambin 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 = prom
Worksheets(Funciones).Range(F15).Formula = =average(F2:F13)
Worksheets(Funciones).Cells(2, 1).Select
Workbooks(Libro1).Worksheets(Hoja1).Range(A1).Value = 10
Workbooks(Libro1).Worksheets(Hoja1).Range(A2.A10).Value = 5
Workbooks(Libro1).Worksheets(Hoja1).Range(A2:A10).Value = 5
Workbooks(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.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Objeto Range
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

ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Formularios
Podemos agregar Formularios a las hojas de
clculo para realizar algunas tareas especficas y
como interfaz de usuario (GUI).
Para insertar un formulario ir a Insertar
UserForm.
Se pueden agregar controles a los formularios para
darles distintas funcionalidades.
Para mostrar un Formulario primero se disea con
el nombre UserForm1 por ejemplo y despus se usa
el mtodo Show. Para esconderlo se usa el mtodo
Hide. Ejemplo:
Sub MostrarForm()
UserForm1.Show
End Sub
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Introduccin
Excel
Visual Basic de Aplicaciones
Access
Proyecto

Tutorial Visual Basic de Aplicaciones


Formularios
Se puede insertar cdigo a cada uno de los
objetos que componen el formulario.
Presionando F7 se muestra el cdigo detrs 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 cdigo.
Ejemplo: Escriba un cdigo que cierre el
formulario si se hace Click sobre el botn.
ICC2100 Taller de Herramientas Computacionales para Ingeniera

Links
Pueden ver videos tutoriales en www.datapigtechnologies.com.
Pueden ver ejemplos de cdigo VBA en http://www.vba-programmer.com/.
Pueden ver la pgina del curso para encontrar ms materiales.

ICC2100 Taller de Herramientas Computacionales para Ingeniera

También podría gustarte