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 YourSubSub 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 Mod2de , 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.