Está en la página 1de 37

1

TABLA DE CONTENIDOS
Contenido
TABLA DE CONTENIDOS .................................................................................................................. 1
Macro. ..................................................................................................................................................... 5
InputBox (Instruccin) ........................................................................................................................... 6
MsgBox (Instruccin) ............................................................................................................................ 8
If Then Else (Instruccin) ............................................................................................................ 8
Ejemplo 1: ........................................................................................................................................... 8
Ejemplo 2: ........................................................................................................................................... 9
Ejemplo 3: ........................................................................................................................................... 9
Ejemplo de la instruccin If...Then...Else ........................................................................................ 10
For To Next (Instruccin) ............................................................................................................ 11
Ejemplo 1: ......................................................................................................................................... 11
Ejemplo 2: ......................................................................................................................................... 11
Ejemplo 3: ......................................................................................................................................... 11
While Wend (Instruccin) ............................................................................................................... 12
Ejemplo 1: ......................................................................................................................................... 12
Ejemplo 2: ......................................................................................................................................... 12
Ejemplo 3: ......................................................................................................................................... 12
Do...Loop (Instruccin) ........................................................................................................................ 13
Ejemplo de la instruccin Do...Loop ................................................................................................ 14
Select Case (Instruccin) ...................................................................................................................... 15
Ejemplo 1: ......................................................................................................................................... 15
GoSub... Return .................................................................................................................................... 16
Exit (Instruccin) .................................................................................................................................. 18
Exit Do .............................................................................................................................................. 18
Exit For ............................................................................................................................................. 18
Exit Function .................................................................................................................................... 18

2
Exit Property ..................................................................................................................................... 18
Exit Sub ............................................................................................................................................ 18
Ejemplo de la instruccin Exit .......................................................................................................... 18
ON ERROR GOTO (Manejo de errores) ............................................................................................. 19
On Error GoTo lnea ......................................................................................................................... 19
On Error Resume Next ..................................................................................................................... 19
On Error GoTo 0 ............................................................................................................................... 19
Application.DisplayAlerts = False ................................................................................................... 19
Trabajando con libros. .......................................................................................................................... 20
1-Abrir un segundo libro: ................................................................................................................. 20
2-Activar un segundo libro: .............................................................................................................. 20
3-Cerrar un libro (sin guardar): ........................................................................................................ 20
4-Cerrar un libro (guardando los cambios): ..................................................................................... 20
5-Guardar un libro con otro nombre: ................................................................................................ 20
6-Guardar un libro cuyo nombre ser el valor de una celda: ............................................................ 20
7-No mostrar aviso al salir, al eliminar hoja, o cualquier aviso que queremos omitir: .................... 20
8-Deshabilitar la opcin de actualizar vnculos al abrir un libro: ..................................................... 20
9-No mostrar la ejecucin de la macro (movimiento de pantalla): .................................................. 21
10-Ejecutar una macro al abrir un libro: ........................................................................................... 21
Mensajes en la barra de estado ......................................................................................................... 21
Trabajando con Hojas: .......................................................................................................................... 22
1- Activar o seleccionar otras hojas: ................................................................................................. 22
2-Seleccionar la hoja anterior o siguiente: ....................................................................................... 22
3-Datos de la hoja: ............................................................................................................................ 22
4-Copiar datos de una hoja a la siguiente: ........................................................................................ 22

3
5- Ocultar filas o columnas: .............................................................................................................. 22
6-Proteger o desproteger una hoja: ................................................................................................... 22
7-Insertar filas o columnas: .............................................................................................................. 22
8-Eliminar filas o columnas: ............................................................................................................. 22
9-Insertar una imagen en una hoja: ................................................................................................... 22
10-Imprimir la hoja seleccionada: .................................................................................................... 23
Trabajando con selecciones, formatos, etc.: ......................................................................................... 24
1- Formas de seleccionar una celda o un rango de celdas: ............................................................... 24
2- Seleccionar celdas a cierta distancia de la celda activa: ............................................................... 24
3- Formato de celdas: ...................................................................................................................... 24
4- Guardar la direccin de una celda en una variable:...................................................................... 24
5- Copiar un comentario en otra celda: ............................................................................................ 24
6-Seleccionar celdas y borrarlas: ...................................................................................................... 24
7- Ampliar un rango seleccionado .................................................................................................... 25
8- Combinar celdas selecccionadas: ................................................................................................ 25
9- Seleccionar el rango donde se encuentra la celda activa: ............................................................ 25
10- Seleccionar hasta la ltima celda no vaca: ................................................................................ 25
Trabajando con Objetos ........................................................................................................................ 26
1- Llamando a un Userform, desde un botn: .................................................................................. 26
2- Asignando valores a los Cuadros de texto: .................................................................................. 26
3- Volcar datos de un control Textbox y Combobox a la hoja: ........................................................ 26
4- Cargar datos a un control ListBox de un UserForm: ................................................................... 27
EJEMPLOS DE MACROS .................................................................................................................. 28
' Esta macro oculta las lneas de divisin de las celdas .................................................................... 28
' Esta macro copia un rango a la celda activa ................................................................................... 28

4
Esta macro utiliza algunas OPM (objetos, propiedades y mtodos) nuevos: ................................... 28
Abre Excel con vista solo para el formulario iniciando aplicacin minimizada .............................. 29
Algunos trucos de Microsoft para VBA con Excel .............................................................................. 30
Ejemplo de la funcin Format .............................................................................................................. 36


5
Macro.
o Concepto.
o Macro confecciona un horario semanal.
Nombre de la macro.
Mtodo abreviado.
Guardar macro en:
Este Libro.
Libro de macro personal.
Descripcin.
o Referencia relativa.

o Cuadro de controles
o Hipervnculos
o Formularios


6
InputBox (Instruccin)
Muestra un mensaje en un cuadro de dilogo, espera que el usuario escriba un texto o haga clic en un
botn y devuelve un tipo String con el contenido del cuadro de texto.
Sintaxis
InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context])
La sintaxis de la funcin InputBox consta de estos argumentos con nombre:
Parte Descripcin
prompt Requerido. Expresin de cadena que se muestra como mensaje en el cuadro
de dilogo. La longitud mxima de prompt es de aproximadamente 1024
caracteres, segn el ancho de los caracteres utilizados. Si prompt consta de
ms de una lnea, puede separarlos utilizando un carcter de retorno de
carro (Chr(13)), un carcter de avance de lnea (Chr(10)) o una
combinacin de los caracteres de retorno de carro-avance de lnea (Chr(13)
y Chr(10)) entre cada lnea y la siguiente.
title Opcional. Expresin de cadena que se muestra en la barra de ttulo del
cuadro de dilogo. Si omite title, en la barra de ttulo se coloca el nombre de
la aplicacin.
default Opcional. Expresin de cadena que se muestra en el cuadro de texto como
respuesta predeterminada cuando no se suministra una cadena. Si omite
default, se muestra el cuadro de texto vaco.
xpos Opcional. Expresin numrica que especifica, en twips, la distancia en
sentido horizontal entre el borde izquierdo del cuadro de dilogo y el borde
izquierdo de la pantalla. Si se omite xpos, el cuadro de dilogo se centra
horizontalmente.
ypos Opcional. Expresin numrica que especifica, en twips, la distancia en
sentido vertical entre el borde superior del cuadro de dilogo y el borde
superior de la pantalla. Si se omite ypos, el cuadro de dilogo se coloca a
aproximadamente un tercio de la altura de la pantalla, desde el borde
superior de la misma.
helpfile Opcional. Expresin de cadena que identifica el archivo de Ayuda que se
utilizar para proporcionar ayuda interactiva para el cuadro de dilogo. Si se
especifica helpfile, tambin deber especificarse context.

7
context Opcional. Expresin numrica que es el nmero de contexto de Ayuda
asignado por el autor al tema de Ayuda correspondiente. Si se especifica
context, tambin deber especificarse helpfile.

Comentarios
Cuando se especifica tanto helpfile como context, el usuario puede presionar F1 (Windows) o Ayuda
(Macintosh) para ver el tema de Ayuda correspondiente a context. Algunas aplicaciones host, por
ejemplo, Microsoft Excel, tambin agregar automticamente un botn Ayuda al cuadro de dilogo. Si
el usuario hace clic en Aceptar o presiona Entrar , la funcin InputBox devuelve lo que haya en el
cuadro de texto. Si el usuario hace clic en Cancelar, la funcin devuelve una cadena de caracteres de
longitud cero ("").
Nota Si desea especificar ms que el primer argumento con nombre, debe utilizar
o Ejemplo de la funcin InputBox
En este ejemplo se muestran distintas maneras de utilizar la funcin InputBox para indicar al usuario
que debe introducir un valor. Si se omiten las posiciones x e y, el dilogo se centra automticamente
segn los ejes respectivos. La variable MyValor contiene el valor introducido por el usuario, si ste
hace clic sobre Aceptar o presiona ENTER. Si el usuario hace clic sobre Cancelar, se devuelve una
cadena de caracteres de longitud cero.

Sub IngresoPorTeclado()
Dim Mensaje, Ttulo, ValorPred, MiValor
Mensaje = " Introduzca un nmero del 1 a 3" ' Establece el mensaje.
Ttulo = "Demostracin de InputBox" ' Establece el ttulo.
ValorPred = "1" ' Establece el valor predeterminado.
' Muestra el mensaje, el ttulo, y el valor predeterminado.
MiValor = InputBox(Mensaje, Ttulo, ValorPred)

' Muestra el mensaje, el ttulo y el valor predeterminado.
MiValor = InputBox(Mensaje, Ttulo, , , , "DEMO.HLP", 10)

' Se muestra el dilogo en la posicin 100, 100.
MiValor = InputBox(Mensaje, Ttulo, ValorPred, 100, 100)
End Sub



Sub IngresoDeDatos()
ActiveCell.FormulaR1C1=Prueba de ingreso
Nota = InputBox("Ingrese el promedio del alumno")
ActiveCell.FormulaR1C1=Val(Nota)
End Sub

8

MsgBox (Instruccin)

Ejemplo 1

Sub MuestraMensaje()
MsgBox ("Este alumno esta REPROBADO")
End Sub


Ejemplo 2

Sub Mensaje()
Dim Mensaje, Estilo, Ttulo, Ayuda, Ctxt, Respuesta, MiCadena
Mensaje = "Desea continuar?" ' Define el mensaje.
Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones.
Ttulo = "Demostracin de MsgBox" ' Define el ttulo.
Ayuda = "DEMO.HLP" ' Define el archivo de ayuda.
Ctxt = 1000 ' Define el tema
' el contexto
' Muestra el mensaje.
Respuesta = MsgBox(Mensaje, Estilo, Ttulo, Ayuda, Ctxt)
If Respuesta = vbYes Then ' El usuario eligi el botn S.
MiCadena = "S" ' Ejecuta una accin.
Else ' El usuario eligi el botn No.
MiCadena = "No" ' Ejecuta una accin.
End If

End Sub


If Then Else (Instruccin)


Ejemplo 1:
Sub Ejemplo_1()
Nota = InputBox("Ingrese el promedio del alumno")

If Val(Nota) < 4 Then
MsgBox ("Este alumno esta REPROBADO")
Else

9
MsgBox ("Felicitaciones, este alumno est PROMOVIDO")
End If

End Sub


Ejemplo 2:
Sub Ejemplo_2()
If ActiveCell.FormulaR1C1 < 4 Then
Msgbox(Alumno Reprobado)
Else
Msgbox(Alumno promovido)
Endif
End Sub


Ejemplo 3:
Sub Ejemplo_3()
If ActiveCell.FormulaR1C1 >= 1 And ActiveCell.FormulaR1C1 < 4 Then
MsgBox ("Nota Insuficiente")
End If

If ActiveCell.FormulaR1C1 >= 4 And ActiveCell.FormulaR1C1 < 5 Then
MsgBox ("Nota Suficiente")
End If

If ActiveCell.FormulaR1C1 >= 5 And ActiveCell.FormulaR1C1 < 6 Then
MsgBox ("Nota Buena")
End If

If ActiveCell.FormulaR1C1 >= 6 And ActiveCell.FormulaR1C1 <= 7 Then
MsgBox ("Nota Muy Buena")
End If
End Sub

10
Ejemplo de la instruccin If...Then...Else
Este ejemplo muestra los dos posibles usos de If...Then...Else como bloque y en una nica lnea. Tambin
muestra el uso de If TypeOf...Then...Else.
Sub Ejemplo_4()
Dim Nmero, Dgitos, MiCadena
Nmero = InputBox("Ingrese un nmero")
' Inicializa variable.
If Nmero < 10 Then
Dgitos = 1
ElseIf Nmero < 100 Then
Dgitos = 2
ElseIf Nmero < 1000 Then
Dgitos = 3
ElseIf Nmero < 10000 Then
Dgitos = 4

Else
Dgitos = 5
End If

' Asigna un valor con la sintaxis de una lnea.
If Dgitos = 1 Then MiCadena = "Un" Else MiCadena = "Ms de un"

Msgbox El nmero tiene & Dgitos & dgitos

End Sub




11

For To Next (Instruccin)

Ejemplo 1:

Sub EjemploFor1()
For x = 1 To 15 Step 1
ActiveCell.Offset(1, 0).Range("A1").Select
Activecell.formulaR1C1 = X
Next
End sub



Ejemplo 2:

Sub EjemploFor2()

For i = 1 To 8 Step 1
For j = 1 To 8 Step 1
ActiveCell.Offset(1, 0).Range("A1").Select
Activecell.formulaR1C1 = j
Next
ActiveCell.Offset(-8, 1).Range("A1").Select
Next
End sub


Ejemplo 3:

Sub EjemploFor3()

For z = 1 To 6 Step 1
ActiveCell.Offset(z, 0).Range("A1").Select
Activecell.formulaR1C1 = z
Next
End sub


12

While Wend (Instruccin)

Ejemplo 1:

Sub EjemploWhile1()
While ActiveCell.FormulaR1C1 <> Empty
ActiveCell.Offset(1, 0).Range("A1").Select
Wend
End sub

Ejemplo 2:

Sub EjemploWhile2()
While ActiveCell.FormulaR1C1 < 2008
ActiveCell.Offset(1, 0).Range("A1").Select
Wend
End sub

Ejemplo 3:

Sub EjemploWhile3()
Contador = 0 ' Inicializa la variable.
While Contador < 20 ' Comprueba el valor del Contador.
Contador = Contador + 1 ' Incrementa Contador.
Wend ' Finaliza el bucle End While cuando Contador > 19.
MsgBox ("Bucle finalizado en " & Contador)
End sub

13

Do...Loop (Instruccin)
Repite un bloque de instrucciones cuando una condicin es True o hasta que una condicin se convierta en
True.
Sintaxis
Do [{While | Until} condicin]
[instrucciones]
[Exit Do]
[instrucciones]
Loop
O bien, puede utilizar esta sintaxis:
Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop [{While | Until} condicin]
La sintaxis de la instruccin Do Loop consta de las siguientes partes:
Parte Descripcin
condicin Opcional. Expresin numrica o expresin de cadena que es True o False. Si la condicin es Null, condicin
se considera False.
Instrucciones Una o ms instrucciones que se repiten mientras o hasta que condicin sea True.

Comentarios
Se puede utilizar cualquier nmero de instrucciones Exit Do ubicadas en cualquier lugar dentro de
una estructura de control DoLoop, para proporcionar una salida alternativa de un DoLoop. La
instruccin Exit Do se utiliza frecuentemente en la evaluacin de alguna condicin, por ejemplo,
IfThen; en este caso, la instruccin Exit Do transfiere el control a la instruccin que sigue
inmediatamente a la instruccin Loop.
Cuando se utiliza con instrucciones anidadas DoLoop, la instruccin Exit Do transfiere control al
bucle que est anidado un nivel por encima del bucle donde ocurre.

14
Ejemplo de la instruccin Do...Loop
En este ejemplo se muestra cmo se pueden utilizar las instrucciones Do...Loop. La instruccin interna
Do...Loop hace un bucle 10 veces, establece el valor del indicador a False y sale prematuramente mediante la
instruccin Exit Do. El bucle externo sale inmediatamente al comprobar el valor del indicador.
Sub EjemploDoLoop()
Dim Comprobar, Contador
Comprobar = True: Contador = 0 ' Inicializa variables.
Do ' Bucle externo.
Do While Contador < 20 ' Bucle interno.
Contador = Contador + 1 ' Incrementa el contador.
If Contador = 10 Then ' Si la condicin es verdadera.
Comprobar = False ' Establece el valor a False.
Exit Do ' Sale del bucle interno.
End If
Loop
Loop Until Comprobar = False ' Sale inmediatamente del bucle externo.
End sub

15

Select Case (Instruccin)
Ejecuta uno de varios grupos de evaluaciones, dependiendo del valor de una variable.
Sintaxis
Select Case expresin_prueba
[Case lista_expresion-n
[instrucciones-n]] ...
[Case Else
[instrucciones_else]]
End Select
Ejemplo 1:
Sub DemoSelectCase()
nmero = InputBox("Ingrese un nmero")

Select Case val(Nmero) ' Evala Nmero.
Case 1 To 5 ' Nmero entre 1 y 5, inclusive.
Msgbox(Entre 1 y 5)
Case 6, 7, 8 ' Nmero entre 6 y 8.
Msgbox("Entre 6 y 8")
Case 9 To 10 ' Nmero es 9 10.
Msgbox("Mayor que 8")
Case Else ' Otros valores.
Msgbox("No est entre 1 y 10")
End Select
Endsub

16

GoSub... Return

Ejemplo de la instruccin GoSub...Return
En este ejemplo se utiliza GoSub para llamar a una subrutina ubicada dentro de un procedimiento Sub. La
instruccin Return hace que se reanude la ejecucin en la instruccin que est inmediatamente despus de la
instruccin GoSub. La instruccin Exit Sub se utiliza para evitar que el control de la ejecucin contine
accidentalmente en la subrutina.
Sub GosubDemo()
Dim Nmero
' Pide un nmero al usuario.
Nmero = InputBox("Escriba un nmero positivo para dividir por 2.")
' Slo se utiliza la subrutina si el usuario escribe un ' nmero positivo.
If Nmero > 0 Then GoSub MiRutina 'Mirutina es una etiqueta _
de linea
Debug.Print Nmero
Exit Sub ' Utiliza Exit para evitar un error.

MiRutina:
Rem MiRutina es una etiqueta de lnea definida por el usuario.
Rem Una etiqueta de lnea se usa para identificar una sola lnea de cdigo.
Rem Puede ser cualquier combinacin de caracteres que comience con una letra y que termine con dos puntos (:).
Rem Las etiquetas de lnea no distinguen maysculas y minsculas y deben empezar en la primera columna.

Nmero = Nmero/2 ' Realiza la divisin.
Return ' Devuelve control a la instruccin, _
que sigue a la instruccin GoSub

End Sub


17

Sub Demo2Gosub()

num = InputBox("Escriba un nmero positivo entre 0 y 300")

If NUM >= 0 And NUM <= 100 Then GoSub 100
If NUM >= 101 And NUM <= 200 Then GoSub 200
If NUM >= 201 And NUM <= 300 Then GoSub 300

If NUM < 0 Or NUM > 300 Then GoSub 400

Exit Sub

100 MsgBox ("El valor est entre 0 y 100")
Return ' Devuelve control a la posicin desde donde fue llamada

200 MsgBox ("El valor est entre 101 y 200")
Return ' Devuelve control a la posicin desde donde fue llamada

300 MsgBox ("El valor est entre 201 y 300")
Return ' Devuelve control a la posicin desde donde fue llamada

400 MsgBox ("El valor no est entre 0 y 300")

End Sub

18

Exit (Instruccin)
Sale de un bloque de cdigo de DoLoop, For...Next, Function, Sub o Property.
Sintaxis
Exit Do
Exit For
Exit Function
Exit Property
Exit Sub
Ejemplo de la instruccin Exit
En este ejemplo se utiliza la instruccin Exit para salir del bucle For...Next, Do...Loop y de un procedimiento
Sub.
Sub ExitStatementDemo()
Dim I, MiNmero
Do ' Establece un bucle infinito.
For I = 1 To 100 ' Hace un bucle 1000 veces.
MiNmero = Int(Rnd * 100)' Genera nmeros aleatorios.
Select Case MiNmero ' Evala el nmero aleatorio.
Case 7: Exit For ' Si es 7, sale de For...Next.
Case 29: Exit Do ' Si es 29, sale de Do...Loop.
Case 54: Exit Sub ' Si es 54, sale del procedimiento Sub.
End Select
Next I
Loop
End Sub

19
ON ERROR GOTO (Manejo de errores)
On Error GoTo lnea
Activa la rutina de control de errores que comienza en la lnea
especificada en el argumento necesario lnea. El argumento lnea es
cualquier etiqueta de lnea o nmero de lnea. Si se produce un error en
tiempo de ejecucin, el control pasa a lnea, activando el controlador de
errores. La lnea especificada en el argumento lnea debe encontrarse en
el mismo procedimiento que la instruccin On Error; o de lo contrario,
se producir un error en tiempo de compilacin.
On Error Resume Next
Especifica que, en caso de que se produzca un error en tiempo de
ejecucin, el control pase a la instruccin que sigue inmediatamente a
aqulla en la que se ha producido el error, donde contina la ejecucin. Se
recomienda utilizar este formato en lugar de On Error GoTo cuando
acceda a objetos.
On Error GoTo 0
Desactiva cualquier controlador de errores del procedimiento actual.
Application.DisplayAlerts =
False
El valor predeterminado es True. Defina la propiedad como False
para evitar que los mensajes y avisos interrumpan la ejecucin de
una macro y para que, si un mensaje necesita una respuesta,
Microsoft Excel elija la predeterminada.
Si define el valor de esta propiedad como False, Microsoft Excel la
define como True cuando termina el cdigo, a menos que se est
ejecutando un cdigo de proceso cruzado.
Cuando se utiliza el mtodo SaveAs para sobrescribir los libros de
un archivo existente, el valor predeterminado del mensaje
"Sobrescribir" es "No"; sin embargo, cuando la propiedad
DisplayAlerts se establece como False, Excel selecciona la
respuesta "S".


Sub NroError()
'

'
On Error Resume Next

Sheets("Hoja100").Select
MsgBox ("Haya o no haya un error de todas maneras se continua con el cdigo")
MsgBox Err.Number
MsgBox Err.Description

End Sub

20
Trabajando con libros.

1-Abrir un segundo libro:
Application.Workbooks.Open "C:\Mis docu\Libro1.xlsx" o
Workbooks.Open "C:\.....\Libro1.xlsx"
2-Activar un segundo libro:
Workbooks("Libro2.xlsx").Worksheets("Hoja3").Activate
o
Workbooks(2).Sheets(3).Activate
3-Cerrar un libro (sin guardar):
Workbooks("Libro1.xlsx").Close False
o
ActiveWorkbook.Close False
4-Cerrar un libro (guardando los cambios):
ActiveWorkbook.Save
ActiveWorkbook.Close
5-Guardar un libro con otro nombre:
ActiveWorkbook.SaveAs Filename:="C:\Mis doc\Libro1.xlsx", FileFormat:=xlNormal, Password:="clave",
ReadOnlyRecommended:=False

Estas son algunas de las opciones. Si se omiten, escribir la coma, como en el siguiente ejemplo:
ActiveWorkbook.SaveAs Filename:="C:\Mis doc\Libro.xlsx",,, ReadOnlyRecommended:=False
6-Guardar un libro cuyo nombre ser el valor de una celda:
ActiveWorkbook.SaveAs Filename:=Range("A2").Value
7-No mostrar aviso al salir, al eliminar hoja, o cualquier aviso que queremos omitir:
Application.DisplayAlerts= False 'volverla a True al finalizar la macro
8-Deshabilitar la opcin de actualizar vnculos al abrir un libro:
Application.DisplayAlerts= False 'volverla a True al finalizar la macro
WorkBooks.Open Filename:= "C:\Mis docu\pruebas.xlsx", UpdateLinks:= 0

21
9-No mostrar la ejecucin de la macro (movimiento de pantalla):
Application.ScreenUpdating = False 'volverla a True al finalizar la macro
10-Ejecutar una macro al abrir un libro:
Insertar una rutina en un mdulo:
Ejemplo: Sub Nuevamacro ()
'instrucciones
End Sub
Y agregar esta otra en el objeto ThisWorkbook:
Private Sub Workbook_Open ()
Nuevamacro
End Sub

Mensajes en la barra de estado
Sub Ejemplo()
Application.StatusBar = "Espere el proceso est a punto de terminar"
Application.StatusBar = False

End Sub

22
Trabajando con Hojas:

1- Activar o seleccionar otras hojas:
Sheets("Hoja2").Activate o Sheets(2).Select
2-Seleccionar la hoja anterior o siguiente:
ActiveSheet.Previous.Select 'hoja anterior a la activa
ActiveSheet.Next.Select 'hoja posterior a la activa
3-Datos de la hoja:
ActiveSheet.Name 'nombre de la hoja
ActiveSheet.Index 'nmero de hoja
4-Copiar datos de una hoja a la siguiente:
Selection.Copy 'previamente se habr seleccionado algo
ActiveSheet.Paste Destination:=ActiveSheet.Next.Range("B2")
5- Ocultar filas o columnas:
ActiveCell.EntireRow.Hidden=True o ActiveCell.EntireColumn.Hidden= True
6-Proteger o desproteger una hoja:
ActiveSheet.Protect "contrasea" 'proteger con contrasea
ActiveSheet.Unprotect "contrasea" 'quitar la proteccin
7-Insertar filas o columnas:
'reemplazar i por el nro de columna
Workbooks("Libro1").Sheets("Hoja2").Column(i).Select
Selection.EntireColumn.Insert
'reemplazar Column por Row en caso de filas.
8-Eliminar filas o columnas:
ActiveSheet.Row(n).Select 'reemplazar n por el nro de fila
Selection.EntireRow.Delete
9-Insertar una imagen en una hoja:

23
ActiveSheet.Pictures.Insert(ruta).Select
'la ruta entre comillas: "C:\Mis docu\Foto1.jpg"
10-Imprimir la hoja seleccionada:
ActiveWindow.SelectedSheet.PrintOut Copies:=1, Collate:=True o
ActiveSheet.PrintOut


24
Trabajando con selecciones, formatos, etc.:

1- Formas de seleccionar una celda o un rango de celdas:
Range("B7").Select 'selecciona la celda B7
Range("B:B").Select 'selecciona toda la columna B
Range("A4:A10, D10, B5:B20").Select selecciona rangos discontinuos
2- Seleccionar celdas a cierta distancia de la celda activa:
Sheets(1).Range("A1").Offset(2,3).Select
'selecciona 2 filas hacia abajo y 3 col a derecha de A1 = D3
ActiveCell.Offset(-10,1).Select
'selecciona la celda que se encuentra 10 filas por encima y 1 columna a la derecha de la celda activa.

3- Formato de celdas:
Range("B2:D10").Select
'selecciona el rango y le aplica los siguientes formatos
With Selection
.Font.Bold=True 'formato negrita .
Font.Italic=True 'formato cursiva
Font.Underline=xlUnderlineStyleSingle 'subrayado simple
.Font.Color = RGB(255,0,0)
'color de fuente (para estos valores ser rojo)
.HorizontalAlignment=xlCenter
'alineacin central (Right=derecha, Left=izquierda)
End With
4- Guardar la direccin de una celda en una variable:
lugar= ActiveCell.Address 'guarda la referencia absoluta
lugar= ActiveCell.Address(False, False) 'guarda la referencia relativa
5- Copiar un comentario en otra celda:
ActiveCell.Offset(0,1).Value = ActiveCell.Comment.Text
'copia el comentario de la celda activa en la celda que se encuentra en la columna siguiente.
6-Seleccionar celdas y borrarlas:
Range(rango). Select

25
o
Cells.Select
Selection.ClearContents
7- Ampliar un rango seleccionado
Selection.Resize(10,4).Select ' (10 filas, 4 columnas)
' si el rango seleccionado fue A1:B5 ahora ser: A1:D10
8- Combinar celdas selecccionadas:
Range("B1:E1").Select
Selection.Merge
9- Seleccionar el rango donde se encuentra la celda activa:
Range("B2").CurrentRegion.Select
10- Seleccionar hasta la ltima celda no vaca:
Range("A2",Range("A2").End(xlDown)).Select
'seleciona desde A2 hacia abajo

Range("A2",Range("A2").End(xlToRight)).Select
'selecciona desde A2 hacia la derecha

Range("D2",Range("D2").End(xlToLeft)).Select
'selecciona desde D2 hacia la izquierda
Range("A20",Range("A20").End(xlUp)).Select
'selecciona desde A20 hacia arriba

En cambio, para seleccionar solo la ltima celda con datos ser:
Range("A2").End(xlDown).Select
En el caso que no existieran datos en las celdas, esta instruccin se posicionar en la ltima celda de Excel.

26
Trabajando con Objetos

A continuacin algunos ejemplos de cmo llamar a objetos insertados en hoja, como ser Cuadros de texto, Listas o
Cuadros combinados y tambin un Userform.

1- Llamando a un Userform, desde un botn:
En una hoja de Excel, los botones que lanzan una accin, se colocan desde la cinta Programador, insertar,
Controles de Formulario.
a. Botn de formulario: se asigna una macro, como la del ejemplo, que previamente se escribi en un
mdulo en el Editor de Visual Basic. Ejemplo:
Sub mostrando ()
UserForm1.Show 'nombre del Userform que se desea mostrar
End Sub
b. Botn del Cuadro de controles de Formulario: una vez dibujado en la hoja, clic sobre la opcin
Controles, Ver cdigo y escribir la rutina (sta se habilita en la hoja donde aparecer el control).
Ejemplo:
Sub CommandButton1_Click()
UserForm1.Show
End Sub
2- Asignando valores a los Cuadros de texto:
Ejemplos de cmo registrar datos en los textbox dibujados en hoja con controles de formulario:
TextBox1.Value = "CANCELADO"
TextBox2 = Sheets("Hoja3").Range("A5").Value
TextBox2 = Range("C1").Value + Range("C2").Value
3- Volcar datos de un control Textbox y Combobox a la hoja:
Estos controles han sido dibujados con el 'Cuadro de controles'
'pasar datos de un control Textbox
Cells(fila, col).Value = TextBox1.Value
'pasar datos de la seleccin de un combobox
Sheets("Hoja1").Cells(fila, col).Offset(1, 0).Value = Combobox1.Value

27
4- Cargar datos a un control ListBox de un UserForm:
Private Sub UserForm_Activate()
Dim item As Variant
For Each item In Range("F1:F6")
ListBox1.AddItem item.Value
Next item
End Sub


28
EJEMPLOS DE MACROS

' Esta macro oculta las lneas de divisin de las celdas
Sub OcultarLineas()
ActiveWindow.DisplayGridlines = False
End Sub

Detalle:
Esta macro utiliza el objeto ActiveWindow (ventana activa).
Luego le asigna la propiedad DisplayGridlines=False (mostrar lneas de divisin=falso)
Si quisieras volver a ver las lneas de divisin puedes cambiar la propiedad False por True, tal que:
ActiveWindow.DisplayGridlines = True

' Esta macro copia un rango a la celda activa
Sub CopiaRango()
Range("A1:A5").Copy Destination:=ActiveCell
End Sub

Para probar esta macro vuelve a Excel con ALT+F11 y escribe algunos nmeros o palabras a gusto en el rango
A1:A5.
Posicinate en la celda C1.
Ejecuta la macro CopiaRango.
El resultado ser que el rango A1:A5 se copiar a partir de la celda C1 que era la celda activa al ejecutar la
macro.

Esta macro utiliza algunas OPM (objetos, propiedades y mtodos) nuevos:
Range ("A1:A5")
El objeto Range ya lo conocamos...
Copy
Este es un mtodo
Destination:=ActiveCell
Este es otro objeto. Destination se suele utilizar luego de un Copy y ActiveCell hace referencia a la celda activa.

29
Public Sub prueba()
Rows("1:1").Select 'Selecciona filas
Selection.Delete Shift:=xlUp
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Range("B3").Select
Selection.EntireRow.Delete
Selection.EntireRow.Insert
Rows(1).Delete 'elimina la fila 1
Rows("1:3").Delete 'elimina la fila 1 a la 3
Columns(1).Delete 'Elimina la columna 1
CuentaCeldasNoVacias = Application.CountA(Rows(1)) ' Cuenta Celdas que no estn vacias en la fila 1
CuentaCeldasNoVacias = Application.CountA(Columns(1)) ' Cuenta Celdas que no estn vacias en la columna
1
ActiveSheet.UsedRange.Select 'Selecciona el rango que se est usando en la hoja activa.

PrimeraFila = ActiveSheet.UsedRange.Row ' asigna a una variable el nmero de la primera fila en el rango
usado
PrimeraColumna = ActiveSheet.UsedRange.Column ' asigna a una variable el nmero de la primera columna en
el rango usado

CantidadFilasDelRango = ActiveSheet.UsedRange.Rows.Count ' asigna a una variable el cantidad de filas que
posee el rango usado
CantidadColumnasDelRango = ActiveSheet.UsedRange.Columns.Count ' asigna a una variable el cantidad de
columnas que posee el rango usado

UltimaFila = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count ' asigna a una variable el
nmero de la ltima fila en el rango usado
UltimaColumna = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count ' asigna a una
variable el nmero de la ltima columna en el rango usado
End Sub


Abre Excel con vista solo para el formulario iniciando aplicacin minimizada
Private Sub Workbook_Open()
Application.WindowState = xlMinimized 'inicia el libro minimizado y..
UserForm1.Show false 'posteriormente muestra el Userform1 en estilo no modal
End Sub

30

Algunos trucos de Microsoft para VBA con Excel

En algunos detalles el VBA para Excel no es muy obvio que digamos. Buscando en el help de Microsoft me encontr con
estos datos que me fueron bastante tiles en mi trabajo. En algunos adjunto un comentario de con mi aplicacin prctica:
Algunas funciones de hoja de clculo no tienen utilidad en Visual Basic. Por ejemplo, la funcin Concatenar no
se necesita, ya que en Visual Basic puede usar el operador & para unir varios valores de texto.

Llamar a una funcin de hoja de clculo desde Visual Basic:
En Visual Basic, las funciones de hoja de calculo de Microsoft Excel pueden ejecutarse mediante el objeto
WorksheetFunction.
El siguiente procedimiento Sub usa la funcin Mn para obtener el valor ms pequeo de un rango de celdas. En
primer lugar, se declara la variable miRango como un objeto Range y, a continuacin, se establece como el
rango A1:C10 de la Hoja1. Otra variable, respuesta, se asigna al resultado de aplicar la funcin Mn a miRango.
Por ltimo, el valor de respuesta se muestra en un cuadro de mensaje.

Sub UseFunction()
Dim miRango As Range
Set miRango = Worksheets("Hoja1").Range("A1:C10")
respuesta = Application.WorksheetFunction.Min(miRango)
MsgBox respuesta
End Sub

Comentario: el sentido comn nos dira que podemos inclur la funcin de Excel en nuestro programa VBA sin
ms pero no es as, hay que definir primero el rango (Set miRango en este ejemplo) y luego colocar la funcin
usando Application.WorksheetFunction. Por ejemplo con:
Set miRango = Worksheets("Hoja2").Range("B11:B21")
Hoja2.Cells(22, 2) = Application.WorksheetFunction.Sum(miRango)
Set miRango = Worksheets("Hoja2").Range("C11:C21")
Hoja2.Cells(22, 3) = Application.WorksheetFunction.Sum(miRango)
Se suman las celdas C11 a la C21 y el resultado se coloca en la celda(22,3)

Si usa una funcin de hoja de clculo que requiere como argumento una referencia de rango, deber especificar
un objeto Range. Por ejemplo, puede usar la funcin de hoja de clculo Coincidir para efectuar una bsqueda en
un rango de celdas. En una celda de hoja de clculo, podra introducir una frmula como
=COINCIDIR(9;A1:A10;0). No obstante, en un procedimiento de Visual Basic, para obtener el mismo resultado
debe especificar un objeto Range.

Sub FindFirst()
miVar = Application.WorksheetFunction.Match(9, Worksheets(1).Range("A1:A10"), 0)
MsgBox miVar
End Sub

31

Nota Las funciones de Visual Basic no usan el calificador WorksheetFunction. Una funcin puede tener el
mismo nombre que una funcin de Microsoft Excel y, sin embargo, dar otros resultados. Por ejemplo,
Application.WorksheetFunction.Log y Log dan resultados diferentes.

Insertar una funcin de hoja de clculo en una celda
Para insertar una funcin de hoja de clculo en una celda, especifique la funcin como el valor de la propiedad
Formula del objeto Range correspondiente. En el siguiente ejemplo, la funcin ALEATORIO (que genera un
nmero aleatorio) se asigna a la propiedad Formula del rango A1:B3 de la Hoja1 del libro activo.

Sub InsertFormula()
Worksheets("Hoja1").Range("A1:B3").Formula = "=ALEATORIO()"
End Sub

Puede identificar las hojas por su nombre, utilizando las propiedades Worksheets y Charts. Las siguientes
instrucciones activan varias hojas del libro activo.

Worksheets("Hoja1").Activate
Charts("Grfico1").Activate

DialogSheets("Dilogo1").Activate

Puede utilizar la propiedad Sheets para devolver una hoja de clculo, de grficos, de mdulo o de cuadro de
dilogo, incluidos todos en el conjunto Sheets. El siguiente ejemplo activa la hoja denominada "Grfico1" del
libro activo.

Sub ActivarGrfico()
Sheets("Grfico1").Activate
End Sub

Nota Los grficos incrustados en una hoja de clculo son miembros del grupo ChartObjects, aunque los grficos
que poseen sus propias hojas pertenecen al conjunto Charts.

Puede hacer referencia a una celda o rango de celdas del estilo de referencia A1 utilizando el mtodo Range. El
siguiente procedimiento Sub cambia el formato de las celdas A1:D5 a negrita.

Sub FormatoRango()
Workbooks("Libro1").Sheets("Hoja1").Range("A1:D5") _
.Font.Bold = True
End Sub

32

La siguiente tabla muestra algunas referencias de estilo A1 utilizando el mtodo Range.

Referencia Significado
Range("A1") Celda A1
Range("A1:B5") Celdas de la A1 a la B5
Range("C5:D9,G9:H16") Seleccin de varias reas
Range("A:A") Columna A
Range("1:1") Fila un o
Range("A:C") Columnas de la A a la C
Range("1:5") Filas de la uno a la cinco
Range("1:1,3:3,8:8") Filas uno, tres y ocho
Range("A:A,C:C,F:F") Columnas A, C y F

Al utilizar Visual Basic, con frecuencia necesitar ejecutar el mismo bloque de instrucciones en cada una de las
celdas de un rango. Para ello, combine una instruccin de repeticin y uno o ms mtodos para identificar cada
celda, una a la vez, y ejecutar la operacin.
Una manera de ejecutar un bucle en un rango es utilizar el bucle For...Next con la propiedad Cells. Al utilizar la
propiedad Cells, puede sustituir el contador del bucle, u otras variables o expresiones, por el nmero de ndice de
las celdas. En el siguiente ejemplo se sustituye la variable contador por el ndice de fila. El procedimiento
ejecuta un bucle en el rango C1:C20, estableciendo en 0 (cero) cualquier nmero cuyo valor absoluto sea menor
que 0.01.

Sub RedondeoACero1()
For contador = 1 To 20
Set Celda_a = Worksheets("Hoja1").Cells(contador, 3)
If Abs(Celda_a.Value) < 0.01 Then Celda_a.Value = 0
Next contador
End Sub

Otra manera sencilla de ejecutar un bucle en un rango es utilizar el bucle For Each...Next en el conjunto de
celdas devuelto por el mtodo Range. Visual Basic establece automticamente una variable de objeto para la
siguiente celda cada vez que se ejecuta el bucle. El siguiente procedimiento realiza un bucle en el rango A1:D20,
estableciendo en 0 (cero) cualquier nmero cuyo valor absoluto sea menor que 0.01.

Sub RedondeoACero2()
For Each c In Worksheets("Hoja1").Range("A1:D10").Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub
Comentario: esto sirve, por ejemplo para programar la suma de dos columnas (B y C, desde la fila 11 a la 22 en
este ejemplo) as

Dim miRango As Range
For contador = 11 To 22
Set celda_a = Worksheets("Hoja2").Cells(contador, 2)

33
Set celda_b = Worksheets("Hoja2").Cells(contador, 3)
Hoja2.Cells(contador, 4) = celda_a +celda_b
Next contador

Si no conoce los lmites del rango en que desea ejecutar el bucle, puede utilizar la propiedad CurrentRegion para
devolver el rango que rodea la celda activa. Por ejemplo, el siguiente procedimiento, cuando se ejecuta desde
una hoja de clculo, ejecuta un bucle en el rango que rodea la celda activa, estableciendo en 0 (cero) todos los
nmeros cuyo valor absoluto sea menor que 0.01.

Sub RedondeoACero3()
For Each c In ActiveCell.CurrentRegion.Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub


Al aplicar la propiedad Cells a una hoja de clculo sin especificar un nmero de ndice, el mtodo devuelve un
objeto Range que representa todas las celdas de la hoja de clculo. El siguiente procedimiento Sub borra el
contenido de todas las celdas de la Hoja1 del libro activo.

Sub BorrarHoja()
Worksheets("Hoja1").Cells.ClearContents
End Sub

Una manera de trabajar con una celda relacionada con otra es utilizar la propiedad Offset. El siguiente ejemplo
asigna un formato de doble subrayado al contenido de la celda situada una fila ms abajo y a tres columnas de la
hoja de clculo activa.

Sub Subrayar()
ActiveCell.Offset(1, 3).Font.Underline = xlDouble
End Sub

Nota Puede grabar macros que utilicen la propiedad Offset en lugar en referencias absolutas. En el men
Herramientas, seale Grabar macro y, a continuacin, haga clic en Usar referencias relativas.

Para ejecutar un bucle en un rango de celdas, utilice en el rango una variable con la propiedad Cells. El siguiente
ejemplo rellena las primeras 20 celdas de la tercera columna con valores entre 5 y 100, en incrementos de 5. La
variable contador se utiliza como ndice de fila para la propiedad Cells.

Sub BucleAtravs()
Dim contador As Integer
For contador = 1 To 20
Worksheets("Hoja1").Cells(contador, 3).Value = contador * 5

34
Next contador
End Sub


Si establece una variable de objeto para un objeto Range, puede manipular fcilmente el rango utilizando el
nombre de la variable.
El siguiente procedimiento crea la variable de objeto miRango y, a continuacin, asigna la variable al rango
A1:D5 de la Hoja1 del libro activo. Las instrucciones posteriores modifican las propiedades del rango,
sustituyendo el nombre de la variable por el objeto del rango.

Sub Aleatorio()
Dim miRango As Range
Set miRango = Worksheets("Hoja1").Range("A1:D5")
miRango.Formula = "=ALEATORIO()"
miRango.Font.Bold = True
End Sub

Utilice la funcin Array para identificar un grupo de hojas. El siguiente ejemplo selecciona tres hojas del libro
activo.

Sub Varias()
Worksheets(Array("Hoja1", "Hoja2", "Hoja4")).Select
End Sub

Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras. Estas propiedades devuelven un
objeto Range que representa un rango de celdas. En el siguiente ejemplo, Rows(1) devuelve la fila uno de la
Hoja1. A continuacin, la propiedad Bold del objeto Font del rango se establece en True.

Sub FilaNegrita()
Worksheets("Hoja1").Rows(1).Font.Bold = True
End Sub

La siguiente tabla muestra algunas referencias de fila y columna, utilizando las propiedades Rows y Columns.

Referencia Significado
Rows(1) Fila uno
Rows Todas las filas de la hoja de clculo
Columns(1) Columna uno
Columns("A") Columna uno
Columns Todas las columnas de la hoja de clculo



35
Para trabajar con varias filas o columnas al mismo tiempo, cree una variable de objeto y utilice el mtodo Union,
combinando varias llamadas a la propiedad Rows o Columns. El siguiente ejemplo cambia a negrita el formato
de las filas uno, tres y cinco de la hoja de clculo uno del libro activo.

Sub VariasFilas()
Worksheets("Hoja1").Activate
Dim miUnin As Range
Set miUnin = Union(Rows(1), Rows(3), Rows(5))
miUnin.Font.Bold = True
End Sub


36
Ejemplo de la funcin Format
En este ejemplo se muestran varios usos de la funcin Format para dar formato a valores utilizando formatos
definidos por el usuario y formatos con nombre. La verdadera salida formateada presentada por el sistema para
el separador de fecha (/), de hora (:) y el literal AM/ PM depende de las configuraciones en ese momento.
Cuando las horas y las fechas se vuelven a listar en el entorno de desarrollo, se utilizan los formatos
abreviados de hora y de fecha de la configuracin regional del cdigo. Cuando son presentados por el cdigo
en ejecucin, se utilizan los formatos abreviados de fecha y hora de la configuracin regional del sistema, los
cuales pueden diferir de la configuracin regional del cdigo. En este ejemplo se asume que es Ingls/Estados
Unidos.
MiHora y MiFecha se presentan en el entorno de desarrollo utilizando configuraciones actuales de fecha corta y hora corta.
Public Sub DistintosFormatos()
Dim MiHora, MiFecha, MiCadena
MiHora = #5:04:23 PM#
MiFecha = #1/27/1993#

' Devuelve la hora actual del sistema en el formato largo de hora definido por el sistema.
MiCadena = Format(Time, "Long Time")

' Devuelve la fecha actual del sistema en el formato largo de fecha definido por el sistema.
MiCadena = Format(Date, "Long Date")

MiCadena = Format(MiHora, "h:m:s") ' Devuelve "17:4:23".
MiCadena = Format(MiHora, "hh:mm:ss AMPM") ' Devuelve "05:04:23 PM".
MiCadena = Format(MiFecha, "dddd, d mmm yyyy") ' Devuelve "Mircoles,
' 27 de Ene de 1993".
' Si no se suministra el formato, devuelve una cadena.
MiCadena = Format(23) ' Devuelve "23".

' Formatos definidos por el usuario.
MiCadena = Format(5459.4, "##,##0.00") ' Devuelve "5.459,40".
MiCadena = Format(334.9, "###0.00") ' Devuelve "334,90".
MiCadena = Format(334.9, "###0") ' Devuelve "335".
MiCadena = Format(5, "0.00%") ' Devuelve "500,00%".
MiCadena = Format(5459.4, "$ ##,##0.00") ' Devuelve "$ 5.459,40".
MiCadena = Format(5459.5, "$ ##,##0") ' Devuelve "$ 5.460".
MiCadena = Format(5459.4, "$ ##,##0") ' Devuelve "$ 5.459".


37
MiCadena = Format("HOLA", "<") ' Devuelve "hola".
MiCadena = Format("Esto es", ">") ' Devuelve "ESTO ES".

End Sub

Private Sub TextBox1_AfterUpdate()

TextBox1 = Format(TextBox1, "#,###,###.00")

También podría gustarte