Você está na página 1de 9

INF 1503 – Atividades da Aula

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

A) Caixa de ferramentas de controle e Botão de Comando

Existe no Excel uma outra caixa de ferramentas semelhante à de formulários, vista nas
aulas anteriores. É a caixa de controles:

Os elementos da caixa de formulários são mais simples, não requerendo nenhuma


programação especial; são usados para criar planilhas interativas, como as que foram
feitas nas aulas anteriores (no exercício da compra e venda de automóveis, por
exemplo). Os elementos da caixa de controle, por sua vez, são bem mais sofisticados e
estão intimamente ligados ao ambiente VBA, exigindo que você escreva código que
gerencie o funcionamento desses controles.

Por exemplo, você pode criar um botão de comando na sua planilha conforme a
primeira figura abaixo. Clicando com o botão direito do mouse sobre o botão de
comando e selecionando as propriedades do botão (segunda figura abaixo), você
chega a uma janela com as propriedades do botão.
Na janela de propriedades (primeira figura abaixo) você pode alterar várias
propriedades do botão, tais como cor de fundo, tamanho (largura e altura), posição,
etc. Particularmente importante, são as propriedades Caption (indica o texto que
aparece no botão) e Enabled (indica se o botão está habilitado ou não, i.e., se ele pode
ser clicado ou não).

Altere a propriedade Caption para aparecer o texto “teste” no botão. Depois, altere a
propriedade Enabled para False e veja o que acontece (depois volte-a para o estado
True).

Para cada controle da caixa de ferramentas de controles, há uma série de eventos que
podem estar associados. Por exemplo, para um botão há, dentre os eventos: clicar,
clicar duas vezes (double click), mouse down (apertar o botão do mouse sobre o botão
de controle), mouse up (soltar o botão do mouse), dentre outros. Cada um desses
eventos é, na verdade, uma sub-rotina que será executada quando o respectivo evento
sobre o botão ocorrer.

Para ter acesso ao código do botão, clique duas vezes sobre o botão que está na sua
planilha, e abrirá a já conhecida janela do VBA. Repare que você está na janela de
código da sua planilha (e não em um módulo separado), e já aparece uma sub-rotina
vazia (click).
Clicando na caixa de drop-down à direita, como mostra a figura abaixo, você verá
todas as opções de evento para esse botão. Cada uma delas, no momento, é uma sub-
rotina vazia. Cabe agora a você, programar no VBA o que você quer que cada uma
dessas sub-rotinas execute ao ocorrer o respectivo evento.

Por exemplo, para fazer com que o botão imprima a data e hora atual na célula A1 ao
clicar o botão, coloque o seguinte código na sub-rotina CommandButton1_Click():

Compile o código e clique no botão, para testar sua função. Lembre-se que o botão
deve estar habilitado (propriedade Enable) e você deve estar fora do “modo de
projeto” da caixa de ferramentas de controle (figura abaixo). O modo de projeto indica
se você está projetando o botão (i.e., definindo suas propriedades, etc) ou de fato
executando suas sub-rotinas.
Para exemplificar outros eventos do botão, crie uma sub-rotina para escrever seu
nome na célula B1 quando você abaixar o botão do mouse sobre o botão de comando.
Para isso, selecione o evento MouseDown e crie a seguinte sub-rotina (repare que a
primeira subrotina (de clicar o botão) continua no mesmo arquivo VBA. Teste seu
botão agora.

Vamos acrescentar mais: agora quero que a cor de fundo da célula B1 se torne
amarelo ao soltar o botão do mouse (evento MouseUp):

Repare que, antes de mandar pintar o fundo, fiz com que a célula B1 fosse
selecionada: Range(“B1”).Select. Agora teste seu botão, apertando o mouse e depois
soltando-o.

Observação: se você limpar a célula A1, verá que a data e hora atual não aparecem
mais. Isso porque você tem agora eventos para o MouseDown e MouseUp, passando
por cima do que seria o clique do botão. É assim que a coisa funciona: você tem um
certo número de eventos à disposição e vai escolher aquele(s) mais adequado(s), mas
nem sempre é possível usá-los todos, e nem faz sentido. Geralmente, no caso do
botão, o que importa é o clique ou duplo_clique.
B) Calculadora

Utilizando botões e funções, vamos criar uma calculadora numa nova planilha. A idéia
é criar 4 botões para as quatro operações básicas e, a partir dos valores lidos nas
células A1 e B1, realizar a respectiva operação e escrever o resultado em A5. Por
exemplo, com os valores da figura, ao clicarmos no botão (+), escreveria-se 9 na
célula A5, e assim por diante.

Para obter o valor de uma determinada célula, precisamos usar Range(“Célula”).Value.


Dessa forma, para o botão (+), poderíamos ter o seguinte código:

Private Sub CommandButton1_Click()


X = Range("A1").Value
Y = Range("B1").Value

Range("A5") = X + Y
End Sub

Uma variação do código acima poderia ser obtida sem utilizar as variáveis X e Y,
somando os valores obtidos das células diretamente:

Private Sub CommandButton1_Click()


Range("A5") = Range("A1").Value + Range("B1").Value
End Sub

Conclua a calculadora, fazendo os outros botões.

C) InputBox

Na aula passada vimos a MsgBox, que escreve uma mensagem. Agora, vamos utilizar
a InputBox, que permite que você digite um valor que fará parte do procedimento
VBA. O exercício é para refazer a calculadora acima, mas agora ao invés de se obter os
valores a partir das células A1 e B1, os obteremos por meio de InputBoxes.

Para o botão (+), altere o procedimento de clique para:

Private Sub CommandButton1_Click()


Dim Valor_1 As Integer
Dim Valor_2 As Integer

Valor_1 = InputBox("Escreva o primeiro valor")


Valor_2 = InputBox("Escreva o segundo valor")

Range("A5") = Valor_1 + Valor_2


End Sub
Teste sua função no botão (+).

Repare no código que forçamos as variáveis Valor_1 e Valor_2 a receberem valores


inteiros (Integer), de modo que o valor de entrada nas InputBoxes seja interpretado
como números inteiros. Retire as duas primeiras linhas do código (que começam com
Dim) e veja o que acontece com seu resultado. Por que isso acontece?

Para completar sua nova calculadora, mude os códigos dos botões (-), (*) e (/) para
trabalharem com InputBoxes.

D) WorksheetFunction

Você pode usar as funções do Excel dentro do código do VBA. Para isso, basta usar
WorksheetFunction.<nome da função>. Por exemplo:

Crie uma função chamada MaxRegiao que recebe como argumentos um Range e
retorna o Maximo desse range. Para tal, digite o seguinte código.

Function MaxRegiao(r As Range) As Integer


Max = WorksheetFunction.Max(r)
MaxRegiao = Max
End Function

a) Teste a função acima. Perceba que ela recebe um conjunto de células (=Range) e
quando você a insere numa célula, já aparece a janela pedindo que você marque o
conjunto de células em questão.

b) Crie uma outra função chamada MaxRegiao1 que recebe como argumentos um
Range e retorna: Max + 1, onde Max é o máximo da região definida (Range).

c) Crie uma outra função chamada DifMaxMin que recebe como argumento um Range
e retorna Max – Min, onde Max é o valor máximo do Range e Min é o valor mínimo
deste mesmo Range. Min também deve ser calculado como uma WorksheetFunction.

E) Conversor de moedas

Vamos agora criar uma pequena calculadora para converter moedas. Para isso, copie a
tabela de conversão a seguir para uma planilha vazia:

US $ ¥en Euro Can $ UK £

1 US $ 1,0000 119,2500 0,7972 1,1278 0,5339

1 ¥en 0,008382 1,0000 0,006681 0,009452 0,004475

1 Euro 1,2537 149,5400 1,0000 1,4143 0,6695

1 Can $ 0,8862 105,7100 0,7067 1,0000 0,4732

1 UK £ 1,8721 223,2700 1,4929 2,1115 1,0000


A idéia é oferecer 2 opções para a conversão (de / para) e também um valor, que será
convertido (por exemplo: 100 de US $ para Can $ = 100 * 1,1278 = 112,78). Na
figura abaixo, as listas de opções de/para são dadas na forma de conjuntos de botões
de rádio. O Valor a ser convertido é dado via InputBox, e o resultado deve ser escrito
em uma MsgBox, após clicar o botão Converter.

Inicialmente, você deve montar os conjuntos de botões de radio. Para que eles
funcionem como dois conjuntos independentes de botões, cada elemento dos grupos
de botões (grupo “De” e grupo “Para”), deve ter sua propriedade GroupName
distinguindo os grupos. I.e., os botões do grupo “De” deve ter um mesmo GroupName
e os do grupo “Para” deve ter outro GroupName. No exemplo abaixo, o botão
selecionado está no grupo chamado Sheet3_1.

Montado o esquema da figura, resta fazer o código. Aqui, trabalharemos pela primeira
vez com o conceito de variável global, que é um valor que pode ser acessado por
qualquer procedimento dentro de um mesmo grupo de procedimentos. Criaremos duas
variáveis globais: “De” e “Para”, para armazenarmos os tipos de moeda que se deseja
converter, o que também indica a linha e a coluna na tabela de conversão que
deveremos utilizar. Por exemplo, se selecionarmos “De US $”, a variável “De” assume
valor 1, se selecionarmos “De Yen” ela receberá valor 2, assim por diante.

Para atribuir esses valores às variáveis globais, é preciso atuar no evento Click de cada
um dos botões de radio. O trecho abaixo mostra como associar os botões “De” à
variável global De. Repare que no início do código as variáveis globais estão definas
fora dos procedimentos, de modo que elas podem ser acessadas por todos.

Na seqüência, você deve fazer o mesmo para os radio buttons do grupo Para,
alterando a variável Para.

Finalmente, falta escrever o procedimento do botão Converter. Ele começa pedindo o


valor a ser convertido por meio de uma InputBox. Depois, ele usa a função
(WorksheetFunction) Index para pegar o valor certo na tabela de conversão.
Finalmente, retorna o produto valor x taxa em uma MsgBox:

Private Sub CommandButton1_Click()


Dim valor As Double
Dim taxa As Double
Dim resultado As Double

valor = InputBox("Valor a ser convertido")


taxa = WorksheetFunction.Index(Range("B2:F6"), De, Para)
resultado = valor * taxa
MsgBox (resultado)

End Sub
Observe que as variáveis “valor”, “taxa” e “resultado” são declaradas como Double
(número real). A variável “valor” é obtida via InputBox. A variável “taxa” é obtida com
a função Index, onde se usa as variáveis globais “De” e “Para” (a tabela de conversão
está nas células de B2 até F6 nesse caso). A variável “resultado”, por sua vez, é o
produto (valor * taxa), e é escrito na MsgBox.

Teste sua função, alterando as seleções, os valores da tabela, etc.

Você também pode gostar