Desenvolvimento - Office
Excel: Implementando propriedades personalizadas sem classes
É pouco sabido que a pasta de trabalho e planilhas funcionam como “classes personalizadas” no Excel. Isso implica que podemos criar propriedades que serão adicionadas ao objeto em questão sem a necessidade da criação, programação e instanciamento de classes.
por Robert MartimNOTA
Caso o leitor queira aprender mais sobre classes, veja o curso de classes disponível no site. Nele há tudo que você precisa saber sobre criação de propriedades, métodos, eventos, etc.
Observe o exemplo:
EstaPasta_de_trabalho.ComputerName
No exemplo acima, criamos uma propriedade nova para o objeto EstaPasta_de_trabalho chamada ComputerName (o nome utilizado mantém o idéia de polimorfismo, veja o curso de Classes para explicações completas).
IMPORTANTE
Infelizmente, a tradução de certos objetos do Excel faz com que VBA escrito em pastas em inglês se comportem de forma diferente em português. Ao criar um documento no Excel em inglês use ThisWorkbook.NomeDaPropriedade. Quando criar um documento em português use EstaPasta_de_trabalho.NomeDa-Propriedade. O mesmo vale para planilhas, Sheet1.NomeDaPropriedade e Plan1.NomeDaPropriedade. Finalmente, caso queira, modifique o nome do objeto utilizando a propriedade Name. Ao fazer isso, você poderá padronizar os nomes. O ideal é que todos os objetos possuam o nome em ingles para efeitos de polimorfismo. |
Via de regra, propriedades podem vir nas seguintes formas:
• Somente escrita: neste caso possuímos apenas a instrução Property Let no objeto em questão. Um valor pode ser passado, mas não pode ser lido da propriedade;
• Somente leitura: neste caso possuímos apenas a instrução Property Get no objeto em questão. Um valor pode ser lido, mas não pode ser passado para a propriedade;
• Escrita/Leitura: Uma propriedade completa poderá ser escrita e lida pelo usuário.
Property Let para ThisWorkbook
A instrução Property Let
permite que o usuário (ou programador) passe um valor para uma propriedade
qualquer. Aqui, passaremos um valor para uma propriedade dentro da pasta de
trabalho, isto é, criaremos uma propriedade dentro da janela de código
da pasta de trabalho.
Note que, por definição, qualquer código digitado em uma
pasta de trabalho é privado (Private).
Porém, propriedades criadas desta forma serão expostas em todo
o projeto. Caso queira que seja privada, utilize a palavra-chave Private.
A criação de uma propriedade é bastante simples:
Private pstrComputerName
As String
Public Property
Let ComputerName(ByVal strCName As String)
pstrComputerName = strCName
End Property
Na parte das declarações gerais da pasta de trabalho, declaramos
uma variável global privada a qual será utilizada dentro da pasta
de trabalho. Por exemplo, poderíamos passar o valor para a propriedade
da seguinte forma:
Figura 1-1 Expondo propriedades
personalizadas
Conforme observado, o ideal é que você mantenha os objetos com
um nome reconhecido internacionalmente para evitar confusão em termos
de nomenclatura. O objeto EstaPasta_de_trabalho
é reconhecido internacionalmente como ThisWorkbook.
Sendo assim, é interessante manter esta nomenclatura. Embora não
seja algo obrigatório, isso facilitará a compreensão por
terceiros.
Para modificar o nome do objeto, abra a Janela de Propriedades (pressione F4)
caso não esteja aberta. Abra o objeto em questão e modifique a
propriedade Name para ThisWorkbook:
Figura 1-2 Nome do objeto no idioma de instalação
do Excel
Após a modificação:
Figura 1-3 Nome do objeto modificado para efeitos
de polimorfismo
Finalmente, você pode chamar a propriedade utilizando o objeto ThisWorkbook
o qual é reconhecido internacionalmente e não causaria confusão
em termos do que ele realmente significa:
Figura 1-4 Expondo a propriedade do objeto utilizando
novo nome
Property
Get
para ThisWorkbook
Uma vez que você tenha definido uma propriedade de escrita, certamente
que deseja ler o valor escrito. Para tanto, utilizamos a instrução
Property Get para reaver o valor
passado para a propriedade ou o valor fixo da propriedade:
Public
Property Get ComputerName() As String
ComputerName
= pstrComputerName
End
Property
Note que o nome da propriedade é exatamente o mesmo, porém o valor
da propriedade é o valor passado para a variável global declarada
no tópico anterior. Alternativamente, você pode simplesmente definir
um valor fixo para a propriedade.
Property Let e Property Get para Sheet
A mesma lógica deve ser aplicadas às planilhas. Vejamos:
Private
pblnEnableActivate As Boolean
Public
Property Let EnableActivate(ByVal strCName As Boolean)
pblnEnableActivate
= strCName
End
Property
Public
Property Get EnableActivate() As Boolean
EnableActivate
= pblnEnableActivate
End
Property
Para que as propriedades fiquem agrupadas e por razões de polimorfismo,
utilizo o nome EnableActivate.
Ao expor a propriedade ela estará agrupada com outras propriedades com
funções similares:
Figura 1-5 Propriedade personalizada para planilhas
Colocando em prática
O leitor pode utiizar o método de criação de propriedades
personalizadas para diversas finalidades tais como encapsulação
de APIs. No exemplo que segue, veremos algo simples. Suponha que o objetivo
seja travar uma determinada planilha. Nós criamos a propriedade EnableActivate
a qual determina se a planilha pode ou não ser ativada.
Os cenários variam. Por exemplo, poderíamos bloquear tal acesso
permitindo que somente os usuários com determinados privilégios
possam acessar a planilha. Aqui, modificaremos o valor da propriedade quando
a pasta de trabalho for aberta:
Private
Sub Workbook_Open()
Sheet1.EnableActivate
= False
End
Sub
Em seguida, adicione o seguinte código na planilha que deve ser travada
(assumindo que a propriedade já foi declarada):
Private
Sub Worksheet_Activate()
Dim
ws As Worksheet
If
Not (Me.EnableActivate) Then
MsgBox
"Você nao pode ativar esta planilha!", vbCritical
If
ThisWorkbook.Sheets.Count = 1 Then
ThisWorkbook.Sheets.Add
Else
For
Each ws In ThisWorkbook.Sheets
If
ws.Name <> Me.Name Then
ws.Activate
Exit
For
End
If
Next
ws
End
If
End
If
End
Sub
Conclusão
Neste curto artigo mostro como criar propriedades personalizadas as quais são expostas por objectos comuns no Excel como ThisWorkbook e Sheet, um recurso pouco utilizado no Excel, mas que pode economizar bastante dor de cabeça além de incorporar propriedades de fácil implementação.
Este artigo é excerto do material de Treinamento encontrado na loja do site em http://shop.linhadecodigo.com.br o qual trata de APIs, acesso ao Registry (escrita e leitura), propriedades personalizadas e enumeração personalizada. O material é desenvolvido sobre o Excel 2003 português.
Robert Friedrick Martim, Expert da Comunidade Excel
Robert Martim é Economista, Formado e Pós-Graduado em Finanças pela Universidade
de Londres, Microsoft MVP Excel.
- Data Bars para MS-AccessAccess
- Funcionalidades do Office usando Visual Studio for Office – Parte 3C#
- Funcionalidades do Office usando Visual Studio for Office - Parte 2C#
- Estenda as funcionalidades do Office com o Visual Studio for OfficeC#
- Como evitar processos pendurados na automação do ExcelOffice