Hablemos, ahora de colecciones y objetos.
Por ejemplo, en una hoja de cálculo, tenemos varias hojas, es decir, una colección de hojas.
Cada una de las hojas, es un objeto hoja.
Todas estas hojas es parte de la colección WorkSheets.
Entonces, en la siguiente expresión:
Hacemos referencia a la colección de archivos, o, WorkBooks, que es el libro2, hacemos referencia a la colección de hojas, que es WorkSheets, donde nos quedamos con el objeto hoja1.
El objeto WorkBooks, contiene todos los objetos Workbook abiertos, es decir, todos los libros que tengamos abierto en ese momento.
Por ejemplo, si tenemos tres libros abiertos, y, queremos que se cierre el libro 3, el orden que tiene los libros es el orden en el que lo hemos ido abriendo, pues, si escribo la siguiente línea:
El libro 3 se cerrará.
Entonces, un objeto pertenece a una categoría, donde una categoría es una colección.
Métodos y propiedades
Un método es una acción que puede realizar un objeto, en otras palabras, una acción que reconoce un objeto, como, por ejemplo, pulsar una tecla.
En un libro de Excel, vamos a la pestaña, programador, o, desarrollador, dentro del grupo código, hacemos clic en Visual Basic, o, pulsamos ALT-F11.
Desplegamos la pestaña insertar, y, seleccionamos userform.
Vemos el formulario, y, al lado el cuadro de nombres, donde, tenemos diferentes recursos para poder usar.
Vamos a hacer clic en cuadro combinado, y, lo arrastramos hasta el formulario.
Un cuadro combinado, también, es conocido como ComboBox.
Por ejemplo, AddItem es un método del objeto ComboBox, que nos permite añadir elementos al ComboBox, por ejemplo, Me.ComboBox1.AddItem.
La siguiente línea inserta el siguiente elemento en el ComboBox.
Si ejecutamos.
Y, desplegamos el cuadro combinado, veremos el elemento.
Pulsamos en la X, para volver al editor.
El objeto es ComboBox, y, el método es AddItem.
Propiedades
Una propiedad es un atributo de un objeto que define una de las características del objeto, como puede ser el tamaño, el color, la ubicación de la pantalla o un aspecto de su comportamiento, como si está habilitado o es visible.
Para establecer el valor de una propiedad, se pone el objeto seguido de un punto, a continuación, el nombre de la propiedad, un signo igual (=) y el nuevo valor de la propiedad.
Por ejemplo, la siguiente línea usa la propiedad visible para hacer que el ComboBox, es decir, el objeto, no sea visible.
Si ejecutamos, no veremos el cuadro de lista.
También, podemos visualizar el valor de una propiedad, por ejemplo, la siguiente línea, nos muestra el nombre del objeto, que en este caso, es un ComboBox.
Usamos a propiedad name.
Si ejecutamos, aparece un cuadro de dialogo, con el nombre del cuadro de lista, o, ComboBox.
Para entenderlo mejor, tenemos un coche, ese coche es de color rojo, tiene un tamaño de 2 metros, tiene 4 ruedas, pues estas serían las propiedades del coche, ahora, el coche lo podemos conducir, podemos frenar, podemos poner la radio, bajar las ventanillas, pues estos son los eventos que tiene el coche.
Una propiedad describe el objeto, y, un método la acción que va a realizar el objeto.
Veamos algunas propiedades del objeto Combobox.
Tenemos, la propiedad width (ancho), donde se especifica el ancho de este objeto.
En la siguiente línea, nos muestra un cuadro de dialogo, donde podemos ver el ancho del objeto.
También, tenemos la propiedad height (altura), la siguiente línea nos muestra la altura del objeto.
Tenemos la propiedad Font, la siguiente línea nos muestra que tipo de letra de esta usando.
Tenemos la propiedad left (izquierda), que nos dice la distancia que hay desde la parte izquierda del formulario hasta el objeto.
La siguiente línea nos muestra esa distancia.
Estas son algunas de las propiedades.
Y, algunos métodos son los siguientes:
· Enabled, donde podemos decidir si el objeto va a estar habilitado o no.
· Visible, decidimos si queremos que el objeto este visible o no.
· Locked, decidimos si queremos o no bloquear el objeto.
Si estamos trabajando con el libro activo, es decir, con WorkBooks, entre otros métodos, tenemos Add (añadir), Close (cerrar), Open (abrir).
Si trabamos con el objeto worksheets, podemos añadir, copiar, borrar entre otras.
Procedimientos SUB
Un procedimiento es un bloque de instrucciones en VBA, incluido entre una instrucción de declaración, como poder ser SUB.
Un procedimiento SUB es conocido como control de eventos.
Todo procedimiento SUB acaba con la declaración END SUB, como podemos ver, en la siguiente imagen:
Modularizacion
En programación, existe un concepto que se llama modularizacion, quiere decir que cuando vamos a realizar un programa, es mejor dividir este programa en pequeñas partes, que hacer todo el programa en una pieza.
Encapsulación
Ahora, vamos a definir lo que es la encapsulación.
A lo hora de realizar un programa, además, de modularizarlo, tenemos que saber a qué partes del programa puede acceder el usuario, y, a que partes no puede acceder.
Cuando realizamos un programa, se supone que lo hacemos para lo use un usuario, dicho programa tendrá partes a las que pueda acceder, y, partes que se mantengan ocultas, sobre todo si el usuario no sabe programar.
El usuario puede usar el programa, pero no poder acceder a las líneas de programación.
Por ejemplo, un coche esta realizado de muchas piezas, a estas piezas solo puede acceder el mecánico, que sería el programador, y, el usuario, que es el conductor, solo puede conducirlo.
Aquí entra la definición de encapsular, para asegurarnos de que el usuario no tenga acceso a las piezas del motor.
Esto lo conseguimos cuando ponemos la palabra PRIVATE, detrás del procedimiento, conseguimos que nadie externo pueda acceder al código, pero si puede usar el programa.
Dentro de un procedimiento SUB, tenemos los argumentos.
Los argumentos son los valores que usara el programa durante su ejecución.
Dichos argumentos van entre los paréntesis de la declaración del procedimiento.
Veamos un ejemplo, vamos a la ficha programador, o, desarrollador, hacemos clic en Visual Basic, dentro del grupo, código, o, pulsamos ALT-F11.
Insertamos un módulo, desplegando la ficha de insertar.
Le vamos a llamar ejemplo, es decir, ponemos la palabra SUB el nombre que le hemos asignado, y, abrimos y cerramos paréntesis.
Podemos ver como de forma automática, se cierra el procedimiento con END SUB.
Los paréntesis es lo que se llama zona de parámetros.
Sirve, de forma opcional, para indicar dentro de los paréntesis los valores que vamos a usar.
Vamos a crear una macro para que nos muestre un cuadro de texto con el mensaje hola…
Si ejecutamos la macro, si lo hacemos dentro del entorno de visual Basic, hacemos clic en:
Ahora, a continuación de este módulo, voy a crear otro modulo, lo llamaremos mostrar, donde vamos a llamar al módulo ejemplo, para ello, dentro del procedimiento SUB solo debemos de poner el nombre del módulo a llamar.
Podemos ver que la única instrucción es el nombre del módulo.
Si ejecutamos la macro, veremos el cuadro de dialogo con el mensaje hola, lo que ha hecho es ir al módulo llamado ejemplo, ha ejecutado las líneas que hay dentro del procedimiento, y. ha vuelto al punto de partida, es decir, a ejemplo, si hubiera más líneas debajo de la palabra ejemplo, las seguiría ejecutando.
También, podemos en la cinta de opciones de Excel, crear una nueva pestaña, y, poner ahí la macro.
Para ello, hacemos clic en archivo, clic en opciones.
Se abre la ventana, opciones de Excel, en la ventana de la izquierda seleccionamos personalizar cinta de opciones.
En la ventana de la derecha hacemos clic en nueva pestaña.
Desplegamos la ventana, comandos disponibles en, y, elegimos macros.
Nos aparecen todas las macros que tenemos, seleccionamos la de nosotros, y, hacemos clic en agregar.
Hacemos clic en nuevo grupo, y, clic en la pestaña, cambiar nombre, para cambiar el nombre.
Le ponemos, por ejemplo, macros, y, aceptamos.
Este nombre, es el que aparece aquí:
Ahora, hacemos clic en nueva pestaña, y, en la pestaña, de nuevo, cambiar nombre.
Le voy a poner, también, macros, y, aceptamos.
Si vamos a la cinta de opciones, veremos la pestaña que acabamos de crear, veremos la macro, si hacemos clic en ella, veremos que se ejecuta normalmente.
Veamos, un ejemplo, pero en este caso vamos a crear una variable de tipo objeto.
¿Qué es una variable?
Una variable es algo que a lo largo del programa va a ir cambiando su valor.
Hay diferentes tipos de variables.
De tipo numérico. VBA proporciona dos tipos de variables numéricas.
Como números enteros, que pueden ser de tres tipos:
· Byte
· Integer
· long
Como números de coma flotante, o, punto decimal, que también pueden ser de tres tipos:
· Single
· Double
· Currency
También de fecha y hora, que son datos de tipo Date.
Datos de tipo String, que va a almacenar cadenas de texto.
De datos Boolean, que va a almacenar verdadero o falso.
Con este tipo de variables, decidimos que memoria van a ocupar las variables.
Mas adelante, veremos ejemplos del uso de tipos de variables.
Continuamos con el ejemplo, donde íbamos a crear una variable de tipo objeto.
Para declarar una variable, lo primero que debemos de poner es la palabra DIM, seguido del nombre de la variable, seguido de la palabra as, y, por último el tipo de variable.
Por ejemplo, si escribo:
Creo una variable de tipo objeto.
Ahora, con la instrucción SET, que se usa para hacer referencia a un objeto, y, que almacena todas las propiedades del objeto, le digo que la variable es igual a un objeto perteneciente a Wscript.network.
Voy a escribir la siguiente línea:
Ya hemos creado un objeto, y, como objeto tendrá sus propiedades y métodos.
Una de las propiedades es UserName, donde podemos almacenar en una variable, el usuario de Windows, pues vamos a usarla, si escribo la siguiente línea:
Presenta un cuadro de dialogo, donde veo el usuario de Windows.
Es decir, hemos creado una variable de tipo objeto, a esa variable le hemos asignado el objeto Wscript.Network, y, hemos usado la propiedad UserName.
Si vamos al explorador de proyectos, podemos ver ThisWorkBook.
Quiere decir, que las líneas que pongamos dentro de ThisWorkBook, se van a ejecutar con el evento open, es decir, al abrir el libro.
Pues hacemos doble clic sobre ThisWorkBook.
En el panel central, en la parte superior, vemos dos desplegables.
En el de la izquierda poner general, y, en el de la derecha, pone declaraciones.
Pues vamos a desplegar general, para elegir el objeto workbook.
Vemos que aparece como un procedimiento privado Private Sub, a continuación, aparece el nombre del objeto que es workbook, y, seguido del evento, que en este caso, y por defecto es open, que es lo que queremos, es decir, cuando se abra el libro.
Si desplegamos el desplegable de declaraciones, veremos todos los eventos que tenemos para este objeto.
Pero, nosotros dentro de este objeto en el evento open, vamos a poner el nombre del módulo que debe de ejecutar al abrir el libro, que es ejemplo.
Guardamos el libro como habilitado para macros, cerramos, y, lo volvemos a abrir, y, veremos que lo primero que nos muestra es un cuadro de dialogo con el nombre de usuario de Windows.
Si lo que queremos ver es el nombre de la computadora, pues ponemos:
Lo que vamos a hacer es insertar un módulo, lo que queremos es que la pantalla de Excel este siempre maximizada, pues, ponemos la siguiente línea:
Ahora, vuelvo a ThisWorkBook, elijo el evento open, y, dentro pongo una llamada a la macro que acabamos de crear.
Cierro y vuelvo a abrir, y, la ventana de Windows siempre va a estar abierta, no nos va a permitir minimizarla.
También, podemos crear otros objetos como RANGE, que representa una celda o grupo de celdas, y, que tiene sus propiedades y métodos.
Cuando vemos los bucles, veremos algún ejemplo con el objeto RANGE.
Paso de argumentos
Lo siguiente que vamos a ver, siguiendo con los procedimientos SUB, es el paso de argumentos, es decir, vamos a crear un módulo, donde vamos a llamar a otro, pero pasando un valor.
Vamos a ver u ejemplo muy simple, para comprenderlo mejor.
Vamos al editor de VBA, e, insertamos un módulo.
Insertamos otro modulo.
Podemos ver en el segundo modulo, que entre los paréntesis, hemos declarado una variable, llamada valor como número.
En el módulo aa, hemos puesto el nombre del módulo bb seguido de un número, ese número quedara almacenado en la variable valor del módulo bb.
En el módulo bb, hemos puesto msgbox para que nos muestre el valor de la variable valor, si la ejecutamos podremos verlo.
Después, de que el módulo bb se ejecute, el control vuelve al módulo aa.
Ahora, en el módulo aa, cambiamos el valor a 10.
En el módulo bb, vamos a usar un bucle FOR/NEXT, que veremos un poco más adelante, de la siguiente manera:
Lo que va a hacer es crear una variable que va a tomar los valores desde 1 hasta el valor de la variable valor, que en este caso, vale 10, y, a continuación, en la hoja1, en la celda A1 hasta la celda A10, va a ir poniendo el valor de la variable I.
Veamos otro ejemplo, pero en este caso, vamos a declarar dos variables en el módulo bb, que van a ser valor1, y, valor2.
En el módulo aa, vamos a llamar al módulo bb, pero en este caso, separado por coma, pasamos dos valores.
En el módulo bb, ponemos que nos muestre un cuadro de dialogo, con msgbox, que muestre la suma de las dos variables.
Si vamos al módulo aa, y, ejecutamos la macro, veremos que nos muestra ese cuadro de dialogo con la suma de las dos variables.
Debajo de la ventana donde escribimos las líneas, tenemos otra ventana que se llama la ventana de inmediato.
Si no la vemos, desplegamos la pestaña ver, y, elegimos ventana de inmediato, o, podemos pulsar CTRL-G, para mostrarla.
La ventana de inmediato nos vale para depurar código que hemos escrito, consultar o cambiar el valor de una variable, consultar o cambiar el valor de una propiedad, ver el resultado de la macro mientras está en uso.
Siguiendo con los módulos anteriores, borro lo que hay en el módulo aa, y, escribo la siguiente línea:
Sub aa()
MsgBox Application.Worksheets(1).Name
End Sub
Es decir, que me muestre un cuadro de dialogo con el nombre de la hoja1, si ejecutamos la macro, veremos ese cuadro de dialogo.
Pero, si este resultado quiero verlo en la ventana de inmediato, debo de usar debug.print.
La función debug.print, nos va a permitir usar la ventana de inmediato.
Si escribimos la siguiente línea dentro del módulo:
Sub aaa()
Debug.Print Application.Worksheets(1).Name
End Sub
Podemos ver en la ventana de inmediato el nombre de la hoja1.
Si queremos ver el valor directamente en la ventana de inmediato, sin pasar por la macro, en la ventana de inmediato escribimos lo siguiente:
El signo de interrogación a la izquierda significa que queremos ver el nombre de la hoja1.
Cómo resultado, tenemos el nombre de la hoja1.
Veamos otro ejemplo, vamos a crear una macro, insertamos un módulo, declaramos una variable, que la voy a llamar hoja, y la declaro con el nombre de hoja.
Dim hoja As Worksheet
Ahora, vamos a crear un bucle FOR/EACH, que veremos un poco más adelante, donde escribimos las siguientes líneas:
For Each hoja In ActiveWorkbook.Worksheets
'Chequear si la hoja está vacía
If WorksheetFunction.CountA(hoja.Cells) = 0 Then
'Nombrar las hojas vacías en la ventana Inmediato
Debug.Print hoja.Name
End If
Next hoja
Con estas líneas, chequeamos si la hoja está vacía, en caso, de que estén vacías las muestra en la ventana de inmediato.
Veamos otro ejemplo, vamos a declarar tres variables, que van a almacenar números.
Dim Num1 as Integer
Dim Num2 as Integer
Dim Suma as Integer
Vamos a asignarle valores a las variables num1 y num2.
Num1 = 1
Num2 = 2
Ahora, en la variable suma, sumamos las variables num1 y num2.
Suma = Num1 + Num2
Ahora, con debug.print, vamos a mostrar el siguiente mensaje:
Debug.Print "Los números ingresados fueron " & Num1 & " y " & Num2
Y, como resultado en la ventana de inmediato, vemos:
Este es el código completo.
Sub AñadirNum1()
'Declarar las variables
Dim Num1 As Integer
Dim Num2 As Integer
Dim Suma As Integer
Num1 = 1
Num2 = 2
'Añadir Número
Suma = Num1 + Num2
Debug.Print "Los números ingresados fueron " & Num1 & " y " & Num2
End Sub
Si, ahora, en la ventana de inmediato, escribo lo siguiente:
Cuando ponemos 1 después de WorkBooks, quiere decir la ruta del primer libro abierto.
Como resultado:
Si escribo lo siguiente:
ActiveCell, hace referencia a la celda activa en ese momento, del archivo que en el que estamos trabajando, y, la propiedad adrdress, nos devuelve la dirección.
Vemos que nos muestra la referencia de la celda donde estamos situado.
Por defecto, nos la da como una referencia absoluta.
Creemos un libro nuevo, pulsando CTRL-U.
Seleccionemos una celda en ese archivo nuevo.
Vayamos a la ventana de inmediato, y, volvemos a pulsar enter en la línea.
Podemos ver que nos da la referencia del archivo en el que estamos, esto, es porque no hemos especificado ningún libro, entonces, el libro con el que estamos trabajando es el libro activo, y, lo que hagamos se producirá en ese libro.
Cuando nos referimos a ThisWorkBook, nos referimos al archivo donde se encuentra alojada la macro, y, cuando nos referimos a ActiveWorkBook, nos referimos al libro activo.
A veces, puede ocurrir, que estemos escribiendo el nombre de un objeto, y, no nos acordemos.
Por ejemplo, voy a referirme al objeto Application, escribo dentro de un módulo, app, pero no me acuerdo del resto, bien, pues pulso CTRL + Espacio, y, se abre una ventana donde puedo ver esos objetos que empiezan por app.
Commenti