Você está na página 1de 11

INF 1503 – Atividades da Aula

Parte dessa aula foi retirada do site: http://www.anthony-vba.kefra.com/index_011.htm

A) Controles de formulários

Nos exercícios das aulas anteriores, havia sempre a dificuldade de se conectar o valor de uma
seleção (por exemplo, via drop down menu) ao valor selecionado. Há uma maneira rápida de fazer
isso com a função CHOOSE. Faça o exemplo abaixo:

As células de B2 a B8 servirão como as opções da caixa de drop down, cujo resultado está
vinculado à célula D8. A célula D10 escreverá o valor escolhido com a função choose:

=CHOOSE(D8;"segunda";"terça";"quarta";"quinta";"sexta";"sábado";"domingo")

A função choose tem como primeiro parâmetro a célula a ser lida (D8) e a lista de opções a serem
escritas, conforme o valor dessa célula seja 1, 2, 3, 4, e assim por diante. Assim, como na figura
acima o valor escolhido foi 4 – quarta opção do drop down, a célula D10 apresenta o valor “quinta”,
que é a quarta opção da função choose.

Uma outra forma interessante de obter os valores de uma lista é através da função index. Refaça o
exercício anterior, colocando na célula E10 a função index:

=INDEX(B2:B8;D8;1)

O primeiro parâmetro da função é o conjunto de valores de onde foi tirada a lista (B2:B8) e o
segundo parâmetro é a célula que contém o valor selecionado (D8). O terceiro parâmetro é a
coluna, caso a área de seleção (primeiro valor tenha mais de uma coluna). Com isso, você pode
usar a função index para obter, a partir de uma tabela, todos os valores selecionados por um
controle de formulário.

Exercício: Use a tabela abaixo e crie uma caixa de listagem com o nome dos automóveis. Depois,
use 3 vezes a função index para escrever em outras células o nome do carro, o valor e o ano. Na
prática, isso é equivalente a obter o índice e usar a função procv na tabela.
Modelo Valor Ano
1 FIAT BRAVA SX 1.6 16V 4P 19.900 2000
2 FIAT MAREA TURBO 2.0 20V 4P 47.800 2003
3 FIAT MAREA WEEKEND ELX 2.0 20V 4P 22.300 2000
4 FIAT PALIO ELX 1.0 16v 18.000,00 2002
5 FIAT SIENA ELX 1.3 16V 25.900 2002
6 FIAT STRADA ADVENTURE 1.8 29.800 2004
7 FIAT TIPO 1.6 I.E. 4P 8.500 1994
8 FIAT UNO CS 4.800 1989
9 FIAT UNO MILLE EP I.E. 7.500 1996

Na figura abaixo, a caixa de listagem ficou vinculada à célula A15. As células B17, C17 e D17
foram escritas usando-se a função index. Por exemplo, para a B17:

=INDEX($A$2:$D$10;$A$15;2)

(dentro da matriz de A2 até D10 – que é a tabela – escreva o elemento da linha número x e
segunda coluna. Esse número x da linha é dado pela célula A15, que por sua vez foi dado pelo
valor selecionado na caixa de listagem)

B) Criando sua Primeira Macro no VBA (Visual Basic for Applications)

1. Abra o Visual Basic Editor: Tools...Macro...Visual Basic Editor ou simplesmente clique [Alt] e
[F11] simultaneamente
2. No menu Insert do Editor de Visual Basic, selecione Module para abrir uma janela do novo
módulo (janela de código). A macro localizada em um módulo vale para todas as planilhas do
Excel, diferentemente de que se ela estivesse na janela de código de uma planilha.

3. Na janela de código, escreva o seguinte:

Sub showMessage()
MsgBox "Hello World!"
End Sub
4. Clique no botão “Run”, , ou aperte [F5], ou vá para Run..Run Sub/UserForm para executar
o programa que você acabou de criar.

5. A caixa de mensagens com o texto "Hello World!" aparece. Esse é o seu primeiro programa
VBA!

Obs: Procure na caixa de macros, que você encontrará essa macro (showMessage). Você
pode atribuir um botão ou item de menu a esta macro, da mesma forma que você fez em
aulas anteriores, com as macros gravadas diretamente da sua interação com o Excel.
C) Obtendo a sintaxe de uma macro gravada interativamente.

O gravador de macros do Excel, na verdade, traduz suas ações no momento da gravação da


macro para comandos VBA. Depois de gravada a macro, você pode ter acesso a esse código
gerado. Todas as suas ações durante a gravação de uma macro são traduzidas para VBA,
inclusive suas correções de erros (daí a razão de alguma macro não funcionar muito bem em
certas situações).

Nesse exemplo, vamos gravar uma macro que pinta o fundo de um conjunto de células de
amarelo-claro. Para gravar a macro, siga os passos abaixo:

1. Selecione Tools...Macro... Record New Macro

2. Na caixa de diálogos, digite "SetBackgroundColor" como nome da macro e clique Ok.

3. No painel para definir a cor de fundo para amarelo-claro. Isso vai fazer com que a célula
selecionada (A1) passe a ter fundo amarelo-claro.
4. Pare a gravação da macro. Aí você terá a macro para pintar o fundo de amarelo claro.

5. Antes de executar a macro, vamos olhar seu código:

Carregue o editor de Visual Basic ([Alt] e [F11] simultaneamente), O editor de Visual Basic
aparece.

Expanda o folder Modules no Project Explorer clicando 2 vezes em (+).


Clique 2 vezes o folder Module1 para ver essa sub-rotina (macro).

Como se observa na figura, o nome da sub-rotina é "SetBackgroundColor". O índice da cor


amarelo-claro é 36 e o padrão de fundo é sólido.

6. Executar a macro gravada

No exemplo anterior, foi criada a macro "Hello World!", que foi executada a partir do editor de
Visual Basic. Agora, rodaremos a macro “SetBackgroundColor” a partir da planilha.

Em qualquer planilha, selecione um grupo de células e execute a macro:


As células selecionadas ganharão fundo amarelo-claro.

7. Agora mude o índice da cor no código da macro e tente rodá-la novamente, para ver que as células foram
pintadas de outra cor.
D) Módulos e Procedimentos (Procedures)

Um módulo é um container para procedimentos, como mostrado nos exemplos anteriores. Um


procedimento é uma unidade de código localizada entre os “statements” Sub e End Sub ou entre
Function e End Function. O primeiro par de statements define uma sub-rotina (ou macro) e o
segundo uma função. Exemplos:

Procedimento (ou sub-rotina) para imprimir a data e hora atual na célula C1:

Sub ShowTime()
Range("C1") = Now()
End Sub

A Função a seguir soma dois números:

Function sumNo(x, y)
sumNo = x + y
End Function

Procedimentos em VB podem ser públicos ou privados. Os privados só são acessíveis para outros
procedimentos dentro de mesmo módulo. Já os procedimentos públicos, são acessíveis a qualquer
módulo no workbook em que o procedimento é declarado, e em todos os workbooks que fizerem
referência a este workbook.: Por default, os procedimentos são públicos (ou seja, se não se coloca
nada, como nos exemplos acima, o procedimento é considerado público). Exemplos que definem o
escopo do procedimento:

Public Sub ShowTime()


Range("C1") = Now()
End Sub

Private Sub ShowTime()


Range("C1") = Now()
End Sub

Coloque no Editor de VB a macro “ShowTime” e execute-a. Faça o mesmo para a


função “sumNo” mostrada acima. Repare que, quando definido como Function, o
procedimento não aparece na lista de macros, mas sim no Insert Function (vira uma
nova função no Excel).

E) Criando Funções

No Editor do Visual Basic crie um módulo para criar funções. Para tal, siga os seguintes
passos:

• Clique em Ferramentas -> Macro -> Visual Basic Editor


• Clique com o botão direito na árvore de arquivos que aparece ao lado superior
esquerdo da tela e selecione Inserir -> Módulo
a) Digite o seguinte código no arquivo de seu módulo:
Function ImprimeNumero1() As Integer
ImprimeNumero1 = 1
End Function

Compile sua função usando Depurar -> Compilar VBAProject

Escreva em uma célula o resultado de sua função. Para tal, selecione Inserir Função ->
Definidas pelo Usuário -> ImprimirNumero1.

b) Digite o seguinte código no arquivo de seu módulo (abaixo da função anterior),


modificando-o apenas para inserir seu nome:

Function ImprimeMeuNome() As String


ImprimeMeuNome = "João da Silva"
End Function

Compile sua função usando Depurar -> Compilar VBAProject e depois execute-a.

c) Digite o seguinte código no arquivo de seu módulo:

Function Sorteio() As Integer


Sorteio = Rnd() * 50
End Function

Compile sua função usando Depurar -> Compilar VBAProject

Escreva em 5 células o resultado de sua função Sorteio.


Observe que a função retorna um número aleatório entre 0 e 50 (a chamada Rnd()
retorna um número Real entre 0 e 1).

Por que a função retorna um valor Inteiro entre 0 e 50?

F) Chamando Sub-rotinas e Funções

Há 2 modos de chamar uma sub-rotina. O exemplo a seguir mostra como uma sub-rotina pode ser
chamada dentro de outra sub-rotina:

Sub z(a)
MsgBox a
End Sub

Sub x()
Call z("ABC")
End Sub

Sub y()
z "ABC"
End Sub
A sub-rotina z recebe um argumento (a) e escreve o valor desse argumento ("ABC") numa caixa de
mensagem. A execução das subrotinas x e y mostrarão o mesmo resultado. Teste-as!

O exemplo a seguir cham uma função dentro de uma subrotina:

Sub ShowSum()
msgbox sumNo(3,5)
End Sub

Function sumNo(x, y)
sumNo = x + y
End Function

A sub-rotina ShowSum chama a função sumNo e retorna "8", escrito numa message box. Teste-a!

Se houver procedimentos com nomes duplicados em módulos diferentes, é necessário definer o


nome do modulo antes de chamar o procedimento. Por exemplo:

Module1.ShowSum

Você também pode gostar