Evitar conflictos de nomenclatura
Si intenta crear o usar un identificador que ya se ha definido con anterioridad, se producirá un conflicto de nombres. En algunos casos, los conflictos de nomenclatura generan errores como el nombre ambiguo detectado o la declaración Duplicate en el ámbito actual. Los conflictos de nomenclatura que no se detectan pueden dar lugar a errores en el código que generan resultados erróneos, especialmente si no declara explícitamente todas las variables antes del primer uso.
Evitará la mayoría de los conflictos de nombres si comprende bien la definición del ámbito y losniveles de módulo privado y el público.
Puede producirse un conflicto de nombres si un identificador:
- Resulta visible en varios niveles de ámbito.
- Tiene dos significados diferentes en el mismo nivel.
Por ejemplo, se puede asignar el mismo nombre a procedimientos ubicados en módulos distintos. Por ello, si lo desea puede definir un procedimiento llamado MySub
en cada uno de los módulos Mod1
y Mod2
. Mientras se llame a cada procedimiento desde otros procedimientos ubicados en su propio módulo, no se producirá ningún conflicto. Sin embargo, puede producirse un error si MySub
se llama desde un tercer módulo y no se proporciona ninguna calificación para distinguir entre los dos MySub
procedimientos.
La mayor parte de los conflictos de nombres pueden resolverse si se precede a cada identificador de un calificador consistente en el nombre del módulo y, si resulta necesario, de un nombre de proyecto. Por ejemplo:
YourProject.YourModule.YourSub MyProject.MyModule.MyVar
El código anterior llama al procedimiento YourSub
Sub y pasa MyVar
como argumento. Use cualquier combinación de calificadores para diferenciar identificadores idénticos.
Visual Basic hace coincidir a cada referencia con un identificador que dispone de la declaración "más próxima" de un identificador coincidente. Por ejemplo, si MyID
se declara Public en dos módulos de un proyecto (Mod1
y Mod2
), puede especificar el MyID
declarado en Mod2
sin calificación desde dentro Mod2
de , pero debe calificarlo como Mod2.MyID
para especificarlo en Mod1
.
Esto también es cierto si Mod2
está en un proyecto diferente pero al que se hace referencia directamente. Sin embargo, si Mod2
se encuentra en un proyecto al que se hace referencia indirectamente, es decir, un proyecto al que hace referencia directamente el proyecto al que hace referencia, las referencias a la Mod2
variable denominada MyID
siempre deben calificarse con el nombre del proyecto. Si se hace referencia a MyID
desde un tercer módulo al que el usuario hace referencia de forma directa, la coincidencia se realizará con la primera declaración que se encuentre en la búsqueda:
- Proyectos a los que se hace referencia directamente, en el orden en que aparecen en el cuadro de diálogo Referencias del menú Herramientas .
- Los módulos de cada proyecto. Tenga en cuenta que no hay ningún orden inherente a los módulos del proyecto.
No puede reutilizar nombres de objetos de la aplicación host en niveles de ámbito diferentes, como R1C1 en Microsoft Excel.
Sugerencia
[!SUGERENCIA] Entre los errores típicos que generan los conflictos de nombres se encuentran nombres ambiguos, declaraciones duplicadas, identificaciones no declaradas y procedimientos que no se encuentran. Al comenzar cada módulo con una instrucción Option Explicit para forzar declaraciones explícitas de variables antes de que se usen, puede evitar algunos posibles conflictos de nomenclatura y errores relacionados con el identificador.
Vea también
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.