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 YourSub
Sub 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.