VENTANA DEL EDITOR DEL VBA

¿Qué significa VBA?

VBA es Visual Basic de Aplicaciones; es decir, es un subproducto del lenguaje de programación de computadoras Visual Basic en un entorno de la programación orientada a objetos (POO). Muchísimas aplicaciones han sido desarrolladas con este lenguaje. El VBA es una parte de él escrito para la familia Microsoft.

Hay muchos otros lenguajes. Así como existen los lenguajes, español, inglés, alemán, chino, etc., así también existen muchos lenguajes de programación. Cada uno de ellos ejecutan un progrma que está codificado usando su propia sintaxis.

Por ejemplo:

Dim a, b as Integer
a = 10
b = 23
c = a*b
resulDiv = a/b

constituye un programa

Este otro:
Hacer clic en A5
Ingresar 10
Hacer clic en B5
Ingresar 23
Calcular c = a*b
Calcular resulDiv = a/b

también constituye un programa.

El VBA entiende al primero pero no al segundo. Cuando codifiquemos un programa, debemos usar la sintaxis de lenguaje VBA.
Un programa como el primer ejemplo, reconocido por el VBA constituye una macro. A una macro o programa se le denomina también procedimiento.

Para escribir o codificar un procedimiento, debemos usar el Editor del VBA.
En el editor lo que haremos es insertar módulos procedimientos (programas o macros). Un módulo puede contener muchos procedimientos.

Cargue a memoria el Excel; es decir, ejecute el Excel.

Para acceder a la ventana del editor, debemos usar la secuencia: [Programador] - [Código] - [Visual Basic].
Tanbién podemos usar la ruta corta: [ALT]+[F11]
La imagen siguiente nos muestra una parte de la ventana del Editor del VBA.

Descripcion de la ventana del editor

En ella encontramos la [Barra de titulo] y en ella, el comando [Insertar]

Si hacemos clic en este comando, podemos disponer de una lista de opciones entre las cuales está: Módulo y UserForm

Más adelante veremos los formularios del uruario (UserForm).

En el lado izquierdo encontramos la Ventana de proyectos. Aquí encontramos tres iconos: para acceder al código, a los objetos o carpetas.
Por debajo de ellos está la lista de carpetas de proyectos o libros que estuvieran cargados a memoria.
En la imagen apreciamos tres carpetas propias del Excel y una cuarta: VBAProject(libro1). En esta carpeta colocaremos los módulos que contendrán los procedimientos que crearemos.
Dentro de la carpeta del proyecto aparecerán la lista de las hojas del libro, los módulos y los formularios que pueda contener dicho libro.

A cotniuación, en la parte inferior observamos la Ventana de propiedades

Aquí se encuentran las propiedades de cada uno de los objetos del Excel.

Si hacemnos clic en el objeto "Hoja1" apreciaremos las propiedades de este objeto. Del mismo modo, si hacemos clic en "ThisWorkbook", tendremos la lsita de propiedades de este objeto.

Nuestra primera macro o procedimiento

Estando en el Editor, haga clic en el comando [Insertar]. Haga clic en [Modulo].
Observe que, en la ventana de proyectos, se ha insertado una carpeta llamada Módulos y dentro de ella, se ha creado el Módulo1
Tambien puede apreciar, que el lado derecho de la pantalla se ha puesto en blanco. Aquí es donde digitaremos los procedimimientos.
Cada uno de los procedimientos tiene una cabecera y un final:

Sub nombreProc(argumentos)
.....
.....
End Sub

donde nombreProc es el nombre de la macro o procedimiento. Argumentos es la lista de objetos o variables que recibe o devuelve el procedimiento.
El procedimiento termina en la línea "End Sub".

Bien, vamos a codificar en programa arriba mencionado y le llamaremos Ejemplo01.

Digite sub Ejemplo01 y presione [Intro].

Automáticamente se inserta el inicio y fin del procedimiento.

Digite dentro, lo siguiente: 

Dim a, b as Integer
a = 10
b = 23
c = a*b
resulDiv = a/b

Interpretando a este programa, podemos decir que le hemos dado el valor de 10 a la variable "a2; 23 a la variable "b".
La variable "c" contendrá el producto de "a" y "b": La variable "resulDiv" contendrá la división de "a" entre "b".
Allí termina el programa.

Para visualizar los resultados, debemos usar la sentencia que nos permita imprimirlos en pantalla. Esto significa usar la sentencia: MsgBox(...)
 

Sintaxis

MsgBox(Prompt[,Buttons, Title, Context, Ayuda])
Emite el resultado en una ventana de salida. En esta ventana se puede insertar un título, botones o un vínculo para la ayuda.
La mínima sintaxis puede ser:

MsgBox(prompt)
MsgBox(variable)
MsgBox (prompt, variable)


Se puede evitar los paréntesis.
Digitemos las siguientes dos instrucciones al final de nuestro procedimiento:
MsgBox(c)
MsgBox(resulDiv)

¿Cómo se ejecuta el procedimiento?

Estando el cursor en el interior del procedimento, podemos ejecutarla usando la tecla [f5].
La imagen siguiente nos indica otra forma de ejecutar el procedimiento.

Declaración InputBox(...) que permite el ingreso de datos desde el teclado

Sintaxis

NomVar = InputBox(Prompt, [Title], [XPos], [YPos])
 

Desde este punto de vista, InputBox(...) despliega una ventana de diálogo en donde pide (o se debe digitar) un valor que se debe ingresar desde el teclado y almacenado o guardado en NomVar, que es el nombre de una variable.

Los argumentos:

Son todos aquellos elementos que están incluidos dentro de los paréntesis. Algunos son obligatorios y otros son opcionales. Los opcionales se muestran entre corchetes.

Prompt: es un mensaje encerrado entre doble comilla "...". Allí se digita un mensaje cualquiera que por lo general va dirigido a quien está ejecutando el procedimiento.
Title: Es el título que queremos tenga la ventana del InputBox. Si se usa debe estar entre doble comilla.
Normalmente la ventana del inputBox aparece en una posición de la ventana que se despliega a partir del punto (XPos, YPos). Por tanto, si se desea que la ventana cambie de posición, se debe ingresar un valor (en pixels) para el eje X (XPos) y otro para el eje Y (YPos).
Hay otros tres argumentos que se emplean para incluir un botón de ayuda, pero aquí no la usaremos.

Ejemplo

DIM A, B As Integer
A = InputBox("Ingresa el primer número.")
B =InputBox("Ahora el segundo.")

Estas tres líneas es lo que se llama un procedimiento, un programa. En este caso, hemos declarado las variables A y B como de tipo entero. A continuación se pide que se digite un número cuyo valor se almacenará en la variable A y luego se pide otro para B.


Para codificar otro procedimiento, digitaremos por debajo de la última línea:
 

Ejemplo 2

Sub Ejemplo02() End Sub Dim n as Integer
Dim xTit As String
DIM C, D as Integer
DIm E as Double
' Este es un comentario. Toda línea que empieza con apóstrofe no se procesa, es un comentario
' Lectura de datos
xTit = InputBox("Ingrese el titulo")
A = InputBox("Ingresa el primer número.",xTit)
B =InputBox("Ahora el segundo.",xTit)
n = InputBox("Número de veces que se debe ejecutar")
' Sección de proceso

C = A+B
D = A*B
E = A/B

' Procedemos a imprimir C, D y E
MsgBox("El valor de C = " & C)
MsgBox "El valor de D es " & D
MsgBox "La division de A = "&A&" entre " & "B = " & B & " es igual a " & E

Cuando se ejecute este procedimiento, pedirá que se ingrese un mensaje que bien puede ser usado como título en la siguiente ventana del Input.

Se va a pedir un dato para la variable "n" que no se usará.
Pasemos a ejecutar el procedimiento.
Haga clic en [F5]
Observe el título de esta ventana del InputBox. Digite un mensaje cualquiera.
En la ventana de ingreso de datos para "A", se puede observar el cambio de título de la ventana
Al emitirse los resultados, podemos observar que se ha mezclado "prompt" con resultados usando el caracter "&".
Se usa "&" pues se intenta imprimir dos tipos de variables: Uno de tipo String (cadena de caracteres) y otro de tipo numérico.
 

Observación importante:

Los resultados son correctos, excepto el de la variable "C" que, en lugar de emitir la suma de los números ingresados, los ha concatenado. Esto indica que dichos datos no son números. Significa también que debemos realizar un proceso de conversión de cadena de caracteres a valor numérico.

Los otros cálculos están correctos pues el tipo de operación ha obligado a una conversión previa y automática, lo que no sucede cuando se trata de sumar.
 

En resumen:

- Para ingresar datos se debe usar la función InputBox(...). Esta contiene un comentario entrecomillado, pero que puede una variable cualquiera.
- Se puede emitir resultado usando MsgBox (...) usando o no los paréntesis.
- Se puede imprimir variables o cadenas de texto junto con variables numéricas, pero deben estar concatenados usando el caracter "&".

La siguiente imagen contiene el procedimiento


En la siguiente sesión continuaremos on otros ejemplos para ello haga clic aquí