Enumerações

Enumeração é uma constante qualificada que pode ser acessada diretamente, e possui algumas peculiaridades.

Introdução

É fundamental ler a página sobre constantes antes de continuar.

Enumerações são tipos de dados que possuem constantes numéricas como membros. Existem enumerações pré-definidas no VBA e no aplicativo que hospeda o VBE, e, além disso, você pode criar também suas próprias enumerações.

Enumerações Pré-Definidas

Observe o código abaixo:

MsgBox "Dados preenchidos com sucesso.", vbInformation

Conforme explicado na página sobre constantes, é mais fácil memorizar vbInformation a 64 para modificar a interface de um caixa de mensagem.

Indo mais a fundo, vbInformation é uma constante que faz parte da enumeração pré-definida vbMsgBoxStyle. Tecnicamente, falamos que a constante vbInformation é um membro da enumeração VbMsgBoxStyle. Você pode descobrir isso usando o Pesquisador de Objeto.

A Janela Pesquisador de Objeto

No VBE, pressione F2 para exibir a janela Pesquisador de Objeto. Seguindo o exemplo desta página, digite vbInformation na caixa de combinação de baixo, como mostrado e clique no ícone de binóculo:

O resultado nos traz informações interessantes. Na primeira caixa de listagem, é mostrado que vbInformation é um membro da classe (nesse caso, uma enumeração) vbMsgBoxStyle, e essa enumeração faz parte da biblioteca VBA.

Abaixo da caixa de listagem são mostrados mais detalhes dessa seleção. Há um lista com todas as classes (e enumerações) da biblioteca VBA, e na caixa de listagem ao seu lado, todos os membros (isto é constantes) do item selecionado, que nesse caso é a enumeração VbMsgBoxStyle:

E por fim, na porção inferior da tela (de cor fundo cinza), é mostrado que vbInformation é uma constante (por causa da palavra Const), seu valor decimal (64), seu valor hexadecimal (&H40) e sua qualificação da forma biblioteca.membro.

A biblioteca VBA é discutida com mais detalhes em outra página deste site, no entanto, é importante você saber que pode se referenciar à constante vbInformation de qualquer uma das formas que desejar abaixo:

Sub Main()
  Debug.Print vbInformation
  Debug.Print VbMsgBoxStyle.vbInformation
  Debug.Print VBA.VbMsgBoxStyle.vbInformation
End Sub

Você pode se referir diretamente à uma constante pelo seu nome, qualificando-a com o nome de sua enumeração ou até mesmo qualifica-la no nível de biblioteca. A saber, função MsgBox faz parte da biblioteca VBA, bem como a enumeração VbMsgBoxStyle.

Enumerações Personalizadas

A vantagem em usar enumerações personalizadas é que você pode agrupar constantes do seu projeto de uma forma lógica.

As regras para dar nome a uma enumeração são iguais para variáveis e constantes.

Para declarar uma enumeração, utilize a instrução Enum:

Enum Abrigo
  Casa = 1
  Prédio = 2
  Hotel = 3
  ApartHotel = 4
End Enum

Enumerações devem ser declaradas na Seção de Declaração de um módulo e possuem dois níveis de escopo: local (nível de módulo) e global (nível de projeto). Se você não especificar o escopo de uma enumeração, então ela será considerada global. Logo:

Enum Abrigo

É equivalente a:

Public Enum Abrigo

Para definir uma enumeração local, utilize a palavra chave Private:

Private Enum Abrigo

Particularmente, utilizo o prefixo e para indicar uma enumeração, sendo o exemplo acima eAbrigo, e não diferencio enumerações locais de globais. Algumas pessoas utilizam, além de e, g ou m para identificar seu escopo. Então, a enumeração local de abrigo poderia ser chamada de meAbrigo e a global de geAbrigo.

Exibir Constantes de uma Enumeração

Você pode qualificar ou não uma enumeração ao usá-la em seu projeto:

Private Enum eAbrigo
  Casa = 1
  Prédio = 2
  Hotel = 3
  ApartHotel = 4
End Enum
 
Sub Main()
  'Você pode representar a constante Prédio de duas formas:
  Debug.Print Prédio
  Debug.Print eAbrigo.Prédio
End Sub

Particularmente, qualifico a enumeração, pois assim aproveito do recurso Intellisense (janela suspensa da janela de código) do VBE:

Valores Padrões de Membros de uma Enumeração

Você não é obrigado a especificar o valor de cada membro de uma enumeração. Você pode deixá-las em branco. Logo:

Private Enum eAbrigo
  Casa = 1
  Prédio = 2
  Hotel = 3
  ApartHotel = 4
End Enum

É equivalente a:

Private Enum eAbrigo
  Casa = 1
  Prédio
  Hotel
  ApartHotel
End Enum

Você poderia deixar, no exemplo acima, o membro Casa sem definição, que por padrão, o VBA por padrão adotaria 0.

Você pode usar valores negativos também nas definições, se assim quiser.

Usar Enumeração como Tipo de Dados

Quando você cria uma enumeração, você também cria um tipo de dados. Você pode, então, declarar uma variável como um tipo de dados de sua enumeração personalizada:

Dim Abrigo As eAbrigo

A vantagem de se utilizar um tipo de dados como enumeração é, além de não precisar decorar um número para um valor de tipo de abrigo, utilizar o recurso do Intellisense do VBE. Quando você declara uma variável como uma enumeração, ao pressionar = no VBE ou entrá-la como argumento em outro procedimento, o Intellisense é mostrado:

A partir daí, basta usar as setas direcionais (ou digitar as primeiras letras da constante) e pressionar Tab ou Enter.

 

Sobre Felipe Gualberto

Microsoft Most Valuable Professional (MVP) de Excel.
Esta entrada foi publicada em Tutoriais e marcada com a tag , , , , , . Adicione o link permanente aos seus favoritos.