2
VBA Excel GuĂa Esencial By Luis E Brito Copyright 2016 - 2017
3
Copyright Š 2016 by Luis E Brito All rights reserved. This book or any portion thereof may not be reproduced or used in any manner whatsoever without the express written permission of the publisher except for the use of brief quotations in a book review.
4
Contenido Otros Libros Publicados por Luis E Brito Introducción Capítulo 1 - El Editor de Visual Basic (VBE) Capítulo 2 - Trabajando con Módulos Capítulo 3 - Macros y Procedimientos Capítulo 4 - Interactuando con la Ventana de Código Capítulo 5 - El modelo de Objetos de Excel Capítulo 6 - Propiedad Range Capítulo 7 - Procedimientos en VBA: Subs y Funciones Capítulo 8 - Variables Capítulo 9 - Expresiones y Operadores Capítulo 10 - Estructuras de Flujo Capítulo 11 - Entrada y Salida de Datos Capítulo 12 - Arreglos (Arrays)
5
CapĂtulo 13 - Cargando los Arreglos con Datos CapĂtulo 14 - Aplicaciones de VBA Acerca del autor
6
Otros Libros Publicados por Luis E Brito VBA Excel Guía Esencial
Amazon US https://www.amazon.com/dp/B01M8K5120 Amazon México https://www.amazon.com.mx/dp/B01M8K5120
7
VBA Excel Modelo de Objetos
Amazon US https://www.amazon.com/dp/B01M674D09 Amazon México https://www.amazon.com.mx/dp/B01M674D09
8
VBA Excel UserForms
Amazon US https://www.amazon.com/dp/B01N63S43C Amazon México https://www.amazon.com.mx/dp/B01N63S43C
9
Introducción VBA para Excel es un programa que funciona detrás de bastidores cuando se utilizan cualquiera de los comandos en las hojas de Excel. Entre unas de las funcionalidades es la de permitir la grabación de acciones que se ejecutan en la hoja. Las acciones se convierten en instrucciones que se guardan en contenedores de código denominados macros, y que están delimitados entre las instrucciones Sub y End Sub. Estos macros pueden ser ejecutados nuevamente y repiten las acciones grabadas, lo que permite automatizar tareas repetitivas y tediosas. Además de la creación de macros, VBA proporciona una interfaz gráfica, el editor de Visual Basic, VBE, el cual permite la edición de los macros creados con el grabador y la creación de procedimientos mediante la introducción de código directamente por el programador. El VBA es una derivación del BASIC, y retiene gran parte de los comandos y estructura de este
10
lenguaje. Así que una revisión de las estructuras del lenguaje BASIC es importante. La otra característica fundamental es que VBA es un programa orientado a objeto (OOP), el cual tiene un modelo de objetos específico para cada aplicación, donde existe una jerarquía y donde los objetos tienen propiedades y métodos. El modelo de objetos que maneja VBA para Excel y sus propiedades y métodos es tan extenso que a veces el usuario principiante queda abrumado. Sin embargo, no es necesario aprender toda la cantidad de objetos, propiedades y métodos, existe un reducido número de objetos que son esenciales, los cuales debemos aprender primero, y luego poco a poco ir añadiendo objetos, propiedades y métodos a medida que lo vayamos requiriendo. Por otra parte, el ambiente VBE proporciona varias ayudas como el examinador de objetos y las facilidades de revisión automática de sintaxis y generación de lista de propiedades y métodos aplicables a los objetos utilizados. El primer contacto con cualquier material que deseamos aprender nos genera cierta resistencia, y de buenas a primeras nos resultara difícil asimilar, así que debemos tener paciencia y
11
volver una y otra vez sobre el mismo tema, hasta que nos resulte familiar. Espero que el siguiente material sea de utilidad y te permita una comprensiรณn rรกpida de lo esencial de VBA para Excel, para que lo puedas utilizar de manera mรกs productiva.
12
Capítulo 1 - El Editor de Visual Basic (VBE) El editor de Visual Basic es el ambiente grafico donde se crean o se editan los procedimientos. Para poder tener acceso al editor de VBA, primero hay que activar el menú de Desarrollador, para que este aparezca en la cinta de menú de la hoja de Excel. Para hacer esto hay que ir a las opciones de Excel y seleccionar Personalizar cinta de opciones. Allí hay que activar en la casilla la opción Desarrollador. La secuencia es Archivo y seleccionar Opciones
13
En opciones de Excel, seleccionar personalizar cinta de Opciones y activar Desarrollador.
Esto permitirá el acceso al menú de Desarrollador en la cinta de menú.
En la cinta de Desarrollador aparecen los grupos de comandos para: Código, Complementos, Controles y XML. De momento estamos interesados en el grupo de Código.
14
En el grupo Código podemos observar el icono de Visual Basic, al hacer clic en este icono se desplegará el editor de Visual Basic.
En la figura se pueden observar la ventana de código, la ventana de inmediato, la ventana de propiedades y la ventana del explorador de Proyectos. En el explorador de proyectos se presentan los libros abiertos, con sus hojas, los módulos y los formularios si los hubiesen. En la ventana de propiedades se presentan las propiedades que tiene el elemento seleccionado. En este caso el elemento seleccionado es un módulo, Módulo1.
15
La ventana de inmediato es una ventana donde se pueden obtener resultados preliminares al correr el código, de momento no discutiremos esta ventana, lo cual abordaremos en capítulos posteriores cuando estemos introduciendo código. La ventana de código es donde se muestra la hoja del módulo activo, y se ingresan las instrucciones para los procedimientos que estemos creando.
16
Capítulo 2 - Trabajando con Módulos Un módulo es una hoja donde se crean los procedimientos. Un módulo puede contener uno o varios procedimientos, no es necesario crear un módulo por cada procedimiento, ni tampoco crear un solo modulo para que contenga todos los procedimientos. Si se está trabajando en un proyecto grande, se pueden crear diferentes módulos para que almacenen procedimientos relacionados y sea más fácil su ubicación cuando se desee editarlos. Insertando Módulos Para insertar un módulo se puede utilizar el menú desplegable del icono de insertar, o se puede desplegar el menú insertar de la pestaña de la barra de menú.
17
En el menú insertar aparecen varios elementos que pueden ser insertados, seleccionar módulo y se insertará un nuevo módulo cuyo nombre será Modulo, seguido de un número que es consecutivo.
Si no existen módulos se creará el Módulo1 y si se crea otro módulo tendrá como nombre Módulo2.
18
Cambiando el Nombre de los MĂłdulos Los nombres que se crean por defecto no son muy descriptivos, por lo que se recomienda cambiar el nombre por otro nombre que nos de cierta indicaciĂłn sobre su contenido. Para cambiar el nombre se selecciona el modulo, haciendo clic sobre ĂŠl en el explorador de proyectos, luego en la ventana de propiedades ir a la propiedad Name y cambiar el nombre por el que se desea.
19
Los nombres de los módulos pueden contener letras en mayúscula o minúscula y números, pero no pueden contener espacios. Se debe comenzar con una letra, no con números. Si se quieren colocar nombres descriptivos con más de dos palabras, los espacios vacíos pueden ser manejados de dos formas: sustituyendo el espacio con una barra piso o eliminando el espacio vacío y colocar el inicio de cada palabra en mayúscula. Por ejemplo, si necesitamos un nombre de módulo como cálculo de resistencia de materiales. Podríamos utilizar: Calculo_resistencia_materiales CalculoResistenciaMateriales
20
Eliminando Módulos Para eliminar un módulo hay que seleccionarlo y hacer clic en el botón derecho, aparecerá un menú desplegable, y hacer clic sobre la opción de Quitar.
Al hacer clic aparecerá una caja de dialogo preguntando si queremos exportar el modulo antes de quitarlo.
Si la respuesta es Sí, aparecerá un cuadro de dialogo para guardar el modulo como un archivo
21
con extensión .bas. El cual es un archivo de texto con los códigos de los procedimientos contenidos en el módulo. Esta es una medida de seguridad, por si necesitamos restaurar el módulo posteriormente. Al guardar el archivo tipo bas el modulo se eliminará del proyecto.
Si la respuesta es No, el módulo será eliminado al hacer clic sobre esta opción. La otra opción es Cancelar, la cual no ejecuta la acción de eliminar. Otra forma de eliminar un módulo es utilizando la barra de menú y seleccionar la pestaña Archivo y allí seleccionar Quitar. A partir de aquí el procedimiento es igual al método ya descrito. Importar y Exportar Módulos Ya vimos que cuando queremos eliminar un módulo, VBA nos pregunta si queremos exportar el módulo. Pero también existe la opción de
22
exportar el mรณdulo, sin necesidad de quitarlo, y guardarlo en una carpeta de nuestra preferencia para ser utilizado posteriormente. El mรณdulo, como ya vimos, se guarda como un archivo de texto con extensiรณn .bas, el cual puede ser editado con cualquier programa editor de texto, como el bloc de notas. Si tenemos un mรณdulo, el cual previamente hemos guardado como un archivo .bas en una carpeta, podemos importarlo al proyecto activo y utilizarlo. El archivo se importarรก y tomarรก el nombre de Mรณdulo1, si ya existe un mรณdulo con este nombre tomarรก el nombre secuencial siguiente. Para usar las acciones de importar y exportar tenemos dos formas: utilizando el menรบ contextual al hacer clic en el botรณn derecho del ratรณn y seleccionar Importar Archivo o Exportar Archivo. Cuando deseamos exportar un mรณdulo, debemos seleccionarlo primero en el explorador de proyectos.
23
La otra forma es: (1) hacer clic en la pestaña Archivo de la barra de menú y (2) seleccionar Importar archivo o Exportar archivo.
Copiando Módulos entre Proyectos Abiertos Si tenemos un libro con algún modulo que contiene procedimientos que deseamos copiar en el libro en el que estamos trabajando, podemos abrir ambos libros en la misma sesión y
24
simplemente hacer clic sobre el modulo y arrastrarlo de un proyecto a otro. En la figura se observa el explorador de proyectos con dos proyectos abiertos: Proyecto A.xslm y Proyecto B.xslm. En el proyecto A tenemos el mรณdulo Funcion_Gamma, el cual deseamos copiar al Proyecto B.
Simplemente hacemos clic sobre el mรณdulo Funcion_Gamma que estรก en el Proyecto A (origen) y lo arrastramos hasta el Proyecto B (destino). Al final tendremos el mรณdulo Funcion_Gamma en ambos proyectos.
25
26
Capítulo 3 - Macros y Procedimientos Que es un Macro Los términos macros y procedimientos se utilizan intercambiablemente, sin embargo, algunos autores establecen que la diferencia básica es que los macros están constituidos por líneas de código generados por el grabador de macros. Tienen un flujo lineal y no incluyen estructuras de control de flujo para la toma de decisiones, ni estructuras repetitivas. En esencia permiten ejecutar acción tras acción en forma lineal hasta alcanzar el final de las instrucciones. El grabador de Macros permite grabar un conjunto de acciones cuando estas se ejecutan dentro de la aplicación, en el caso específico que estamos tratando, Excel. Las instrucciones de los macros se graban dentro de un módulo, utilizando el lenguaje Visual Basic para Aplicaciones. El código generado por el grabador de macros está contenido dentro de las declaraciones Sub
27
Nombre del Macro y End Sub y puede ser visto y editado de ser necesario entrando en el editor de Visual Basic para Aplicaciones, VBE. Que es un Procedimiento Los procedimientos son aquellos donde el código es generado por el usuario en el editor de Visual Basic (VBE). Estos procedimientos pueden ser de tipo Sub o pueden ser funciones. En los procedimientos se incluyen estructuras de programación como toma de decisiones, estructuras cíclicas entre otras, los cuales permiten realizar tareas de mayor complejidad. Como Grabar un Macro Antes de realizar el proceso de grabar un macro hay que planificar las acciones que deseamos ejecutar y grabar. Las acciones pueden ser tan simples como insertar información en celdas, dar formato, copiar, cortar, pegar, o acciones más complejas como insertar gráficos, ordenar listas y tablas y en general cualquiera de las acciones que se muestran en la cinta de menú de Excel. Luego iniciamos la grabación del macro, haciendo clic en el icono de grabar macro que
28
está dentro del grupo Código en la pestaña Desarrollador.
Al hacer clic en el icono de Grabar macro se inicia la grabación de todas las acciones que ejecutemos con la aplicación. Al finalizar debemos hacer clic para detener la grabación haciendo clic sobre el mismo icono que utilizamos para iniciar la grabación. Otra forma de iniciar o detener la grabación de un macro es haciendo clic sobre el icono que aparece en la barra de notificación, en la parte inferior de la ventana.
Ejemplo Sencillo del Uso del Grabador de Macros
29
Hagamos un ejemplo simple, solo para ver la mecánica de la grabación de macros. Coloquemos las etiquetas de los meses enero, febrero y marzo y demos formato resaltado (bold). Activamos el grabador de macros y aparecerá el siguiente cuadro de dialogo, para indicar el nombre del Macro, El método Abreviado, el cual es el conjunto de teclas que deben pulsarse con Ctrl para ejecutar el macro. Donde se guardará el macro y la descripción del macro.
Al hacer clic en aceptar se comienzan a grabar todas las acciones que ejecutemos con la aplicación. Comenzamos colocando el Texto Enero en la celda A2, luego y luego Febrero en B2 y Marzo
30
en C2. Seleccionemos el rango A2:C2 y demos formato resaltado. Al finalizar hacemos clic para detener la grabación, ya sea en el icono en la cinta de menú, o en el icono en la barra de notificación Si queremos ver el macro que se ha grabado activamos el VBE, seleccionando la pestaña Desarrollador y haciendo clic en el icono Visual Basic. El resultado se puede ver en la siguiente figura
El macro está dentro de un contenedor (Shell), que comienza con la declaración Sub que incluye el nombre del macro, seguido de un par de paréntesis. Aquí, la declaración Sub es simplemente Sub Nombre_del_Macro() y finalizan con el comando End Sub. Debido a que este macro fue grabado, existe una serie de líneas de comentarios debajo de la
31
declaración Sub que genera automáticamente VBA. Por ejemplo, veras el nombre del macro, la descripción del macro que hayas introducido en la caja de diálogos, y la notación de las teclas de atajo que le hayas asignado al macro. Las líneas de comentarios comienzan con un apostrofe, son de color verde lo que las distingue de las líneas de códigos. Las líneas de comentarios no son ejecutables a diferencia de las líneas de códigos que realizan alguna acción cuando el macro es ejecutado. Las demás líneas en el macro son declaraciones VBA, y representan cada acción que se realizó mientras que el grabador de macro estaba encendido. El código al principio nos parecerá incomprensible, pero simplemente se refieren al objeto Range, para referirse a las celdas A2, B2 y C2. En cada caso se selecciona la celda con Select. Range("A2").Select. Selecciona la celda A2 y la convierte en la celda activa.
32
ActiveCell.FormulaR1C1 = "Enero". Coloca en la celda activa el texto. ActiveCell se refiere a la celda activa y FormulaR1C1 es una propiedad para introducir un valor o una formula en la celda. En definitiva, la declaraciรณn coloca el nombre del mes en la celda activa. Finalmente seleccionamos el Rango A2:C2 y se convierte en el objeto Selection, al cual le aplicamos la propiedad Font y la propiedad Bold y colocamos igual a True para indicar que queremos que la selecciรณn tenga la propiedad font con resaltado. Range("A2:C2").Select. Se crea un rango y se selecciona. Selection.Font.Bold = True. El rango seleccionado es el objeto Selection, y se le aplica la propiedad font, a la cual se le aplica la propiedad Bold. Para ejecutar el macro, hacemos clic en el icono macro o presionamos la combinaciรณn de teclas Alt+F8, y aparecerรกn los macros que han sido creados en los libros abiertos. Seleccionamos el
33
macro que deseamos ejecutar y hacemos clic en ejecutar
Se repetirรกn las acciones grabadas y los textos y formatos serรกn copiados en la hoja activa, tantas veces como se desee. Este es un ejemplo muy sencillo, pero da la idea de la utilidad de los macros, permitir repetir un conjunto de acciones de manera rรกpida.
34
Mejorando un Macro con Comentarios y Optimizando el código El grabador de Macro por lo general crea mucho más código del que es requerido para ejecutar las acciones. La función del grabador de Macro, y la cual la ejecuta impecablemente, es la de producir código VBA que representa cada una de las acciones en la pantalla. Para Macros que son sencillos, es posible que no se requiera hacer el proceso de edición y si el macro hace la tarea que debe hacer es mejor dejarlo así. Sin embargo, la mayoría del código VBA que es producido por el grabador de Macros, es de naturaleza excesiva y superflua, lo que es difícil de ignorar. Y si este código va a ser compartido
35
con otros, desearías que tuviera un aspecto pulido y profesional. Una recomendación general en VBA es no seleccionar (Select) o activar (Activate) objetos a menos que sea necesario. Los métodos Select y Activate son responsables de ralentizar la ejecución de los macros. Por ejemplo, en estas dos líneas de macro: Columns (“A:A”).Select Selection. Insert Shift:=xlToRight Estas líneas pueden y deben ser consolidadas en una línea, evitando la actividad de seleccionar. Columns (“A:A”). Insert Shift:=xlToRight Lo mismo puede decirse de las siguientes dos declaraciones: Columns(“C:C”). Select Selection.Cut Destination:=Columns(“A:A”) Lo cual puede ser expresado de una manera más compacta Columns(“C”).Cut Destination:=Columns(“A”)
36
En VBA se puede actuar directamente en la mayorĂa de los objetos, la mayorĂa de las veces, sin la necesidad de seleccionarlos.
37
Capítulo 4 - Interactuando con la Ventana de Código En la ventana de código se despliega el módulo activo, el cual es el módulo que se ha seleccionado y en el cual podemos introducir instrucciones para crear un procedimiento. En este capítulo nos dedicaremos a introducir algunos códigos, sin entrar en los detalles sobre lo que son los procedimientos, lo que dejaremos para el próximo capítulo. Vamos a abrir un libro de Excel y lo vamos a llamar Ejercicios 1.xlsm. La extensión xlsm es la extensión utilizada para grabar libros de Excel con Macros.
Entramos al VBE, haciendo clic en la pestaña de Desarrollador en la barra de menú y luego haciendo clic en el icono Visual Basic, o presionando la combinación de teclas Alt+F11.
38
La ventana de código aparece de color gris debido a que no existen módulos en el proyecto. Insertamos un módulo, tal como se discutió en el capítulo 2. Le colocaremos nombre al módulo Prueba_1.
Para introducir un procedimiento podemos colocar la palabra Sub y el nombre del procedimiento seguido de paréntesis. Al dar enter se creará el contenedor autocompletando con el comando End Sub. Otra forma de crear el procedimiento es utilizando el icono de insertar
39
en la cinta o en la pestaña de insertar en la barra de menú y seleccionar Procedimiento.
Al hacer clic en Procedimiento aparecerá una caja de dialogo para Agregar procedimiento. Hay que colocar un nombre al procedimiento, seleccionar un tipo de procedimiento, en este momento crearemos un procedimiento Sub, y también podemos definir el Ámbito del procedimiento, el cual elegiremos como público. El nombre del procedimiento va sin paréntesis.
40
Al hacer clic se crearรก un contenedor de cรณdigo (shell), limitado por los comandos Sub y End Sub. Luego del comando Sub va el nombre. Y ya, estamos listos para introducir nuestras instrucciones dentro del contenedor.
En nuestro primer programa utilizaremos una variable y le asignaremos una cadena de caracteres (variable tipo String). Las variables pueden ser declaradas o no. Si no se declaran las variables son del tipo Variant. Mรกs adelante
41
hablaremos en más detalle sobre la declaración y el tipo de variables.
Utilizaremos el comando MsgBox para generar un cuadro de mensaje para mostrar el resultado del procedimiento, el cual es el contenido de la variable texto. Este es un programa muy simple, que nos introduce al concepto de variables y al uso del comando MsgBox para proporcionar una salida de los resultados. Para ejecutar el procedimiento podemos utilizar el icono de ejecutar Sub/UserForm, o seleccionar la pestaña Ejecutar en la barra de menú, o con la tecla F5.
Al ejecutarse el procedimiento aparecerá una caja de mensaje (MsgBox) como se muestra en la figura.
42
Ahora hagamos un procedimiento que incluya operaciones aritméticas y funciones de VBA. Introduzcamos los valores de los catetos de un triángulo rectángulo y calculemos el valor de la hipotenusa y del perímetro.
El MsgBox que se utilizó muestra cadenas de caracteres entre comillas, concatenadas con el operador de concatenación (&) y la utilización de
43
la constante vbCr, que se utiliza como retorno de carro, y que inserta una línea. MsgbBox "La hipotenusa es " & hipotenusa & vbCr _. La cadena de caracteres va concatenada a la variable con & y la variable hipotenusa no utiliza comillas. Luego se utiliza otro & para unirlo a un vbCr y la barra piso es un operador de continuación de línea. & "Y el perimetro es " & perimetro. La segunda línea comienza con un operador de concatenación, una cadena de caracteres entre comillas, una concatenación y la variable perimetro, sin comillas. La salida se muestra a continuación.
44
45
Capítulo 5 - El modelo de Objetos de Excel Visual Basic para Aplicaciones es un lenguaje de programación orientado a objetos. y una aplicación como Excel tiene una gran cantidad de objetos como libros, hojas, celdas, gráficos, entre muchos otros, que tienen un conjunto de características (propiedades), acciones que pueden ser ejecutados en ellos (métodos) y acciones que se pueden ejecutar automáticamente como resultado de una acción o cambio de estados en los que se encuentran (eventos). En Excel existe un modelo de objetos, que establece la jerarquía de los objetos y sus propiedades. El tope de la pirámide del modelo de objeto está representado por la aplicación misma (Application), y por debajo están los libros (Worbooks), las hojas (Worksheets), los rangos de celdas (Range). Hay objetos que contienen otros objetos, por ejemplo, un libro (workbook) contiene hojas (worksheets) y las hojas a su vez
46
contiene rangos (Range). Los objetos, sus propiedades y mĂŠtodos son controlados con las instrucciones de VBA. El modelo de objeto de Excel tiene cientos de objetos, por lo cual es difĂcil aprenderlos todos, sin embargo, existe un grupo reducido de objetos, que es importante conocer, porque se usan con mucha frecuencia, los cuales se muestran en la siguiente figura.
Uno de los principales objetos es el Rango (Range), ya que es muy poco lo que se puede hacer si no se manipulan los rangos de celdas. Sintaxis para Estructura JerĂĄrquica de Objetos Para definir esta cadena de objetos se utiliza un punto para separar los objetos que contienen a
47
otros objetos, y así poder navegar en la estructura jerárquica de objetos: Object1.Object2.Object3.Object4 Donde object1 contiene a Object2 y este a Object3 y este a Object4. Application.Workbooks(“Nombre del libro”). Worksheets(“Nombre de la hoja”). Range(Indicador de rango) El Explorador de Objetos Los objetos tienen propiedades que definen las características de los mismos y también tienen métodos que definen las acciones que pueden ejecutarse sobre los objetos. Para ver el listado de propiedades, métodos y eventos asociados a los objetos puede utilizarse el explorador de objetos haciendo clic sobre el icono en la barra de menú o con la tecla F2. Por ejemplo, el objeto workbooks (colección) tiene los métodos Add para añadir un nuevo workbook, Close para cerrar, los métodos se representan en el explorador de objetos como un bloquecito volador de color verde. Las propiedades se representan como una mano
48
seĂąalando una tarjeta, entre las propiedades de workbooks tenemos Count, e Item. Workbooks no muestra eventos, el cual se representa como un rayo de color amarillo.
Existe una sintaxis para referirse a los objetos, propiedades y mĂŠtodos, la regla principal es que debe utilizarse el punto para separar los objetos de sus propiedades y de sus mĂŠtodos.
Regla 1. Para referirse a la propiedad de un objeto
49
Si la propiedad no tiene argumentos, la sintaxis es la siguiente: Objeto.Propiedad Ejemplo: Range(“A1”).Value Si se va a utilizar un objeto que está contenido en otros objetos debe definirse tal y como se ha descrito anteriormente Workbooks(“Ejemplo.xls”).Worksheets(“Hoja1”) .Range(“A1”).Value Algunas propiedades requieren de uno o más argumentos, por ejemplo, la propiedad Offset, requiere dos argumentos, el primer argumento es para el número de filas a mover y el segundo argumento es para el número de columnas. Range(“A1”).Offset(1,2) En el ejemplo mostrado comenzando en la celda A1 se mueve una fila hacia abajo y dos hacia la derecha, con lo que se está referenciando la celda C2.
50
Los argumentos tienen asociado parámetros con sus nombres y muchas veces es conveniente utilizarlos con la finalidad de ser más claro en las instrucciones, en este caso el primer parámetro es rowOffset y el segundo es columnOffset, a pesar de estar en inglés, es fácil reconocer a que se refieren. En el siguiente ejemplo se muestra como se utilizan los nombres de los parámetros. Luego del nombre se utilizan los dos puntos igual para asignar el valor del argumento (:=). Range(“A1”).Offset(rowOffset:=1, columnOffset:=2) Cuando se utilizan los nombres de los parámetros, pueden utilizarse en cualquier orden dentro de la instrucción. Range(“A1”).Offset(columnOffset:=2, rowOffset:=1) Tomando como referencia la celda A1 de la hoja activa, la propiedad Offset devuelve un objeto
51
Range que se ha movido su ubicaciรณn 1 fila hacia abajo y 2 filas hacia la derecha.
Regla 2. Para cambiar la propiedad de un objeto Existen propiedades que pueden ser modificadas utilizando instrucciones en VBA, estas propiedades son de lectura y escritura. Sin embargo, existen otras propiedades que no pueden ser modificadas, que solamente se puede conocer el valor de la propiedad o su estado. Estas propiedades son de solo lectura. A las propiedades que son de lectura y escritura se les puede asignar un valor con el operador de asignaciรณn ( = ) y la sintaxis es la siguiente: Objeto.Propiedad = Valor Valor es un nuevo valor que quiere ser asignado a la propiedad del objeto. El valor puede ser:
52
Un número Range(“A1”).Value = 25 Texto entre comillas ActiveCell.Font.Name = ”Cambria” Esta instrucción cambia el tipo de fuente de la celda activa a Cambria. Un valor lógico (True o False) ActiveCell.Font.Bold = True Esta instrucción aplica el formato de resaltado a la propiedad Font. Regla 3. Para obtener el valor actual que tiene la propiedad de un objeto. Se puede obtener el valor actual de una propiedad tanto para las propiedades de lectura y escritura como para de las solo lectura. La sintaxis es la siguiente: Variable = Objeto.Propiedad Para eso se debe crear primero una variable para almacenar el valor de la propiedad, por ejemplo, ValPropiedad.
53
ValPropiedad=Range(“A1”).Value Asigna a la variable ValPropiedad el valor contenido en la celda A1. TipoFuente = ActiveCell.Font.Name Almacena en la variable TipoFuente el nombre del tipo de fuente utilizado en la celda activa. En el siguiente macro se asigna el nombre de la propiedad Font que está en la celda activa a la variable TipoFuente. Y luego se crea un mensaje que indique el valor almacenado en la variable.
Al ejecutar el procedimiento se muestra un mensaje indicando que el tipo de fuente utilizado en la celda activa es Cambria.
54
Regla 4. Para aplicar un método a un objeto Los métodos pueden tener o no argumentos, y cuando no tienen argumentos la sintaxis utilizada es la siguiente: Objeto.Metodo Por ejemplo, algunos métodos que no tienen argumentos son: Activate, Clear, Select. ActiveWorkbook.Worksheets("Hoja1").Cells.Cle ar Aquí hemos aplicado el método Clear para limpiar todas las celdas de la hoja1 del libro activo. Active ActiveWorkbook es una propiedad del objeto Application (Excel). Worksheets y Cells son también propiedades, y en conjunto constituyen un objeto integrado por todas las celdas de la hoja1 del libro activo. Los métodos pueden tener argumentos y la sintaxis es la siguiente Objeto.Metodo argumento1, argumento3,…. Argumento n
argumento2,
55
Algunos ejemplos de los métodos que requieren argumentos son: Copy, Cut, PasteSpecial. Hay argumentos que son requeridos, y otros que son opcionales, Existen dos formas de colocar los argumentos: Enumerarlos todos separados por comas, pueden omitirse los valores opcionales, pero debe indicarse su posición entre comas con un espacio vacío. Utilizar el nombre del parámetro seguido de dos puntos igual (:=), y luego el argumento. Objeto.Metodo Parametro 1:= argumento1, Parametro 2:= argumento2, Parametro 3:= argumento3,…. Parametro n:= argumento n Se pueden colocar los parámetros y sus argumentos en el orden que se deseen y no es necesario colocar todos los parámetros. La segunda opción es más clara, ya que permite identificar claramente cuales parámetros son utilizados y sus valores.
56
En el procedimiento mostrado se utilizan los dos métodos: En la primera línea se utiliza el argumento directamente, y en la segunda línea de código se utiliza el parámetro seguido del operador dos puntos igual (:=) y el argumento. También se observa que en la segunda línea solo hemos dado la dirección de la primera celda del rango, no todo el rango, lo cual es algo que usualmente hacemos en la hoja de Excel. Cuando copiamos un rango de celdas, marcamos el rango que queremos copiar, pero solo indicamos la celda inicial a donde queremos copiar.
57
Capítulo 6 - Propiedad Range Range en algunas ocasiones actúa como un objeto, pero la mayoría de las veces es una propiedad de varios objetos del modelo de objeto de Excel, tal y como se muestra en el extracto del explorador de objetos de VBA.
Una de las aplicaciones principales de Range es la de ser una propiedad de un objeto Worksheet, devolviendo un objeto integrado por un rango de celdas de una hoja. La propiedad Range devuelve una celda o rango de celdas. La referencia debe hacerse en el estilo A1. Si quisiéramos hacer una referencia completa hasta un rango de celdas específicos escribiríamos:
58
Application.Workbooks(“nombre del Libro”). Worksheets(“nombre de la hoja”). Range(“A1:B5”) Si queremos seleccionar un rango dentro de la hoja activa, podemos ahorrarnos las direcciones de los objetos precedentes y escribir simplemente Range(“A1:B5”).Select
Para definir un rango se puede utilizar los dos puntos ( : ) que es el operador de rango, o también se puede utilizar la coma ( , ) que es el operador de unión. Así el Rango de celdas de A1 a B5 también se puede escribir como: Range(“A1”, “B5”) Ejemplos del uso de Range
59
Seleccionar una sola celda, por ejemplo, B4: Range("B4").Select Seleccionar un rango de celdas, por ejemplo, A4:B12 Range("A4:B12").Select Range("A4","B12").Select Seleccionar celdas no contiguas, por ejemplo, B5, G5 y M5 Range("B5, G5, M5").Select Seleccionar rangos yceldas no contiguas, por ejemplo, A1:B5, C6 y D5 Range("A1:B5, C6, D5").Select Diferentes Formas de Expresar un Rango de Celdas En VBA para crear o referirse a un objeto constituido por un rango de celdas pueden utilizarse diferentes formas, utilizándose las propiedades Range y Cells combinados con los operadores de rango (:) y de unión (,); así como el uso de nombre de rangos o variables. También se utilizan las propiedades Offset y Resize
60
1.- Usando la propiedad Range con una dirección. La dirección está en formato A1 y debe estar entre comillas. 1.1.- Para referirse a una sola celda: Range(“A1”) 1.2.- Dirección definida utilizando el operador de rango (:). Para referirse a Range(“A1:A10”)
un
rango
de
celdas:
1.3.- Dirección definida utilizando el operador de unión (,). Para referirse a un rango de celdas: Range(“A1” , “A10”) 2.- Usando la propiedad Cells con las coordenadas de la celda, numero de fila y columna. El primer número indica el número de la fila y el segundo el número de columna. Cells(fila, columna). Para referirse a la celda que está ubicada en la fila 15, columna 5 (E15) Cells(15,5).
61
3.- Usando la propiedad Cells con variables para la fila y la columna. Cells(NumF,NumC) Donde NumF y NumC son variables previamente definidas, con valores enteros asignados. 4.- Usando la propiedad Range con un nombre de rango, el nombre del rango debe colocarse entre comillas y debe haber sido creado previamente. Range(“Dir1�) El nombre del rango Dir1 ha sido creado previamente. 5.- Usando la propiedad Range con una variable. Range(Dir2) La variable Dir2 ha sido previamente definida, utilizando declaraciones como la siguiente: Dir2=Selection.Address
62
Para continuar leyendo. MuĂŠstrele al autor que usted aprecia su trabajo. Visite: Amazon US https://www.amazon.com/dp/B01M8K5120 Amazon MĂŠxico https://www.amazon.com.mx/dp/B01M8K5120