¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. VBA Access 2016
  3. El lenguaje VBA
Extrait - VBA Access 2016 Programar en Access
Extractos del libro
VBA Access 2016 Programar en Access
2 opiniones
Volver a la página de compra del libro

El lenguaje VBA

Una programación secuencial

VBA es un lenguaje de programación secuencial, es decir, que las instrucciones que se codifican se deben ejecutar en su orden de aparición en el programa. Una instrucción solo se puede ejecutar si la que la precede se ha ejecutado.

Sintaxis posibles

En VBA, las instrucciones se separan por un retorno de carro o por el signo dos puntos ”:”.

Por ejemplo, consideremos el siguiente programa:


Instrucción_1  
Instrucción_2  
Instrucción_3
 

La ejecución de este programa implicará la ejecución de Instrucción_1, después Instrucción_2 y para terminar Instrucción_3. El programa se podría haber escrito de manera equivalente como sigue:


Instrucción_1: Instrucción_2: Instrucción_3
 

Si una instrucción es demasiado larga para escribirse en una única línea, o si desea dividirla en varias líneas para simplificar la lectura, es posible pasar a la siguiente línea usando el símbolo subrayado (underscore) ” _ ”. De esta manera, la ejecución del programa arranca la ejecución de la instrucción Instrucción_a:


Instruc_ 
ción_A
 

Estructura de un programa

Un programa VBA se descompone en una serie de procedimientos y funciones, escritos con el objetivo de realizar una o varias operaciones. Las instrucciones se deben codificar dentro de estos procedimientos o funciones. Se trata de declarar procedimientos (y funciones).

Por tanto, en un módulo, el programa está formado por una serie de declaraciones de procedimientos y funciones. Una vez estos procedimientos se declaren, se ejecutarán cuando el programa los llame.

Para ejecutar un programa VBA, se ejecuta una macro, que es un procedimiento particular, la cual contiene las instrucciones que hacen la llamada a otras funciones y procedimientos. Para poder funcionar, un programa VBA debe tener, al menos, una macro declarada.

A continuación se muestra un ejemplo de programa VBA dentro de un módulo. 


Sub ProcA ()  
...  
End Sub  
Sub ProcB()  
...  
End Sub  
Function FuncionA...  
...  
End Function  
Sub Macro1()  
ProcA  
...  
End Sub
 

En este ejemplo, podemos comprobar la declaración de los procedimientos ProcA y ProcB, de la función FuncionA y de la macro Macro1. La primera instrucción de Macro1 es una llamada al procedimiento ProcA. Por tanto, la primera operación ejecutada durante la ejecución de la macro Macro1 será la ejecución del procedimiento...

Las variables

Las variables son recipientes que permiten almacenar información en todo momento, durante la ejecución de un programa, y utilizarla en cualquier otro momento. En VBA, una variable queda definida por medio de:

  • Su nombre, que se utilizará para acceder a la información que contiene.

  • El tipo de dato que almacena.

1. La sintaxis de declaración

Como sucede con las funciones y los procedimientos, para que una variable se pueda llamar y utilizar, es necesario declararla. La sintaxis de declaración de una variable es la siguiente:


Dim NombreDeVariable As TipoVariable
 

La palabra clave Dim sirve para declarar una variable. Viene seguida del nombre de la variable. Después de la palabra clave As, encontramos el tipo de la variable. Hay varios tipos de datos, que es posible manipular en VBA.

2. Los tipos de datos

a. Los tipos numéricos

Los valores enteros

El tipo Byte permite almacenar un entero comprendido entre 0 y 255 (almacenado en 8 bits, es decir, 1 byte).


Dim b As Byte  
b = 10
 

El tipo Integer contiene un entero comprendido entre -32 768 y 32 767 (en 16 bits).


Dim i As Integer 
i = 315
 

El tipo Long contiene un entero comprendido entre -2 147 483 648 y 2 147 483 647 (en 32 bits).


Dim l As Long 
l = 70000
 

Los valores reales (decimales)

El tipo Single contiene un valor real comprendido entre -3,4028823 ...

Las constantes

1. Las constantes de usuario

Las constantes de usuario permiten asignar un nombre a un valor fijo. El uso de constantes permite facilitar la programación, fundamentalmente en el marco de una eventual actualización de valores. Por ejemplo, podemos utilizar una constante para almacenar un porcentaje de IVA. La sintaxis genérica es la siguiente:


Const NombreConstante As TipoConstante = ValorConstante
 

Ejemplo:


Const IVA As Double = 21.0
 

La constante IVA, de tipo número decimal, tiene el valor 21,0 en todo momento, mientras se utilice en el programa.

2. Las constantes de Office

En VBA, hay un determinado número de constantes de Office que están directamente relacionadas con las diferentes aplicaciones (Access, Excel, etc.). Estas constantes tienen valores predefinidos y sus nombres respetan una nomenclatura: AplicacionNombre (ac para Access, xl para Excel, vb para VB, etc.). A continuación se muestran algunos ejemplos de constantes de VBA:

Herramienta/aplicación

Constantes de ejemplo

Access

acGreaterThan, acPage, acTextBox

Excel

xlUp, xlLabel, xlPasteFormats

VB

vbBlue, vbMinimizedFocus, vbFriday

Las tablas

Hasta ahora, hemos visto la manera de almacenar un valor en una variable. También es posible almacenar varios valores en varias variables. Finalmente, es posible almacenar varios valores dentro de una única variable usando una tabla. Crear una tabla de n elementos implica crear n variables diferentes al mismo tiempo.

Las variables de tipo tabla sirven para almacenar grupos de datos del mismo tipo. Se podrá acceder a cada elemento de la tabla utilizando un número secuencial. Una modificación de uno de los elementos de la tabla no modifica el resto de los elementos de la tabla.

Una tabla puede estar compuesta por una o varias dimensiones, cada dimensión se define por medio de unos límites inferior y superior. Estos límites pueden ser fijos o dinámicos. Las tablas solo pueden cambiar de dimensión durante la ejecución del programa, cuando son dinámicas.

Una tabla siempre necesitará 20 bytes de memoria, más 4 bytes por dimensión y el número de bytes necesarios según el tipo de valores almacenados.

1. Las tablas de tamaño fijo

Se determina una tabla de tamaño fijo cuando se define durante la declaración de la variable.


Option Base 0 
Dim Tabla(4) As Integer
 

El índice 4 especifica el tamaño de la tabla. La numeración de los elementos puede comenzar en 0 o 1, según la definición de la instrucción...

Los operadores

Existen varios operadores en VBA que se pueden utilizar, según los tipos de variables. Los resultados de los operadores se representan en los siguientes ejemplos, a la derecha del símbolo =.

1. Los operadores numéricos

+, -, *, /: operadores matemáticos de las operaciones básicas

+: suma


5 + 2 = 7
 

-: resta


3 - 1 = 2
 

*: multiplicación


5 * 2 = 10
 

/: división


20 / 4 = 5
 

\: para la división entera


5 \ 2 = 2
 

ˆ: potencia


2 ˆ 4 = 2 * 2 * 2 * 2 = 16
 

mod: módulo

El módulo devuelve el resto de la división entera de un número entre otro.


10 mod 3 = 1
 

2. Los operadores de cadenas de caracteres

&: concatenación

Para concatenar dos cadenas de caracteres entre ellas, se usa el símbolo ampersand ” & ”. Observe que el operador + también puede funcionar, pero se pueden producir errores si utiliza este operador, ya que se usa para las variables numéricas.


"Hello " & "world" = "Hello world"
 

3. Los operadores de fechas

+: suma


#02/15/2016# + 5 = #02/20/2016#
 

-: resta


#02/15/2016# - 3 = #02/12/2016#
 

4. Los operadores booleanos, operadores lógicos

And: operador Y


True And False = False
 

Or: operador O


True Or False = True
 

Not: operador NO


Not True = False
 

Xor: operador O EXCLUSIVO

Xor permite determinar si es una u otra, pero no las dos al mismo tiempo.


True Xor False = True 
False Xor False...

Los procedimientos

Un procedimiento es una serie de instrucciones que modifica el entorno, pero no devuelve ningún valor al final. Un procedimiento puede estar directamente codificado en un módulo, así como relacionado con un evento sobre un objeto de Access (formulario, botón, etc.). Algunos procedimientos se pueden crear automáticamente a partir de una macro de Access o del asistente de Access.

1. Declaración de un procedimiento

La declaración de un procedimiento en VBA se hace con la palabra clave Sub, según la siguiente sintaxis:


[Private o Public] Sub Nombre_Procedimiento([argumento_1 
Tipo_Argumento, ...]) 
    'Comentarios  
    Instrucciones  
End Sub
 

Nombre_Procedimiento es el nombre del procedimiento, y argumento_1, el nombre de un argumento de tipo Tipo_Argumento. La expresión entre corchetes [Private o Public] significa que podemos añadir si queremos una de las palabras clave Public o Private, utilizadas para definir el carácter público o privado del procedimiento. Si no se utiliza ninguna de estas palabras clave, el procedimiento será público por defecto.

Un procedimiento público se llamará desde cualquier otra ubicación del programa. Un procedimiento privado solo se puede llamar desde otro procedimiento (o función), que se sitúa en el mismo módulo del programa.

Para hacer...

Las funciones

Una función es una serie de instrucciones que devuelve un único valor, a saber, el resultado de una expresión.

1. Declaración de una función

La declaración de una función en VBA se hace con la palabra clave Function, según la siguiente sintaxis:


[Private o Public] Function Nombre_Funcion([argumento_1 
As Tipo_Argumento, ...]) As Tipo_Retorno 
    'Comentarios 
    Instrucciones 
    Nombre_Funcion = expresión 
End Function
 

Nombre_Funcion es el nombre de la función y argumento_1 el nombre de un argumento de tipo Tipo_Argumento. Una función se puede declarar con cero, uno o varios argumentos. As Tipo_Retorno permite determinar el tipo de valor que la función devolverá. La expresión entre corchetes [Private o Public] significa que podemos añadir si queremos, una de las palabras clave Public o Private, utilizadas para definir el carácter público o privado de la función. Si no se utiliza ninguna de estas palabras clave, la función será pública por defecto.

A continuación se muestra un ejemplo de función Al_Cubo, que recibe un entero n como argumento y devuelve su valor al cubo (n3= n * n * n).


Function Al_Cubo(n As Long) As Long 
    'Función que devuelve el valor de n potencia 3 
    Al_Cubo = n * n * n ...

Pasar argumentos por valor y por referencia

1. Pasar argumentos

Durante la llamada a una función o procedimiento, algunas veces el programa necesita información para ejecutarse; es el caso, por ejemplo, de la función Al_Cubo, que necesita tener el valor n para devolver su cubo. La información que se proporciona al procedimiento o a la función se llama argumento.

La sintaxis general del paso de argumentos es la siguiente:


[Optional] [ByRef o ByVal] [ParamArray] <nombre_argumento> 
[As Tipo_Argumento]
 

Cada una de las palabras clave tiene un impacto en la naturaleza del argumento. 

a. Los argumentos obligatorios

Cuando un argumento es obligatorio para que el programa cumpla su función, la sintaxis será la siguiente:


Nombre_argumento As Tipo_Argumento
 

Por ejemplo, si se retoma la función Al_Cubo para que la función se ejecute, se debe proporcionar obligatoriamente el argumento n:


N as Long
 

b. Los argumentos opcionales

Si el argumento se puede proporcionar opcionalmente, se precede de la palabra clave Optional. Por ejemplo, un procedimiento que debe mostrar el nombre y apellidos de una persona, así como el nombre de pila, se escribirá como sigue:


Nombre As String, Apellidos As String, Opcional Nombre_De_Pila As String
 

Nombre_De_Pila es opcional, ya que puede que no tenga.

Es posible saber si el argumento se ha recibido o no durante la llamada a la función o procedimiento, con la función VBA IsEmpty, cuya sintaxis es la siguiente:


IsEmpty(Nombre_Argumento)
 

Esta instrucción devuelve True si se omite el argumento Nombre_Argumento, y False en caso contrario.

c. Pasar por referencia

Usando la palabra clave ByRef, la función o procedimiento al que se pasa el argumento, recibe «realmente» la variable y, si se modifica en el cuerpo de la función o del procedimiento, su valor también se modificará en la salida del procedimiento...

Ámbito y ciclo de vida de las variables

1. El ámbito

Cuando se declaran y se utilizan variables en un programa, se plantea la cuestión de la accesibilidad de estas variables respecto al conjunto del programa. Hay varias maneras de declarar variables/constantes. Según la palabra clave utilizada durante la declaración, la variable será accesible solamente desde algunos puntos del programa. De la misma manera, una variable solo se puede conservar durante la ejecución de un procedimiento o durante toda la ejecución de un programa.

Se definen tres niveles de acceso posibles:

  • A nivel de un procedimiento: se trata de todas las variables declaradas dentro del procedimiento, no son visibles ”fuera” del procedimiento. Se utilizan las palabras clave Dim y Static.

  • A nivel de un módulo: todos los procedimientos y funciones que se declaren dentro del módulo tendrán acceso a esta variable. Se utilizan las palabras clave Dim y Private.

  • A nivel del conjunto de los módulos del proyecto: se usa la palabra clave Public

En el siguiente ejemplo, la variable varProc tiene un ámbito de nivel procedimiento, la variable varModuloPrivado tiene un ámbito de nivel módulo y la variable varModuloPublico tiene un ámbito de nivel proyecto.


Public varModuloPublico As Integer 
Dim varModuloPrivado as Integer 
Sub Init() 
varModuloPublico = 50 
varModuloPrivado...

Convenciones de nomenclatura y tipos de código VBA

Es muy recomendable, incluso obligatorio, seguir ciertas reglas de nomenclatura cuando se escribe un programa en VBA. Estas convenciones fundamentalmente permiten facilitar la lectura y relectura del código. Las secciones que siguen permiten ayudarle a conocer algunas de estas reglas.

Las reglas que siguen no son las únicas que se pueden utilizar. Cada empresa, equipo de desarrollo o desarrollador puede tener su propia regla de nomenclatura. Sin embargo, las reglas de nomenclatura más frecuentes se indican en las siguientes secciones.

1. Regla general

Los nombres de objetos, variables, constantes, funciones y procedimientos están sujetos a algunas reglas en VBA.

  • El nombre comienza por una letra.

  • El nombre está limitado a 255 caracteres.

  • El nombre puede estar compuesto por letras, cifras y el carácter de subrayado (_).

  • El nombre no puede contener el carácter de puntuación ni de espacio.

  • El nombre no puede corresponder a una palabra de VBA reservada.

  • El nombre debe ser único dentro de un mismo ámbito.

Ejemplos de nombres válidos


Nombre_Becario 
NombreBecario 
Nombre_1_Becario
 

Aunque no esté prohibido en VBA, se desaconseja utilizar caracteres acentuados, ya que son específicos y solo se pueden gestionar con ciertos teclados, lo que hace complicado su manejo posterior en el programa.

2. Convención de nomenclatura de los objetos

De manera general, se deben renombrar los objetos de la interfaz (Controls). El nombre de los objetos sigue el modelo TypeOfControl, seguido de un número autoincrementado por Access. A continuación se muestran algunos ejemplos de nombres:

  • Texto12

  • Lista2

  • Comando8

Más allá de la dificultad de saber en el momento de codificar qué objeto hace referencia el nombre, es frecuente utilizar un prefijo que determine el tipo de objeto del que se trata, seguido del nombre del objeto. El uso de un carácter de subrayado entre el prefijo y el nombre del objeto puede ayudar en la lectura, pero no es un requisito previo.

A continuación se listan algunos prefijos para los objetos de control:

Prefijo

Objeto correspondiente

Ejemplo

Cbo

ComboBox: zona de lista desplegable

Cbo_Usuario

Lst

ListBox: zona de lista

Lst_Empresas

Txt

TextBox: zona de texto

Txt_Nombre

Lbl

Label: etiqueta

Lbl_Fecha_del_dia

Btn

CommandButton: botón de comando

Btn_Salir...

Las estructuras de decisión condicional

Cuando se desea ejecutar código dependiendo de varias alternativas, es necesario llamar a estructuras de decisión condicional.

1. La estructura de prueba If … Then … End If

a. Condicional único

En VBA, se usa la siguiente sintaxis:


If condición_1 Then  
    Instrucción_A  
[Else  
    Instrucción_B]  
End If
 

Los corchetes indican que las instrucciones situadas dentro son opcionales. El funcionamiento de esta estructura es el siguiente:

Si la condición condición_1 se cumple, entonces se ejecutará la instrucción Instrucción_A, en caso contrario se ejecutará la instrucción Instrucción_B.

Por ejemplo, consideremos un programa que asigna a una variable bMayor, declarada inicialmente, el valor True si un valor comprendido entre 0 y 99 se almacena en una variable Edad y este valor es estrictamente superior a 17. El programa se escribiría de la siguiente manera:


If Edad > 17 Then  
    bMayor = True  
Else  
    bMayor = False  
End If
 

De esta manera, si el valor almacenado en la variable Edad es estrictamente superior a 17 (es decir, contiene un valor comprendido entre 18 y 99), bMayor vale True (porque la persona que tiene estrictamente más de 17 años es mayor de edad, - mayoría...

Los bucles

En VBA, cuando queremos ejecutar varias veces la misma serie de instrucciones, en lugar de copiar n veces las mismas instrucciones, como en el siguiente ejemplo:


Sub Metodo_Erroneo() 
    Msgbox "Hola" 
    Msgbox "Hola" 
.... 
    Msgbox "Hola" 
End Sub
 

Es posible crear bucles, que indicarán al programa que debe ejecutar una serie de instrucciones varias veces. Hay varios tipos de bucles, que se explican en las siguientes secciones.

1. El bucle Do Loop

Hay varias estructuras de bucles Do Loop en VBA. Cada estructura tiene su sintaxis.

a. Do While Loop

La siguiente sintaxis:


Do While CondicionAComprobar 
    Instrucciones 
Loop
 

La instrucción dentro del bucle se ejecuta mientras la condición CondicionAComprobar se cumpla.

b. Do Loop While

La sintaxis siguiente:


Do   
    Instrucciones  
Loop While CondicionAComprobar
 

La instrucción dentro del bucle se ejecuta una primera vez, y se ejecuta de nuevo mientras la condición CondicionAComprobar se cumpla.

c. Do Until Loop

La sintaxis siguiente:


Do Until CondicionAComprobar 
    Instrucciones 
Loop
 

La instrucción dentro del bucle se ejecuta hasta que la condición CondicionAComprobar se cumpla.

d. Do Loop Until

La sintaxis siguiente:


Do 
    Instrucciones 
Loop Until CondicionAComprobar
 

La instrucción...

Las entradas-salidas en VBA

Durante la ejecución de un programa, es posible interactuar con el usuario por medio de cuadros de diálogo. Estos cuadros de diálogo permiten al programa dar información al usuario, así como pedírsela. Hay dos funciones principales que muestran estos cuadros de diálogo.

1. La función InputBox

Esta función muestra un cuadro de diálogo en el que el usuario puede escribir texto o hacer clic en un botón, y la función devuelve al programa el contenido de la zona de texto en forma de cadena de caracteres. Esta función VBA se declara de la siguiente manera:


Public Function InputBox( _  
    ByVal Prompt As String, _  
    Optional ByVal Title As String = "", _  
    Optional ByVal DefaultResponse As String = "", _  
    Optional ByVal Xpos As Integer = -1, _  
    Optional ByVal YPos As Integer = -1, _  
    Optional ByVal HelpFile As String = "", _  
    Opcional Context As Long) As String
 

Como puede comprobar al leer la declaración de esta función, muchos de los argumentos son opcionales. A continuación se muestra a qué corresponden:

Argumento

Descripción

Prompt

Corresponde al texto que se mostrará encima de la zona de texto en la que el usuario deberá escribir. Este argumento es obligatorio, limitado a 1024 caracteres. Es posible extender el texto en varias líneas, insertando retornos de carro (Chr(13)) y saltos de línea (Chr(10)).

Title

Corresponde al título que tomará el cuadro de diálogo. Este argumento es opcional y, si no se define ningún título, se mostrará como nombre de la aplicación "Microsoft Access".

DefaultResponse

Corresponde al valor por defecto de la zona de texto durante la visualización del cuadro de diálogo. Este argumento es opcional y, si no se define ningún valor por defecto, la zona de texto está vacía durante la visualización.

Xpos

Corresponde a la distancia horizontal, en píxeles (unidad relacionada con las pantallas), entre el borde izquierdo de la ventana y el borde izquierdo del cuadro de diálogo. Este argumento es opcional y, si no se indica ningún valor, el cuadro...

Las salidas anticipadas: instrucción Exit

Hasta ahora, el código contenido en las funciones y procedimientos se debía ejecutar hasta llegar a la línea de salida del programa (End Function o End Sub). Sin embargo, puede ser útil poder salir de una función o procedimiento antes del fin de su ejecución. Es posible hacerlo gracias a la palabra clave Exit, seguida de la palabra clave que determina la sección de código de la que saldrá el código.

1. Salida de la función: Exit Function

Es posible salir de una función antes del fin End Function. En el ejemplo siguiente, el programa saldrá de la función si el argumento proporcionado es igual a 0:


Function SiNoNul(x as Integer) As Boolean 
SiNoNul = False 
If x = 0 Then 
    Exit Function 
End If 
... 
End Function
 

En caso en que la variable x que se pase como argumento no sea igual a 0, el código se continúa hasta llegar a la instrucción de fin de la función End Function.

2. Salida de un procedimiento: Exit Sub

Es posible salir de un procedimiento antes del fin End Sub. En el siguiente ejemplo, el programa saldrá del procedimiento si el argumento proporcionado es una cadena de caracteres vacía.


Sub SiNoVacia (x as String) 
If x = "" Then 
    Exit Sub 
End If 
... 
End Sub
 

En caso en que la variable...

La administración de errores en VBA

Cuando comenzamos en programación, incluiso cuando ya hemos escrito varios miles de líneas de código, puede suceder que el programa no esté perfectamente codificado y que haya errores al intentar ejecutarlo. Hay varios tipos de errores, y vamos a explicar los métodos que nos pueden permitir evitarlos.

1. Los posibles tipos de error

Cuando codificamos, hay varios errores posibles que se pueden cometer a diferentes niveles del código.

a. Los errores de sintaxis

Hablamos de error de sintaxis cuando el programa está escrito de manera incorrecta, desde un punto de vista sintáctico. Por lo general VBE detecta directamente este tipo de error y la línea se colorea en rojo (o en el color elegido en las opciones, ver la sección Las opciones de VBE - Formato del editor, en el capítulo VBE y seguridad en Access 2016). Para que se haga esta detección automática, es necesario marcar la casilla de selección Comprobación automática de sintaxis en las opciones de VBE (ver la sección Las opciones de VBE - Editor, en el capítulo VBA y seguridad en Access 2016). Los errores de sintaxis pueden deberse al olvido de palabras o a la incorrecta escritura de palabras.

Ejemplos de errores

El siguiente código genera un error, ya que se ha olvidado la palabra clave Then.


Sub AusenciaPalabaClave () 
    Dim a As Integer 
    'la línea siguiente está incompleta, 
   se ha olvidado la palabra clave Then 
    If a=1  
          a = a + 1 
    End If 
End Sub
 

El siguiente código genera un error, ya que la palabra clave End tiene un error ortográfico.


Sub ErrorOrtograficoPalabraClave() 
    Dim a As Integer  
    If a = 1 Then  
          a = a + 1  
    ' la línea siguiente tiene un error ortográfico,  
    ' la palabra clave And se debe sustituir por la palabra clave End 
    And if  
End Sub
 

El código siguiente genera un error, ya que los paréntesis implican el uso de una asignación de variable.


Sub ErrorEnParentesis ()  
    'la línea siguiente tiene demasiados...