ms access - enviar - ¿Cómo fuerzo a VBA/Access a requerir que se definan las variables?
access enviar correo (3)
Un poco de historia en OPTION EXPLICIT y Access VBA
Para continuar con la respuesta de Tony, aquí hay una explicación de por qué hay problemas con OPTION EXPLICIT en algunos módulos de código de Access.
En Access 95 y Access 97 (las dos primeras versiones de Office con VBA), Access tenía un editor de código diferente a los otros programas de Office. En Access 2000, Microsoft implementó el VBE desde las otras aplicaciones de Office en Access. Al mismo tiempo, MS optó por hacer que los módulos de Access VBA se comportaran como los módulos de las otras aplicaciones, que por defecto no tienen OPCIÓN EXPLÍCITA.
Así, en Access 2000, de forma predeterminada, los módulos se crearon sin OPTION EXPLICIT.
Esta fue, por supuesto, una decisión de diseño realmente estúpida por parte de MS, y la revocaron más tarde (no puedo recordar si fue Access 2002 o 2003 el que solucionó el problema y volvió a la opción EXPLICIT en todos los módulos nuevos). La razón por la que fue estúpido (y MS debería haberlo sabido) es porque Access es una herramienta de DESARROLLO DE APLICACIÓN DE BASE DE DATOS, y por lo tanto está operando en datos que están fuertemente tipados. Por lo tanto, el entorno de código debe escribirse fuertemente por defecto para que esté en armonía con los datos con los que está trabajando.
En Excel o Word, los datos no se escriben con mucha fuerza y, por lo tanto, tiene más sentido utilizar tipos de datos variables para casi todo, simplemente para que sea más fácil para todos. La desventaja de implementar eso al no usar OPTION EXPLICIT es que puedes terminar con errores tipográficos que automáticamente introducen nuevas variables [como la variable "intrdoduce"; si estuviera escribiendo este post con OPTION EXPLICIT, eso no hubiera ocurrido sin produciendo un error de tiempo de ejecución! :)]. Este es un problema con todos los lenguajes que funcionan de esta manera (me quito el cabello trabajando en PHP, donde los nombres de las variables pueden ser distintos según el caso, es decir, $ Var no es la misma variable que $ var; pero estoy divagando), pero MS tomó la decisión de implementarlo de esa manera en Word y Excel sobre la teoría de que las personas que escriben código no tendrán más dificultades si no se les obliga a declarar sus variables.
Por lo tanto, MS cometió el error de hacer que la versión de Access del VBE se pareciera a la de otras aplicaciones, aunque no existía una lógica interna para los propósitos de Access que permitieran ese movimiento. Y MS luego retiró ese cambio y regresó al status quo anterior (es decir, OPCION EXPLÍCITA por defecto en todos los módulos).
Por lo tanto, a menudo verá aplicaciones que se iniciaron en Access 2000 que tienen módulos en todas partes sin OPTION EXPLICIT. Cuando tengo que trabajar en una aplicación de este tipo, mi primera tarea es implementar OPTION EXPLICIT en todos los módulos y luego arreglar la maldita cosa para que se compile (lo que a menudo es bastante difícil, dado que la cosa se programó sin ella).
Estoy haciendo algunos cambios significativos en algunos códigos de VBA, y algunas variables se están eliminando y / o cambiando de nombre. Sería mucho más fácil encontrar todas las ubicaciones que necesito actualizar si el compilador se quejara de que las variables no existen en lugar de crearlas sobre la marcha.
¿Cómo fuerzo a VBA / Access a requerir que se declaren las variables?
Esta pregunta fue muy útil para Excel, puede ver si funcionará para Access:
Básicamente, MZ-Tools buscará en tu código y te dirá lo que no se está utilizando. La versión para VBA se puede encontrar here . Utilice la función de revisión de código fuente .
Debe usar Option Explicit
en la parte superior de cada módulo de código VBA, incluidos los formularios y los informes.
Puede configurar esto para todos los módulos creados en el futuro y el código VBA detrás de los formularios e informes ingresando en el editor de VBA >> Herramientas >> Opciones >> pestaña Editor y asegurándose de que se requiere la Declaración de Variable Requerida.
Desde la ayuda de Access 2003:
Requerir declaración de variable: determina si se requieren declaraciones de variables explícitas en los módulos. Al seleccionar esto, se agrega la declaración
Option Explicit
a las declaraciones generales en cualquier módulo nuevo.
También utilizo estuche de camello cuando atenúo mis variables. ThisIsAnExampleOfCamelCase
. Tan pronto como salgo de la línea del código VBA, si Access no cambia la variable de minúsculas a camel case, entonces sé que tengo un error tipográfico.