Professional Documents
Culture Documents
Que es una Macro Las macros son rutinas que nos permiten acelerar la
ejecucin de procedimientos de uso frecuente dentro de
un sistema. Existen dos tipos de macros:
mbito de ejecucin Otra cosa que debemos tener clara a la hora de crear
una macro es dnde queremos que esta se ejecute, es
decir, queremos que la macro se ejecute sobre el rango
de celdas que tengamos seleccionado al momento de
ejecutar la macro o bien necesitamos que la macro se
ejecute siempre sobre el mismo Rango.
Lo usual es que necesitemos que la macro se ejecute
sobre lo que tengamos seleccionado en el momento de
la ejecucin, pero a veces la macro est escrita para
afectar siempre el mismo rango de celdas.
CrearFormatoCeldas
ElegirFuente
AgrandarColumna
Barra de herramienta
Detener Grabacin
Ejecutar la Macro
seleccionada.
Explorador de
Proyectos
Cdigo de la Macro
Barra separadora
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 14
Palabra reservada con la cual comienzan todas las Macros, Sub significa Subrutina o
Sub procedimiento, por cada Sub debe haber un End Sub que indica el final de la
subrutina.
Nombre de la Macro
Lnea distinta
Los Mdulos Los Mdulos son el lugar donde Visual Basic almacena
el cdigo de las Macros, un mdulo puede contener
varias Macros. Los Mdulos se generan por sesin, lo
que significa que si usted ingresa a Excel y crea
Macros en un archivo todas las macros creadas en esa
sesin quedarn en el mismo mdulo, pero si usted
cierra el archivo para luego volverlo a abrir y despus
crea una Macro, sta y las macros posteriores se
guardarn en este nuevo Mdulo.
Mdulo
Seleccion
ado Macros del
Mdulo
seleccionado
Mdulos
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 20
D un clic en el
botn Aceptar
Detenga la
grabacin de la Macro
Pruebe su Macro
sobre un grupo de celdas con nmeros
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 28
Ver cdigo de una macro Si queremos ver el cdigo que hay detrs de una
del libro de macros Macro almacenada en el libro de Macros Personal
Personal
debemos realizar el siguiente procedimiento:
Simplificar una macro La macro anterior contiene una sola lnea, en algunas
oportunidades y dependiendo de lo que se necesite,
esta lnea podra ser demasiado larga.
En esta macro la propiedad DisplayGridlines afecta a la
ventana activa a ambos lados del signo igual.
Podramos utilizar la estructura With de tal manera de
evitar la escritura repetitiva.
Sub OcultarLneasDivisin().
MostrarOcultarLneasDivisin.
6.
9. Detenga la grabacin
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 46
Ejemplo:
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.Offset(1, 0).Range("A1:B5").Select
Errores de funcin.
Son los ms complicados de detectar ya que ni se
detectan en la fase de ejecucin, ni provocan la detencin
del programa, son debidos a la incorrecta programacin
de algn proceso y como resultado se obtienen datos
errneos. Errores de este tipo son clculos mal hechos,
bucles infinitos, devolucin de valores incorrectos, etc.
Como ni los detecta el compilador, ni provocan la
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 52
Finalizar:
Permite terminar la ejecucin de la Macro de manera
de hacer las modificaciones correspondientes.
Depurar:
Detiene momentneamente la ejecucin de la Macro
dejndola en pausa para que usted haga las
modificaciones pertinentes para su buen
funcionamiento. Una vez hechas las
modificaciones necesarias usted puede
seguir con la ejecucin a partir de la lnea
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 58
Veamos un ejemplo:
A la Macro que tiene el error agregue la siguiente
instruccin
Sub CambiarOrientacin()
'
' CambiarOrientacin Macro
' Modificar orientacin y color de fondo de las celdas seleccionadas
'
' Acceso directo: Ctrl+Mays+H
'
With Selection
.Orientation = 100
.Interior.ColorIndex = 6
End With
Exit Sub
Errores:
MsgBox "Los grados a orientar deben estar entre 90 y -90"
End Sub
Cierre cualquier
Libro abierto que tenga
Abra un libro nuevo
Gurdelo como
Macros Programadas
Vaya al Men
herramientas
Elija la opcin
Macros
Seleccione del
Submen la opcin Editor de Visual Basic (otra
manera de acceder el Editor es presionando ALT +
F11)
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 63
Explorador de
Proyectos
Cdigo de la Macro
Ir al Men Insertar
Elegir opcin
Mdulo
Mdulo
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 65
Propiedades
Mtodos
Para cambiar
Objeto Application
Sub CambiarTitulo()
Application.Caption = Curso de Macros
End Sub
El resultado es el siguiente
Ver el valor de una Como vimos recin las propiedades de solo lectura no
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 69
Sub MostrarRuta()
MsgBox Application.Path
End Sub
Ejecute su Macro
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 70
Propiedades
Mtodos
Propiedades
Name = Permite cambiar el nombre de una Hoja
Ejemplo
Sub CambiarNombreHoja
Worksheets(Hoja1).name=Macros 1
End Sub
Mtodos
Propiedades
Ejemplo:
Sub CambiarValor
Range(A1:B5).value = Clases de Macros
Mtodos:
Sub CambiarNombrePosicin()
Worksheets(2).Name =Nuevo Nombre
End Sub
Importante:
Habr notado usted que al referirnos a un objeto de
coleccin lo hacemos en plural (Worksheets,
Workbooks). Esta es la manera correcta ya que si
ingresamos el nombre del objeto en singular se nos
producira un error
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 76
Si Condicin Entonces
Sentncia1
Sentncia2
.
.
SentnciaN
Fin Si
If Condicin Then
Sentncia1
Sentncia2
.
.
SentnciaN
End If
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 81
Estructura If..Else Esta estructura se utiliza cuando se requiere una
respuesta alternativa a una condicin. Su estructura es
la siguiente.
Si Condicin Entonces
Sentncia1
Sentncia2
.
.
SentnciaN
Sino
Sentncia1
Sentncia2
.
.
SentnciaN
Fin Si
If Condicin Then
Sentncia1
Sentncia2
.
.
SentnciaN
Else
Sentncia1
Sentncia2
.
SentnciaN
End If
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 82
Estructura repetitiva For Esta estructura sirve para repetir la ejecucin de una
(para). sentencia o bloque de sentencias, un nmero definido
de veces. La estructura es la siguiente:
En Visual Basic
En Visual Basic
Funciones de Visual Basic Visual Basic posee una serie de funciones que nos
permiten simplificar ciertos trabajos. Al igual que las
funciones normales de Excel estas estn programadas
para realizar un procedimiento en particular y para
poder operar necesitan de ciertos elementos llamados
argumentos. Dentro de estos argumentos hay algunos
que son obligatorios y otros opcionales los cuales se
identifican por estar dentro de parntesis de corchetes
[].
La funcin RGB. Permite modificar el color de un objeto ingresando
tres argumentos que identifican tres colores: Rojo,
Verde y Azul
Sub Segundo
ActiveSheet.Range("A1:A8").Font.Color = RGB(255,0,0)
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 87
La Funcin InputBox Esta funcin muestra una ventana para que el usuario
pueda teclear datos. Cuando se pulsa sobre Aceptar,
los datos entrados pasan a la variable a la que se ha
igualado la funcin. Vea la lnea siguiente.
Sintaxis de InputBox.
Sub Entrar_Valor
Dim Texto As String
' Chr(13) sirve para que el mensaje se muestre en dos Lneas
Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", "Entrada de datos")
ActiveSheet.Range("A1").Value = Texto
End Sub
Sub CambiarOrientacin()
Selection.Orientation = InputBox("Ingrese grados a orientar", "Orientar texto", 0)
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 89
La funcin MsgBox Esta funcin muestra un mensaje en un cuadro de
dilogo hasta que el usuario pulse un botn. La
funcin devuelve un dato tipo Integer en funcin del
botn pulsado por el usuario. A la hora de invocar est
Funcin, s e permiten diferentes tipos de botones.
Sintaxis de MsgBox.
cules se omiten.
Sub CambiarTamaoLetra()
Selection.Font.Size = Inputbox("Ingrese tamao Fuente","tamao letra",12)
End Sub
Pasar argumentos a una Para pasar los argumentos por nombre se debe colocar
funcin por el nombre del argumento seguido de := . Esto nos
Nombre
permite ingresarlos en cualquier orden.
Sub CambiarTamaoLetra()
Selection.Font.Size = InputBox(Default:=12, Title:="tamao letra", prompt:="Ingrese tamao
Fuente")
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 94
MACROS SUBORDINADAS
Cuando se necesita crear una macro que realice una
tarea muy extensa, lo ms aconsejable es dividirla por
etapas, o sea, crear varias macros en forma
independiente y despus subordinarlas a otra general,
de tal forma que esta ltima las ejecute una a una.
Haga clic en
este botn
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 97
Haga clic en
este botn.
archivo = Application.GetOpenFilename _
("Archivos de texto,*.txt")
Sheets("Informe").Select
Sub ImportarArchivo()
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 103
archivo = Application.GetOpenFilename("Archivos de texto,*.txt")
Workbooks.OpenText Filename:=archivo, _
Origin:=xlWindows, StartRow:=2, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab _
:=True, Semicolon:=False, Comma:=False, Space:=False, Other _
:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1))_
Sheets("Informe").Move _
Before:=Workbooks("Importaciones.xls").Sheets(1)
End Sub
La sentencia siguiente:
Selection.CurrentRegion.Select
Application.CutCopyMode = False
Range("A1").Select
9. Seleccionar A1.
Sub BaseDatos()
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Selection.CurrentRegion.Select
Selection.Copy
Workbooks.OpenFilename:="C:\ExcelVBA\Ejercicios\Histrico.xls
"
Range("A358").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.CurrentRegion.Select
ActiveWorkbook.Names.Add Name:="Database", _
RefersToR1C1:="=Hoja1!R1C1:R535C6"
La primera instruccin selecciona el rango actual de
datos. La segunda asigna el nombre Base_de_datos a
un rango especfico, A1:E535
ActiveWorkbook.Close
Range("A1").Select
Selection.Name = "Base_de_datos"
ActiveWorkbook.Close
ActiveWorkbook.Close SaveChanges:=True
4. Detener la grabacin.
Sub EliminarHoja()
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
End Sub
Realice lo siguiente:
2. Detener la grabacin.
Sub Resumen()
End Sub
5. Detener la grabacin.
7. Escribir la sentencia:
End If
'
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 127
Sub ElegirCeldas()
If ActiveCell > 0.2 Then
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End If
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
3. Escribir Do.
5. Presionar Enter.
7. Escribir la sentencia:
Loop
'
Sub BucleElegirCeldas()
Do
If ActiveCell > 0.2 Then
With Selection.Interior
.ColorIndex = 3
End With
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub
5. Detener la grabacin.
ActiveCell.Offset(-1, 1).Range("A1").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
2. Sangrar la lnea.
3. Escribir:
Do Until ActiveCell = ""
4. Sangrar las siguientes 12 lneas que son controladas
por este Bucle.
7. Escribir
Loop
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
2. Cortar y pegar al final de la macro, en la lnea de
abajo de End Sub.
Pruebe la macro.
Sub Color(OtroColor)
With Selection.Interior
.ColorIndex = OtroColor
.Pattern = xlSolid
End With
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 137
Sub BucleFormatoColor()
Do Until ActiveCell = ""
Do Until ActiveCell = ""
If ActiveCell >= 0.4 Then
Color OtroColor:=3
ElseIf ActiveCell >= 0.3 Then
Color OtroColor:=6
ElseIf ActiveCell >= 0.2 Then
Color OtroColor:=4
ElseIf ActiveCell >= 0.1 Then
Color OtroColor:=5
Else
Color OtroColor:=2
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
ActiveCell.Offset(-1, 1).Range("A1").Select
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 138
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub
Sub Color(OtroColor)
With Selection.Interior
.ColorIndex = OtroColor
.Pattern = xlSolid
End With
End Sub
2. Escriba lo siguiente:
Const Rojo = 3
Const Amarillo = 6
Const Verde = 4
Const Azul = 5
Const Blanco = 2
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 139
Sub BucleFormatoColor()
Const Rojo = 3
Const Amarillo = 6
Const Verde = 4
Const Azul = 5
Const Blanco = 2
Do Until ActiveCell = ""
Do Until ActiveCell = ""
If ActiveCell >= 0.4 Then
Color OtroColor:=Rojo
ElseIf ActiveCell >= 0.3 Then
Color OtroColor:=Amarillo
ElseIf ActiveCell >= 0.2 Then
Color OtroColor:=Verde
ElseIf ActiveCell >= 0.1 Then
Color OtroColor:=Azul
Else
Color OtroColor:=Blanco
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
ActiveCell.Offset(-1, 1).Range("A1").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub
Sub Color(OtroColor)
With Selection.Interior
.ColorIndex = OtroColor
.Pattern = xlSolid
End With
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 140
La lnea
NotaFinal = Application.Round(NotaFinal, 1)
Sub DosColores()
Dim miCelda
For Each miCelda In Selection
If miCelda >= 5 Then
With miCelda.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Else
With miCelda.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next miCelda
End Sub
Sub DosColores()
Dim miCelda
For Each miCelda In Range("Valores")
If miCelda >= 5 Then
With miCelda.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Else
With miCelda.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next miCelda
End Sub
If (Val(Operador2.Text) = 0) Then
Resultado.Text = "Error: Intenta dividir por 0 y no est definido."
Else
Resultado.Text = Val(Operador1.Text) / Val(Operador2.Text)
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 161
End If