Buenas Prácticas de Programación en VBA

12 Recomendaciones básicas para la producción de buen código en VBA

Citation
, XML
Authors
Ver también:
 
Las buenas prácticas están relacionadas con la calidad del software, permiten escribir código: 

* Auto documentado, claro 
* Fácil de depurar y modificar 
* Modular 
* Robusto 

Son una serie de prácticas no obligatorias, su uso depende del tamaño y la complejidad del software, a mayor complejidad más importantes las buenas prácticas, algunas son: 

1. Declarar todas las variables. hay dos formas de declarar variables

Dim variableName As DataType 
Ej: Dim age As Integer 
Ej: Dim value1, value2 As Double 

Dim variableName As DataType = initialValue 
Ej.: Dim counter As Integer = 0 
Ej.: Dim theString As String = “” 
Ej.: Dim found As Boolean = False 

2.Visual Basic provee una gran cantidad de tipos de datos: 
Entero: Byte, Short, Integer y Long (1, 2, 4 y 8 bytes) 
Real: Single, Double, Decimal (4, 8 y 16 bytes; Decimal es usado para cantidades monetarias) 
Booleano: Boolean (2 bytes) 
Caracter: Char (2 bytes; Unicode) 
String: String (10 bytes y 2 bytes por cada caracter) 
Fecha y Hora: Date (8 bytes) 

3.En Visual Basic las variables se inicializan automáticamente
Las variables numéricas se inicializan en 0 
Las variables alfanuméricas se inicializan en “” 
Las variables lógicas se inicializan en False 
Las variables para fechas se inicializan en #01/01/0001 12:00:00 AM 

4.Para declarar una constante simbólica se usa el siguiente formato: 

Const constantName As DataType = value 
Ej.: Const PI As Double = 3.1415 
Ej.: Const MAX_SIZE As Integer = 15 

5. Alcance y Tiempo de Vida 
El alcance define la porción del programa en la que una variable o constante simbólica es accesible. En Visual Basic hay varios distintos niveles de alcance: 

Local a un bloque Local a un método 
Local a una clase, un formulario o un módulo 
Global al proyecto 

Los siguientes son ejemplos de cómo se declaran variables de acuerdo al alcance deseado: 

Dim n As Integer si n es local a bloque o método 
Pivate n As Integer si n es local a una clase (incluyendo formularios y módulos) 
Public n As Integer si n es global al proyecto (normalmente se coloca en un módulo) 

l Con respecto a las variables y constantes simbólicas: 
Estas deben ser declaradas lo más local a la porción del programa que las utiliza 
Estas deben ser declaradas a nivel de formulario sólo en caso de que sea necesario compartir valores entre event handlers 
Estas deben ser declaradas como globales sólo en caso de que sea necesario compartir valores entre formularios 

6. Usar funciones 
Una función es un método que produce un solo resultado después de evaluar sus argumentos El .NET Framework provee un conjunto de métodos que pueden ser usados como funciones Además Visual Basic provee sus propias funciones internas o intrínsecas 

7. Auto documentación 
Usar comentarios en todas las líneas que no sean obvias, los comentarios deben ser cortos y explicativos Hay dos formas de comentar 

Rem comentario 
´comentario 

Los comentarios pueden ir en cualquier parte de una línea y todo lo que se escribe después hasta el fin de la línea el compilador no lo toma en cuenta como ejecutable 

8. Indentación y líneas en blanco 
Indentar es usar los tab para marcar bloques de código tales como if..then o for…next Todo código bien escrito debe ir indentado, comentado y llevar líneas en blanco que separe trozos de procedimiento 

9. Nombres de variables 
Este es uno de los factores más importantes para escribir código robusto y fácil de depurar, el nombre de una variable debe decir acerca de su contenido, debe ser corto, claro y consistente con los nombres de otras variables del mismo tipo, para eso se usan las convenciones de nombre, por ejemplo: 

Los nombres de componentes (user form, command button, combobox, etc.) es recomendable que comienzen con palabras que identifiquen al componente, ej: FormInicio, CommandAgregar, ComboElegirArticulo, etc. 
Los nombres de constantes (que no cambian) generalmente se ponen en mayúscula, para índices se usan letras como i%, x%, z%, etc. al agregar % al nombre se indica que es un tipo de dato valor entero (entre -64000 y 64000 aproximadamente) 

10. Declaración de las variables 
Se recomienda incluir en todo programa un módulo global que incluya la instrucción Option Explicit Esta nos obliga a declarar todas las variables, lo que evita la mayor parte de los errores en VBA al momento de interpretar el código 

11. Programación modular y reusabilidad del código 
Se recomienda usar funciones y módulos sub que puedan ser reusables para las tareas comunes, por ejemplo leer datos de un archivo, grabar datos a un archivo en una posición determinada, grabar datos en la última posición (a la cola) etc. Así tendremos una biblioteca con muchas funciones estandar para usar en distintos programas. 

12. Type Mismatch (error de tipos) es uno de los errores más comunes al programar en VBA y puede ser difícil de entender y depurar, se refiere a que el tipo de dos variables en una asignación no coincide, por ejemplo:

TextBoxNombre=Nombre 
Si aparece type mismatch en una línea así es probablemente porque el tipo de TextBoxNombre es un string (texto) mientras que la variable Nombre es de tipo numérico. ¿Por qué ocurre esto? porque Visual Basic asigna valores por defecto cuando no declaramos el tipo y estos valores por defecto pueden no coincidir.

Muchos de estos problemas no ocurren normalmente porque por defecto Visual Basic asigna el tipo “variant” que acepta todo tipo de datos y hace las conversiones basado en suposiciones de diseño, por ejemplo, si Nombre=”Juan” y Apellido=”Perez” entonces 

Nombre+Apellido=Juan Perez (las supone string) 
En cambio si Nombre = 3 y apellido = 5 Nombre+Apellido=8 (las supone numéricas)  

Cuando estas suposiciones no son como esperamos, normalmente parece el error Type Mismatch, esto se arregla cuando declaramos el tipo de todas las variables usando Option Explicit