Evitando conflitos de nomenclatura

Um conflito de nomenclatura ocorre quando você tenta criar ou usar um identificador que foi definido anteriormente. Em alguns casos, conflitos de nomenclatura geram erros como nome ambíguo detectado ou declaração duplicada no escopo atual. Nomear conflitos que não são detectados pode resultar em bugs em seu código que produzem resultados incorretos, especialmente se você não declarar explicitamente todas as variáveis antes do primeiro uso.

Você pode evitar a maioria dos conflitos de nomenclatura entendendo o escopo, o nível do módulo privado e o nível do módulo público.

Um conflito de nomenclatura pode ocorrer quando um identificador:

  • Está visível em mais de um nível de escopo.
  • Tem dois significados diferentes no mesmo nível.

Por exemplo, procedimentos em módulos separados podem ter o mesmo nome. Portanto, você pode definir um procedimento nomeado MySub em módulos nomeados Mod1 e Mod2. Nenhum conflito ocorrerá se cada procedimento for chamado apenas de outros procedimentos em seu próprio módulo. No entanto, um erro pode ocorrer se MySub for chamado de um terceiro módulo e nenhuma qualificação for fornecida para distinguir entre os dois MySub procedimentos.

A maioria dos conflitos de nomenclatura pode ser resolvida antes de cada identificador com um qualificador que consiste no nome do módulo e, se necessário, em um nome de projeto . Por exemplo:

YourProject.YourModule.YourSub MyProject.MyModule.MyVar

O código anterior chama o procedimento YourSubSub e passa MyVar como um argumento. Use qualquer combinação de qualificadores para diferenciar identificadores idênticos.

O Visual Basic corresponde a cada referência a um identificador com a declaração "mais próxima" de um identificador correspondente. Por exemplo, se MyID for declarado Público em dois módulos em um projeto (Mod1 e Mod2), você poderá especificar o MyID declarado Mod2 sem qualificação de dentro Mod2, mas você deve qualificá-lo Mod2.MyID como para especifique-o em Mod1.

Isso também é verdade se Mod2 estiver em um projeto diferente, mas diretamente referenciado. No entanto, se Mod2 estiver em um projeto referenciado indiretamente, ou seja, um projeto referenciado pelo projeto que você referencia diretamente, as Mod2 referências à variável nomeada MyID devem ser sempre qualificadas com o nome do projeto. Se você fizer referência MyID a partir de um terceiro módulo referenciado diretamente, a correspondência será feita com a primeira declaração encontrada pesquisando:

  • Projetos referenciados diretamente, na ordem em que eles aparecem na caixa de diálogo Referências do menu Ferramentas .
  • Os módulos de cada projeto. Observe que não há ordem inerente aos módulos no projeto.

Você não pode reutilizar nomes de objetos host-application , por exemplo, R1C1 no Microsoft Excel, em diferentes níveis de escopo.

Dica

Erros típicos causados por conflitos de nomenclatura incluem nomes ambíguos, declarações duplicadas, identificadores não declarados e procedimentos que não são encontrados. Ao iniciar cada módulo com uma instrução Opção Explícita para forçar declarações explícitas de variáveis antes de serem usadas, você pode evitar alguns possíveis conflitos de nomenclatura e bugs relacionados ao identificador.

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.