Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MANUAL 400 Macros para Excel
MANUAL 400 Macros para Excel
Tabla de Contenidos
0
Cap. I 1 - Introducción 15
1 BIENVENID@S
................................................................................................................................... 15
2 BREVE INTRODUCCIÓN
...................................................................................................................................
AL EDITOR 17
3 Cómo crear una
...................................................................................................................................
macro 18
4 Dónde colocar
...................................................................................................................................
las macros 18
5 Cómo ejecutar
...................................................................................................................................
una macro 18
6 Acerca de las...................................................................................................................................
macros Auto-Open 18
7 Acerca de las...................................................................................................................................
macros Auto-Close 19
8 Cómo proteger
...................................................................................................................................
un proyecto 19
9 Evitar que las
...................................................................................................................................
macros se vean desde el menú 19
10 Otras consideraciones:
...................................................................................................................................
¿Cómo...? 19
1 Creando un nuevo
...................................................................................................................................
directorio 31
2 ESTABLECER
...................................................................................................................................
LA RUTA DE ACCESO PREDETERMINADA 31
3 Establecer si...................................................................................................................................
un directorio existe 31
4 Establecer si...................................................................................................................................
un archivo existe en un directorio 31
5 Eliminar un archivo
...................................................................................................................................
de un directorio 32
6 Establecer nueva
...................................................................................................................................
unidad de disco 32
7 Establecer nuevo
...................................................................................................................................
directorio o carpeta 32
8 Crear lista de...................................................................................................................................
archivos de una carpeta 32
9 Copiar todos...................................................................................................................................
los libros de una carpeta en otra 32
10 Obtener propiedad
...................................................................................................................................
fecha y hora de archivos 32
11 Obtener tamaño
...................................................................................................................................
de archivos 32
II
III Manual 400 Macros Plus
Guardar un libro
..........................................................................................................................................................
con clave 38
Guardar un libro
..........................................................................................................................................................
cuyo nombre será el valor de una variable 39
Guardar un libro
..........................................................................................................................................................
cuyo nombre serán datos concatenados 39
Guardar libro..........................................................................................................................................................
sin módulos 39
Guardar libro..........................................................................................................................................................
sin código o macros 39
19 Cerrando Libros
................................................................................................................................... 39
Cerrar todos los
..........................................................................................................................................................
libros en uso 39
Cerrar un solo..........................................................................................................................................................
libro 39
Cerrar un libro
..........................................................................................................................................................
SIN guardar los cambios 39
Cerrar un libro
..........................................................................................................................................................
guardando los cambios 40
Impedir el uso..........................................................................................................................................................
del botón Cerrar del libro 40
Controlar errores
..........................................................................................................................................................
antes de cerrar un libro 40
30 Restablecer área
...................................................................................................................................
visible en hoja 48
31 Crear hojas según
...................................................................................................................................
valores en una lista 48
32 Aplicar Zoom...................................................................................................................................
a un rango u hoja 48
33 Obtener el valor
...................................................................................................................................
del Zoom aplicado a la hoja 48
34 Ejecutar rutina
...................................................................................................................................
en todas las hojas del libro 48
35 Hojas de Diálogo:
...................................................................................................................................
cómo ocultarlas 48
36 Eliminar todos
...................................................................................................................................
los comentarios de la hoja 48
37 Activar hoja ...................................................................................................................................
cada tanto tiempo 49
IV
V Manual 400 Macros Plus
31 Mostrar Columnas
................................................................................................................................... 57
32 Insertar comentarios
................................................................................................................................... 57
33 Formatos a Celdas
................................................................................................................................... 57
34 Formato a Columnas
................................................................................................................................... 57
35 Autoajustar columnas
................................................................................................................................... 57
36 Cambiar minúsculas
...................................................................................................................................
por mayúsculas 57
37 Cambiar mayúsculas
...................................................................................................................................
por minúsculas 57
38 Capturar fecha
...................................................................................................................................
y hora de carga de datos 58
39 Insertar Nombre
...................................................................................................................................
de rango 58
40 Insertar Hipervínculos
................................................................................................................................... 58
41 Transponer una
...................................................................................................................................
fila 58
42 Ordenar un rango
................................................................................................................................... 58
43 Detectar si la...................................................................................................................................
celda contiene formula 58
44 Ejemplo de fórmula
...................................................................................................................................
con rango variable 58
45 Cómo conocer
...................................................................................................................................
el color de una celda 59
46 Colorear celdas
...................................................................................................................................
con mas de 3 condiciones 59
47 Resaltar la fila
...................................................................................................................................
activa (1) 59
48 Resaltar la fila
...................................................................................................................................
activa (2) 59
49 Resaltar la celda
...................................................................................................................................
activa 59
50 Cambiar color
...................................................................................................................................
de fuente a celdas con datos 59
51 Separar cada...................................................................................................................................
caracter de una cadena en distintas col 59
52 Quitar espacios
...................................................................................................................................
en celdas 60
53 Proteger rangos
...................................................................................................................................
o celdas 60
54 Recorrer celdas
...................................................................................................................................
protegidas 60
2 INTRODUCIR...................................................................................................................................
FÓRMULAS EN CELDAS 66
3 Armar fórmula
...................................................................................................................................
con datos variables 67
4 Modificar fórmula
...................................................................................................................................
de celda 67
5 Colocar resultado
...................................................................................................................................
de fórmula en celdas 67
VI
VII Manual 400 Macros Plus
10 Asignar mismo
...................................................................................................................................
atajo de teclado a varias macros 76
11 NO MOSTRAR
...................................................................................................................................
AVISOS DE ALERTA 76
12 No mostrar aviso,
...................................................................................................................................
al guardar un archivo, de que el archivo ya existe: 77
13 No mostrar la...................................................................................................................................
ejecución de la macro o el movimiento de hojas: 77
14 Inhabilitar eventos
................................................................................................................................... 77
15 Crear atajos ...................................................................................................................................
de teclado desde una macro 77
3 Establecer un
...................................................................................................................................
valor predeterminado en un InputBox 88
4 Controlar que
...................................................................................................................................
lo ingresado a un InputBox sea referencia válida 88
5 Ingresar y seleccionar
...................................................................................................................................
un rango con InputBox 88
6 Seleccionar datos
...................................................................................................................................
en un rango 88
7 Controlar que
...................................................................................................................................
el dato ingresado sea fecha 88
VIII
IX Manual 400 Macros Plus
4 Crear un gráfico
...................................................................................................................................
en hoja nueva y guardar el libro 109
5 Crear gráfico
...................................................................................................................................
con datos de hoja variable 109
6 Imprimir gráfico
...................................................................................................................................
y tabla que lo alimenta 109
7 MODIFICANDO
...................................................................................................................................
DIMENSIONES DE TODOS LOS GRAFICOS 110
8 Copiar todos
...................................................................................................................................
los graficos en otra hoja 110
9 Eliminar todos
...................................................................................................................................
los graficos de una hoja 110
10 Colorear series
...................................................................................................................................
por macro 110
11 Ubicando un
...................................................................................................................................
gráfico por macro 110
12 Recorrer todos
...................................................................................................................................
los gráficos del libro 111
13 Reconocer ...................................................................................................................................
el área del gráfico seleccionado 111
X
XI Manual 400 Macros Plus
2 Evitar la actualización
...................................................................................................................................
automática de TD 118
3 OBTENER EL
...................................................................................................................................
TOTAL DE UNA TABLA DINÁMICA 118
4 Convetir un...................................................................................................................................
campo en un campo de filas 119
5 Eliminar todas
...................................................................................................................................
las Tablas Dinamicas de una hoja 119
6 Uso de variables
...................................................................................................................................
en TD 119
XII
XIII Manual 400 Macros Plus
22 Funcion Nombre
...................................................................................................................................
Mes 139
I
15 Manual 400 Macros Plus
1 1 - Introducción
1.1 BIENVENID@S
VERSIÓN DEMO
Manual: 400 MACROS Plus
+ 20 Funciones
La intención de este Manual es guiar al usuario de Excel a potenciar las planillas de cálculo con
programación.
NOTA: En esta versión DEMO se podrá acceder a un tema por capítulo. El mismo se
encuentra en mayúsculas en el índice.
No solo los usuarios 'programadores' sacarán provecho de este libro. Los que nunca han
trabajado con algún lenguaje de programación verán que muy fácilmente podrán 'personalizar'
sus libros adaptando o creando rutinas con código VBA (Visual Basic para Aplicaciones)
En el primer capítulo un par de temas con imágenes para familiarizarnos con el entorno Editor
de Macros.
A continuación un par de capítulos detallando conceptos que serán utilizados a lo largo del
manual: Eventos, Métodos, Variables, Cadenas y otros.
Así hasta llegar al último capítulo con 'Rutinas Interesantes' que pueden serte de utilidad o de
modelo para otras tareas, como: Colorear celdas por condición, Crear Libros por cada hoja y
muchas más.
Cada línea, cada comando se encuentra explicado en español para que puedan ser adaptados a
las necesidades y configuración de cada libro.
Contiene además imágenes que guiarán y mostrarán los resultados obtenidos una vez ejecutada
la macro.
Cada vez que accedas a este tema, encontrarás en el margen superior un clip recordándote
que el tema tiene agregados. Haciendo clic en él, aparecerán tus notas personales.
Las rutinas contenidas en este manual, fueron desarrolladas y probadas en las siguientes versiones:
Windows98/Windows XP con Office 2000, Office XP (2002) , Office 2003 y Excel 2007
En caso de dificultad para adaptar alguna rutina a tu libro, envíame tus comentarios a:
cibersoft_arg@yahoo.com.ar
El Editor de Macros:
Desde el menú Herramientas, Macros, Editor de Macros tenemos acceso a una ventana donde se
colocarán ya sea simples instrucciones, pequeñas rutinas y códigos completos de aplicaciones
como Facturación, Control de Gestión, etc.
En versión Excel 2007 se accede desde la ficha Programador, Visual Basic (primer opción)
II
21 Manual 400 Macros Plus
Hemos visto en el capítulo Introducción, Cómo ejecutar una macro, que éstas pueden
ejecutarse ante un evento del libro u hoja.
¿Pero qué es un evento? es una acción que el usuario ejecuta, y tiene que ver con los objetos
Libro y Hojas, siendo los más comunes: abrir, guardar, imprimir o cerrar libros, activar o
desactivar hojas. Estas rutinas no pueden ser ejecutadas manualmente, como las que colocamos
en módulos, sino que se ejecutan al producirse el evento.
Debemos seleccionar un objeto y luego optar por un evento. A continuación la primera y última
instrucción de la macro se escribirán.
Ejemplos:
Las rutinas colocadas en los eventos del libro (Private Sub Workbook) que hacen mención a
hojas (Sheet....) se ejecutan para todas las hojas del libro.
Atención: también los controles colocados en un Userform tienen su lista de eventos, como
SetFocus (al recibir el enfoque), LostFocus (al perder el enfoque) y muchos más que
encontrarán en los ejemplos del capítulo Userforms
2.3 Metodos
2.4 Propiedades
III
25 Manual 400 Macros Plus
3 3 - Tratamiento de Variables
3.1 Tipo de Variables
Variables Locales:
Las variables Locales son las que se declaran dentro de un procedimiento y sus valores sólo
pueden ser utilizados en éste. Para declararlas se utiliza la sentencia Dim, generalmente al inicio
del procedimiento, aunque también pueden ser declaradas en otros puntos del mismo.
Ejemplo:
Sub Macro1()
Dim valor1 as Integer, valor2 as Integer
Dim cadena1 as String
'otras instrucciones
End Sub
Variables Públicas:
Son las que estarán disponibles para todos los procesos, sus valores pueden ser utilizados en
cualquier módulo.
Se declaran como Public. Recomiendo utilizar un módulo especialmente destinado a la
declaración de estas variables lo que facilitará su ubicación.
Si se declararán en un módulo utilizado para otro procedimiento deberán ser las primeras
instrucciones
Ejemplo:
Option Explicit
Public minro as Byte
Sub Macro2()
'instrucciones
End Sub
Constantes:
A diferencia de las variables que modifican sus valores durante la ejecución de un proceso, las
Constantes mantienen su valor. También pueden ser Locales o Públicas
Ejemplo:
Const dia as Integer
Public Const cadena1 as String
IV
4 - Trabajando con Cadenas 28
Para extraer partes de una cadena, ya sea el contenido de una celda, una variable o el
resultado de un InputBox, contamos con las siguientes funciones:
También podemos utilizar la función InStr conjuntamente con Mid para obtener una cadena a
partir de cierto caracter.
En el ejemplo se trata de obtener el apellido sabiendo que se ubica después del caracter 'espacio'
Sub variables()
Dim esp As integer
Dim apellido As String
Dim cadena As String
cadena = "Juan Perez"
'se obtiene la ubicación del espacio
esp = InStr("Juan Perez", " ")
'se obtiene la cadena a partir de la posición del espacio
apellido = Mid(cadena, esp)
'se muestra el resultado
MsgBox apellido
End Sub
V
31 Manual 400 Macros Plus
En el tema anterior hemos visto que la función MkDir crea una carpeta en el directorio
predeterminado de archivos Excel, si no especificamos otra ruta.
Para conocer desde una macro esa ruta (la que se establece desde el menú Herramientas,
Opciones, General del libro Excel) utilizaremos la función CurDir.
Sub ConoceDir()
Dim miRuta
'obtenemos la ruta de acceso predeterminado
miRuta = CurDir()
'mostramos el resultado en un mensaje
MsgBox miRuta
'otras instrucciones
End Sub
VI
6 - Trabajando con Libros 34
6.7 Impedir que se abran otros libros mientras esté nuestro libro
abierto
Se puede forzar a que todo el libro sea cargado en mayúsculas con la expresión Ucase (o
minúsculas con Lcase), que al ser colocada en el objeto ThisWorkbook será de aplicación para
todas las hojas
End If
End Sub
Atención: si una celda tiene una fórmula que devuelve texto, al ser convertida en maýusculas
pierde su condición de fórmula quedando solo el texto como valor.
Para evitar esto podemos realizar la consulta con esta instrucción en lugar de la línea en verde
en la rutina anterior :
Para ser utilizada en una sola hoja, no en todas, en lugar de colocar la rutina en el objeto
ThisWorkbook, colocarla en la hoja deseada, seleccionándola entre los objetos que se
encuentran en la ventana del margen izquierdo, por ejemplo: Hoja1 (Hoja1)
La rutina entonces será:
End If
End Sub
Nota: de la misma manera se puede forzar al uso de minúsculas reemplazando Ucase con
Lcase
Atención: ver otra rutina para convertir mayúsculas o minúsculas en el capítulo 12:
Controlando Teclas....., Ejecutar macro al presionar Enter
VII
7 - Trabajando con Hojas 42
Las instrucciones para el manejo de Hojas, pueden ser incluídas en cualquier punto de nuestras
rutinas, ya sea que las tengamos en módulos o en ciertos eventos como por ejemplo en el evento
Open del libro.
Métodos
Calculate Calcula todos los libros abiertos, una hoja de cálculo específica de un libro o un
rango determinado de celdas de una hoja, como se muestra en la tabla siguiente:
ChartObjects Devuelve un objeto que representa un único gráfico incrustado (un objeto
ChartObject) o una colección de todos los gráficos incrustados (un objeto
ChartObjects) de la hoja.
PivotTables Devuelve un objeto que representa un solo informe de tabla dinámica (un objeto
PivotTable) o una colección de todos los informes de tabla dinámica (un objeto
PivotTables) de una hoja de cálculo. Sólo lectura.
PivotTableWizard Crea un nuevo informe de tabla dinámica. Este método no muestra el Asistente
para tablas dinámicas. No está disponible para orígenes de datos OLE DB. Use el
método Add para agregar una caché de tabla dinámica y crear a continuación un
informe de tabla dinámica basado en la caché.
XmlDataQuery Devuelve un objeto Range que representa las celdas asignadas a una
determinada expresión XPath. Devuelve NothingNothing si la expresión XPath
especificada no se ha asignado a la hoja o si el rango asignado está vacío.
XmlMapQuery Devuelve un objeto Range que representa las celdas asignadas a una
determinada expresión XPath. Devuelve NothingNothing si la expresión XPath
especificada no se ha asignado a la hoja.
VIII
51 Manual 400 Macros Plus
Hemos visto en el capítulo 2 que una propiedad es la característica de un objeto (rango, celda,
objetos, otros)
Para ver ejemplos de cada uno de estas propiedades ingresarla como tema en la Ayuda de Excel
También puede utilizar el buscador de este manual
Hiperlinks Devuelve una colección Hiperlinks que representa los vínculos del rango
Interior Permite trabajar con el interior de una celda (color o trama)
Left Establece el margen izquierdo de una celda o rango
Locked Indica si un objeto o rango se encuentra bloqueado
MergeArea Indica si la celda se encuentra en un rango combinado
MergeCells Indica si un rango contiene celdas combinadas
Name Devuelve el nombre de un objeto
Next Devuelve un objeto Range que representa la celda siguiente
NumberFormat Establece el formato de una celda o rango
Offset Permite desplazarse en forma relativa con respecto a una celda o un rango
PageBreak Permite establecer dónde se hará el salto de página
Previous Devuelve la celda anterior
Resize Permite redefinir el tamaño de un rango
Row Posición de fila en la que empieza el Rango
Rows Filas que componen un rango
Style Indica el estilo del rango
Text Texto contenido en las celdas de un rango
Top Establece el valor tope de una celda
Validation Devuelve un objeto que representa la validación de datos para un rango
Value Valor contenido en las celdas de un rango
VerticalAlignment Permite establecer la orientación vertical
Width Indica el ancho de un objeto
En las hojas siguientes encontrarán ejemplos del uso de cada uno de estos temas.
Si por ejemplo tenemos una lista que va desde B2 hasta H20, la instrucción siguiente selecciona
el rango completo
Range("B2").CurrentRegion.Select
Una región comprende celdas aledañas hasta encontrar celdas vacías, tanto hacia la derecha
como hacia abajo.
IX
9 - Bucles: Instrucciones o Comandos Especiales 62
La expresión 'For Each Next' permite recorrer todas las ocurrencias que componen un
objeto.
Sintaxis:
Por ejemplo: Recorrer todas las hojas de un libro (hoja/Worksheets), recorrer las celdas de un
rango (celda/Range) o los libros abiertos (libro/Workbooks)
Sub RecorreCeldas()
Dim celda As Range
Dim rango As Range
End If
End Sub
Nota: con la pestaña 'Buscar' de este manual, podrán encontrar otros ejemplos del uso de este
comando.
X
10- Trabajando con fórmulas 66
Si la versión de Excel es en español y así aparecen las funciones en la barra de fórmulas, para
colocarlas en el Editor es necesario conocer las versiones en inglés de las funciones a utilizar.
Por eso lo mejor es grabar una macro con la grabadora
(* Ver capítulo Introducción- Cómo crear una macro), y luego ajustar las referencias.
Sub formula1()
Range("K10").Formula = "=+SUM(A1:J10)-SUM(K11:K12)"
End Sub
Sub formula2
ActiveCell.Formula = "=+INDEX(C:C,MATCH(F2,E:E,0))"
End Sub
XI
69 Manual 400 Macros Plus
Por Objeto Insertado hago referencia a los objetos de la Barra de Herramientas Cuadro de
Controles o Formulario, como así también a los que se insertan con la Barra de Dibujo
(Autoformas, Imagen, etc).
Estos objetos se denominan Shapes o Pictures para las imágenes
Los ejemplos que encontrarán a continuación pueden adaptarse a cualquier objeto dentro de la
misma categoría, siguiendo las propiedades propias de cada uno.
Las siguientes rutinas, son generales para cualquier control (ComboBox, Listbox, etc). Solo se
deberá reemplazar la expresión 'ComboBox' por 'ListBox' o el que corresponda.
Pero debemos tener en cuenta qué barra utilizamos para dibujar el control.
Nota: para conocer el nombre del objeto dibujado con esta barra, selecciona el mismo con clic
derecho. A la derecha de la barra de fórmulas, aparecerá en el Cuadro de nombres, el nombre
del control.
También haciendo clic derecho sobre el control, opción 'Asignar Macro' se verá en la ventana
emergente el nombre del control. Luego cancelar esta ventana.
El tema no se e
11.2.14 Buscar valor del Combo en base Devolver otros datos en textbox
11.4 Imágenes
11.4.1 Cargar una imagen cuyo nombre se encuentra en una celda
XII
75 Manual 400 Macros Plus
Si se desean evitar los mensajes de alerta que Excel pueda enviar al ejecutar una macro, utilizar
la propiedad DisplayAlerts con valor False
Application.DisplayAlerts= False
Esta línea, colocada delante de las instrucciones que posiblemente puedan devolver un mensaje
de alerta, hará que no se muestre el aviso y si necesita una respuesta por parte del usuario Excel
tomará su valor predeterminado.
Ejemplo:
Sub eliminaHoja()
'evita que se exhiba el mensaje de alerta
Application.DisplayAlerts = False
'elimina la hoja
Sheets(3).Delete
End Sub
XIII
79 Manual 400 Macros Plus
Un buen programa debe controlar los posibles errores imprevistos que pueden aparecer al
ejecutarse el mismo, y que permitan seguir o cancelar el proceso normalmente.
Por ejemplo, antes de la instrucción Print (imprimir) se debe agregar una instrucción que
controle el error que puede producirse si el sistema no encuentra una impresora instalada.
Las principales instrucciones para control de errores que veremos en este capítulo, deben ser
colocadas en las rutinas de Impresión, Apertura y guardado de libros, al insertar objetos como
imágenes, que son las que con mayor frecuencia originan errores en las macros.
Ejemplo:
Sub miMacro()
On Error Resume Next
Intrucción 1
Instrucción 2
End Sub
El incluir la sentencia On Error Resume Next antes de la instrucción 1 implica que si se produce
algún error el programa lo ignorará y continuará con la instrucción siguiente.
13.4 Err
XIV
81 Manual 400 Macros Plus
El método para manipular las pestañas de las hojas es: DisplayWorkbookTabs, que con valores
en True o False las mostrará o las ocultará.
Ejemplo:
Sub muestrahojas ()
'ocultar las pestañas
ActiveWindow.DisplayWorkbookTabs = False
End Sub
XV
85 Manual 400 Macros Plus
XVI
87 Manual 400 Macros Plus
Los InputBox muestran un mensaje en un cuadro de diálogo, esperan que el usuario escriba un
texto o haga clic en un botón y devuelve un tipo String con el contenido del cuadro de texto.
Sintaxis:
Title Opcional. Expresión de cadena que se muestra en la barra de título del cuadro de diálogo.
Si omite title, en la barra de título se coloca el nombre de la aplicación.
Default Opcional. Expresión 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 vacío.
xpos Opcional. Expresión numérica que especifica, en twips, la distancia en sentido horizontal
entre el borde izquierdo del cuadro de diálogo y el borde izquierdo de la pantalla. Si se omite
xpos, el cuadro de diálogo se centra horizontalmente.
ypos Opcional. Expresión numérica que especifica, en twips, la distancia en sentido vertical entre
el borde superior del cuadro de diálogo y el borde superior de la pantalla.
Helpfile Opcional. Expresión de cadena que identifica el archivo de Ayuda que se utilizará para
proporcionar ayuda interactiva para el cuadro de diálogo. Si se especifica helpfile, también
deberá especificarse context.
Context Opcional. Expresión numérica que es el número de contexto de Ayuda asignado por el
autor al tema de Ayuda correspondiente. Si se especifica context, también deberá especificarse
helpfile.
Sub SolicitoClave()
Dim miClave as String
miClave = InputBox("Ingrese Clave", "*** Solicitud ***")
'si la clave es correcta
If miClave = "Macros" then
'se desproteje la Hoja2
Sheets("Hoja2").Unprotect
End If
End Sub
Sheets("Hoja2").Unprotect miclave
XVII
17- Buscando Datos 90
Esta rutina elimina datos duplicados. Se recorre una columna, que puede estar en otra hoja o
en la misma. Si los datos se encuentran en la otra lista se borra la fila del dato encontrado.
Este ejemplo es útil cuando se tienen 2 tablas con los mismos datos y se desea conservar solo los
datos únicos.
Sub EliminaDuplicados()
Dim rango As String
Dim dato As String
Dim midato As Object
Dim fila As Byte
'rango donde se efectuará la búsqueda
rango = "F2:F15"
'se recorre la columna D hasta la primer celda vacía
Range("A2").Select
While ActiveCell.Value <> ""
'el contenido de la celda será el dato a buscar
dato = ActiveCell.Value
'se busca en el rango indicado
Set midato = ActiveSheet.Range(rango).Find(dato, LookIn:=xlValues, LookAt:=xlWhole)
'si la búsqueda es exitosa.....
If Not midato Is Nothing Then
'se guarda el número de fila en la variable
fila = ActiveCell.Row
'se borra el contenido del rango A:C de esa fila
Range("A" & fila & ":C" & fila).Delete
Else
'si el dato no fue encontrado se pasa a la celda siguiente
ActiveCell.Offset(1, 0).Select
End If
'se repite el proceso
Wend
Set midato = Nothing
End Sub
XVIII
18- Evaluando y Comparando Datos 94
Si efectuamos cálculos con una macro, podemos necesitar evaluar si el resultado de una celda
presenta error, como por ejemplo un valor no encontrado con la función Buscar o como
resultado de una división por 0.
Ejemplo:
If IsError(ActiveCell.Value) Then
'instrucciones para cuando el resultado es error
else
'instruciones si no da error
End If
18.6 Eliminar fila si varios datos del registro cumplen una condición
XIX
19- Copiando Datos 98
Para realizar una copia con Pegado Especial, con la opción que presenta el menú Edición: solo
valores, este es el código:
Sub PegarValor()
'previamente se habrá seleccionado el rango a copiar
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
'inhabilita el modo Copiar/Pegar
Application.CutCopyMode = False
End Sub
Lo que logramos con estas instrucciones es dejar una celda que contiene fórmulas, solo con su
valor, copiando y pegando sobre sí misma.
19.8 Copiar cierta fila en otro libro. Conocer última fila con datos
19.10 Duplicar una hoja- La copia tendrá los valores, no las fórmulas
XX
20- Uso de Temporizador 102
Para realizar tareas automáticamente en cierto tiempo, se utiliza el método OnTime, cuya
sintaxis es la siguiente:
Ejemplos:
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
Procedure:="mi_rutina", Schedule:=False
XXI
105 Manual 400 Macros Plus
Esta rutina aplica un Filtro Avanzado y copia las celdas resultantes en otro destino.
Para utilizarla solo deberá modificar las ubicaciones de los datos. En el ejemplo se utilizó las filas
1 y 2 para los criterios, y la base se encuentra desde A4 hasta C10. El destino del rango a
copiar es la misma hoja desde A14. (* para copiar en otra hoja Ver Notas)
Sub FiltroAvanzado()
'seleccionar una celda de la base a filtrar
Range("A4").Select
'establecer el rango de la base, las filas donde se encuentran los criterios y las celdas de
destino
Range("A4:C10").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"A1:B2"), CopyToRange:= Range("A14:C14"), Unique:=False
End Sub
Notas: si el destino será otra hoja modificar la instrucción anterior donde dice:
CopyToRange:= Range("A14:C14")
por la siguiente:
CopyToRange:= Sheets("Hoja3").Range("A14:C14")
XXII
109 Manual 400 Macros Plus
Este ejemplo modifica las dimensiones de todos los gráficos que se encuentren en una hoja.
Sub DimensionandoGraficos()
Dim grafico As ChartObject
'recorre todos los gráficos de la hoja activa
For Each grafico In ActiveSheet.ChartObjects
'modifica alto y ancho (*ver Notas)
grafico.Height = 200
grafico.Width = 250
Next
End Sub
Notas: otras aplicaciones para esta rutina: eliminar todos los gráficos, copiarlos en otra hoja,
ajustar colores, etc
XXIII
113 Manual 400 Macros Plus
El ejemplo muestra además los valores para ser ubicado el formulario en el extremo izquierdo o
derecho
Esta rutina se colocará haciendo doble click sobre el formulario para pasar a la sección código.
XXIV
24- Trabajando con Tablas Dinámicas 118
Sub totalTD()
'se selecciona el campo a devolver
ActiveSheet.PivotTables("Tabla dinámica3").PivotSelect "Total 'Suma de TOTAL3'",
xlDataOnly, True
Nota: Observar que se está trabajando con una tabla denominada Tabla dinámica3 y cuenta
con un campo denominado Suma de TOTAL3
XXV
121 Manual 400 Macros Plus
25 25- Impresión
25.1 Imprimir hojas
En el objeto ThisWorkbook (Este Libro) colocar la siguiente rutina que impide que se ejecute
tanto Vista Previa como la impresión de todo o parte del documento.
XXVI
26- Trabajando con el entorno Excel 124
La siguiente rutina nos devolverá un listado con el nombre de todas las rutinas que contiene
el libro activo.
Esto también se puede lograr con otros libros. En ese caso reemplazar el término
'ActiveWorkBook' por el nombre del libro que deseamos revisar.
La información puede ser devuelta en MsgBox o si estimamos que la lista será extensa, podemos
colocar los valores en celdas como se programó este ejemplo.
Sub ListadoSubrutinas()
Dim linea, inicio As Integer
Dim linea1 As String
Dim objeto As Object
'se analiza cada objeto del proyecto activo
For Each objeto In ActiveWorkbook.VBProject.VBComponents
'se analiza si el objeto = 1 (modulo). Otros objetos son: 2=class, 3= Userform, 100 = Hojas
If objeto.Type = 1 Then
'se recorren las líneas del primer módulo hasta el total de líneas
For linea = 1 To objeto.CodeModule.CountOfLines
linea1 = objeto.CodeModule.Lines(linea, 1)
'se remueven los espacios iniciales
linea1 = Trim$(linea1)
'analizamos si se trata de una Sub-rutina
If Left$(linea1, 3) = "Sub" Then
'se calcula el largo hasta ()
inicio = InStr(linea1, "()")
If inicio > 0 Then
'se guarda el nombre en la celda
ActiveCell.Value = Mid$(linea1, 4, inicio - 4)
ActiveCell.Offset(1, 0).Select
End If
End If
Next linea
End If
Next objeto
End Sub
IMPORTANTE: En versión Excel 2007, para poder tener acceso al objeto VBProyect, se requiere
configurar la opción desde el Centro de Confianza.
Pasos a seguir:
1- Desde la hoja, botón de Office, Opciones de Excel, Centro de confianza.
2- Presionar botón: Configuración del Centro de confianza.
3- De la lista seleccionar Configuración de Macros y tildar la opción 'Confiar en el acceso
al modelo ......'
XXVII
27- Trabajando con otras aplicaciones 130
Sub ExcelWord()
'copia el rango seleccionado previamente
Selection.Copy
End Sub
NOTA: Esta rutina copia las celdas seleccionadas y las pega como TABLA en Word
XXVIII
28- Creando Complementos 134
XXIX
29- Funciones definidas por Usuario (UDF) 136
Hemos visto hasta ahora cómo escribir rutinas que se ejecutan ante ciertos eventos (como abrir y
cerrar libros, al cambiar de hojas, etc) o al ser llamadas por el usuario (al clic en un botón, por
atajo de teclado o desde menú Herramientas, Macros) para que realice alguna tarea especial.
Una función en cambio, es código creado para devolver un valor en una celda, de la misma
manera que cuando escribimos en la hoja Excel:
=Promedio(argumentos)
Las funciones personales, cuando son colocadas en un módulo del libro, solo podrá ser
utilizada en este libro.
Atención: Recomiendo dar un nombre al módulo para reconocer rápidamente su contenido. Para
ello, seleccionar el módulo y modificar su propiedad Name.
Cuando son colocadas en módulos de un libro que luego se guarda como complemento (xla o
xlam) según lo visto en el capítulo anterior, podrán ser utilizadas desde cualquier libro Excel
(ver pasos en capítulo anterior)
Para utilizarlas, presionar el botón Funciones, (Más funciones) y buscar las de la categoría
'Definidas por el usuario'
En Excel 2007, buscar en la tira de opciones la ficha Fórmulas, y allí la primer opción:
Insertar Función . Luego buscar la categoría Definidas por usuario.
XXX
141 Manual 400 Macros Plus
Esta es una tarea frecuente: tener 2 Combobox donde el segundo mostrará valores según la
opción elegida en el primero.
En primer lugar será necesario tener distintas listas por cada categoría que mostrará el primer
Combobox.
Estas listas pueden ser colocadas en otra hoja , asignándoles a cada una un nombre de rango
(ver *)
Else
'se asigna el otro rango
ComboBox2.ListFillRange = "J1:J7"
End If
End Sub
Nota: Para asignar un nombre de rango a cada lista, seleccionarla y seguir estos pasos según la
versión:
1- hasta Excel 2003 incluído: menú Insertar, Nombre, Definir. Escribir un nombre que sea
claro de identificar y Aceptar.
2- para Excel 2007: ficha Fórmula, Asignar nombre a un rango o Administrador de
nombres desde el grupo Nombres Definidos.