Escolar Documentos
Profissional Documentos
Cultura Documentos
e não esquecer
Esta Macro1( ) pode ser gravada e executada sempre que necessário. Por exemplo,
podemos começar uma folha nova e mandar executar esta Macro nessa folha, fazendo
simplesmente
Macros ajudam-nos a cumprir objectivos que têm que ser repetidos mas não permitem
resolver problemas numéricos que envolvem cálculos iterativos. Para isso é necessário
escrever um código VBA adaptado à resolução do nosso problema.
Para programar, podemos iniciar um código no Excel criando uma macro e em seguida
editar o código da macro. Alternativamente podemos escrever o código começando por
desenhar um botão de comando tal como veremos mais adiante.
O HELP do Excel é uma enorme fonte de informações. Por exemplo, podemos aí
encontrar as definições das funções intrínsecas do Excel e também aprender como
escrever as nossas funções, funções VBA.
Dialog / UserForm
Ao inserir uma UserForm, e objectos dentro dela, passa a ser objecto do Excel e permite
associar um código. Uma propriedade comum a diferentes objectos é o "Value" tal
como nas células.
Eventos
Cada tipo de objecto tem eventos que podem ser intersectados, sendo criado um
procedimento que será chamado quando o evento ocorrer no objecto. Por exemplo, nos
botões tem interesse intersectar o evento "Click".
Na UserForm tem interesse intersectar o evento "Activate" para efectuar inicializações,
e nas listas pode ter interesse intersectar o evento "Change" para efectuar alguma
actualização após o elemento da lista ter sido alterado.
A=A+10
B=2
Dim A, B As Integer
Se para escrever uma instrução é necessário utilizar mais do que uma linha o VBA
permite fazer a mudança de linha usando o under scroll ( _ ).
Exemplo:
Resultado= 1+3*Math.sin(2)+_
5*Math.cos(3)
Mas cuidado, o under scroll não pode ser utilizado, por exemplo, com instruções do
tipo MsgBox. Nesse caso será necessário considerar várias MsgBox.
ou ainda
Objectos
Os objectos mais relevantes que permitem editar um documento do Excel são:
• Sheets("nome") - objecto de acesso a qualquer folha
• Cells(linha,coluna) - objecto de acesso a qualquer célula na folha actual
• Range("conjunto") - objecto de acesso a um conjunto de células
• Selection - objecto de acesso ao conjunto de células selecionado
• ActiveCell - objecto de acesso à célula activa
Todos estes objectos têm propriedades e métodos, sendo ambos acedidos por um ponto
a seguir ao nome do objecto, após o qual o Excel mostra todas as propriedades e
métodos aplicáveis nesse objecto. Para realçar o mais importante, nas células existe a
propriedade "Value" que tem o valor numérico da célula, e o método "Activate" para
passar a ser a célula activa, e nos conjuntos existe o "Select" para passar a ser o
conjunto seleccionado.
Dim i As Integer
For i = 1 To 20
Cells(i, 5).Value = Rnd( ) + 5
Next i
Variáveis
É essencial numa linguagem ter entidades que se podem alterar. Podem-se declarar
variáveis internas para uso apenas no código ou utilizar um valor de uma célula como
variável. A declaração de uma variável em programação VBA é:
Dim <variável> As <tipo>
Os tipos mais utilizados são Integer, Double, String, e Boolean, para representar
respectivamente um inteiro, um número real, um texto e um valor booleano.
Integer são as variáveis do tipo inteiro guardadas em 2 bytes e variam entre -32 768 e
32 767.
Double (reais de dupla precisão) são as variáveis guardadas como números em vírgula
flutuante de 64-bit (8-bytes) e variam
desde -1.79769313486231E308 até -4.94065645841247E-324 para valores negativos e
desde 4.94065645841247E-324 até 1.79769313486232E308 para valores positivos.
As variáveis do tipo Booleano são guardadas como números de 2 bytes e tomam apenas
2 valores: Verdadeiro ou Falso.
Se o tipo de variável não for especificado então o VBA considera o tipo Variant
(números de 16-bytes). Este tipo de variáveis ocupa muito espaço e deve ser evitado.
Muitos programas VBA que resolvem problemas numéricos utilizam milhares de
variáveis usando ciblos que são repetidos milhares de vezes. A nã declaração de
variáveis iria tornar o programa extremamente pesado.
Exemplo:
Option Explicit Option Explicit
Dim mensagem As String
Sub mensagem_minha( )
Dim mensagem As String Sub mensagem_minha( )
mensagem = "Vamos ver este exemplo" mensagem = "Vamos ver este exemplo"
MsgBox mensagem MsgBox mensagem
End Sub End Sub
No entanto é necessário ter cuidado uma vez que variáveis declaradas a nível de módulo
podem ser modificadas erradamente.
Exemplo:
Dim x, y As Integer
Sub codigo( )
x = 10
y = minha_funcao( )
End Sub
Operadores
Exemplo:
As atribuições de valores a variáveis podem ser feitas por valor através do comando:
Dim r As Range
Set r =Range("A1:C3")
Instruções Condicionais
If <condição> Then
<bloco de instruções>
Else
<bloco de instruções>
End If
Ciclos
Um ciclo permite executar um bloco de instruções, um determinado número de vezes.
Os ciclos podem ser implementados de diversas maneiras, a primeira é dependente de
uma condição que enquanto for verdadeira o bloco de instruções é executado:
While <condição>
< um bloco de instruções >
Wend
Por exemplo se o conjunto fosse o "Select", o ciclo seria executado tantas vezes quantas
as células que estiverem selecionadas:
Dim y As String
y = InputBox("Comentário")
For Each x In Selection
y=y+y
If Len(x.Value) < 20 Then
x.Value = y
End If
Next x
O objectivo é mover todos os discos para um dos outros pinos, sempre obedecendo à
restrição de não colocar um disco sobre outro menor.Um algoritmo para resolver este
problema é o seguinte:
Criou-se uma macro em que se a célula activa tiver um valor numérico, esta chama um
procedimento TorresHanoi que recursivamente vai resolver o problema.
End Sub
Primeiro, caso apenas se queira mover um só disco, a sub move-o sem utilizar o local
auxiliar, caso contrário, move todos os discos mais pequenos para o local auxiliar
chamando a função recursivamente, de seguida move o disco maior para o destino, e
finalmente chama novamente a função recursivamente para mover os discos mais
pequenos do local auxiliar para o destino.
O resultado de executar esta sub com a célula com o 3 seleccionada, são as ordens de
movimento descritas nas células abaixo:
3
A para C
A para B
C para B
A para C
B para A
B para C
A para C
Exercícios:
1. Gestão de Custos Pretende-se com este trabalho que seja desenvolvida uma
aplicação, que permita a gestão de custos correntes de um aluno do MIEA.
Os registos de custos (ou receitas), devem ter associados um valor, uma data, uma
categoria e um projecto. Devem poder ser inseridos através de uma dialog, assim como
devem poder ser adicionadas mais categorias e projectos.
Como relatórios, dever-se-á apresentar um relatório por Categoria, por Projecto, para
um dado mês ou ano, e os saldos dos Projectos em cada mês ao longo de um ano.
Também poderá ser gerado um gráfico da evolução dos projectos,...
Exemplo de aplicação:
O número de horas extras nunca pode ser superior a 20. Faça uma macro que permita
inserir ou actualizar registos de empregados, sendo dado o código de cada empregado.
Nos locais referentes aos vencimentos, aos valores das horas extras e aos totais a
receber, devem ser inseridas fórmulas em vez de valores.
Neste caso, a fórmula do erro da regra dos trapézios composta é dada por
1 2
a) ∫ e− x dx (≈ 0.746825)
0
1 1
b) ∫ sen dx (≈ 0.5945)
0 x + 0.1
6. Jogo do 4 em Linha Pretende-se com este trabalho que seja desenvolvida a interface
do jogo do 4 em Linha entre dois jogadores humanos, não sendo pretendido que se
implemente o jogador artificial.
O jogo do 4 em linha joga-se numa matriz de 7 x 7, inicialmente vazia. Os jogadores
jogam de forma alternada, cores diferentes, numa coluna que tenha casas vazias,
preenchendo a casa vazia mais baixa. O objectivo do jogo é fazer 4 em linha
(horizontal, vertical ou diagonal).
Deverá ser feito o teste de fim de jogo, e corrigir as jogadas que são feitas em casas
inválidas para a casa correcta da mesma coluna. No caso de vitória, devem ser marcadas
as quatro casas em linha. Devem também ser contabilizados os jogos ganhos e
empatados por ambas as cores.
7. Jogo do galo
Este jogo é muito conhecido e dispensa apresentações. Os jogadores jogam de forma
alternada usando símbolos diferentes. Deverá ser feito o teste de fim de jogo, e anular as
jogadas que são feitas em casas inválidas. Devem também ser contabilizados os jogos
ganhos e empatados por cada jogador.