Você está na página 1de 25

PROGRAMAÇÃO EM VBA

1. Procedimentos - SUB

Aplicação prática:

Vá para uma folha de Excel, e crie o procedimento anterior – atribuir valores a X e a Y e calcular a soma. Como
não temos nenhuma instrução para visualizar os valores não podemos ver o resultado – Veremos como fazer,
logo de seguida.

Ana Paula Camarinha 2019/2020 Pág. 1


PROGRAMAÇÃO EM VBA
2. Funções - FDU

Aplicação prática:

Vá para uma folha de Excel, e crie a seguinte tabela:

E sabendo que Valor Final = PU * Quant * (1+Taxa IVA)

Ana Paula Camarinha 2019/2020 Pág. 2


PROGRAMAÇÃO EM VBA
Desenvolva em VBA uma FDU para calculo do Valor Final. Use a função criada para preencher a coluna E

Resolução:
Function ValorFinal(PU,Quant, Taxa)
Function ValorFinal = PU * Quant * (1+ Taxa)
End Funcion
Outros exercícios: recorra ao ficheiro suporte FDU e resolva as questões lá apresentadas. Este exercício será feito
após a exposição de outros conteúdos essências.

3. Exemplos de Programação em VBA

Aplicação prática:

No VBA, faça um procedimento que calcule a Soma de 2 números (células B1 e B2) e coloque o resultado em B4

Sub SOMA2_EXCEL()

Num1 = Range(“B1”).Value

Num2 = Range(“B2”).Value

Soma = Num 1 + Num2

Range(“B4”).Value = Soma

End Sub
Ana Paula Camarinha 2019/2020 Pág. 3
PROGRAMAÇÃO EM VBA

4. Caixa de Mensagem - MsgBox

A seguinte instrução afixa uma caixa de mensagem com o texto “A soma é “, acrescido da apresentação
do valor contido na variável SOMA (A seguir á instrução da caixa de mensagem é acrescentado o objeto
que contem o valor a escrever – concatenados com o símbolo &)

MsgBox “A soma é “ & SOMA


MsgBox “A soma é “ & Range(“B1”).Value

Aplicação Prática

Será visto após conhecermos a instrução InputBox

Ana Paula Camarinha 2019/2020 Pág. 4


PROGRAMAÇÃO EM VBA

5. Caixa de Entrada – InputBox

A seguinte instrução apresenta uma caixa para introdução de um Nome, sendo que o valor introduzido
vai ser guardado na variável NOME (Começa por ter à esquerda o objeto que vai conter o valor
introduzido, à direita a caixa de input e a pergunta)

NOME = InputBox("Qual o nome ?”)

A seguinte instrução apresenta uma caixa para introdução de um Nome, sendo que o valor introduzido
vai ser guardado na célula B1.

Range (“B1”).Value = InputBox("Qual o nome ?”)

Exemplo de um programa com caixas de entrada e saída- 2 caixas de entrada para ler os
valores de X e Y guardando o seu valor nas variáveis X e Y respetivamente e uma caixa de
saída que afixa o resultado guardado em SOMA como resultado da soma dos valores
lidos:

Sub exemplo1()
X= InputBox (Qual o valor de X?”)
Y= InputBox (Qual o valor de Y?”)
Soma = X+Y
MsgBox “O resultado é “ & Soma
End Sub

Ana Paula Camarinha 2019/2020 Pág. 5


PROGRAMAÇÃO EM VBA

Se pretendêssemos que os valores lidos fossem guardados não em variáveis, mas nas células A1 e A2,
ficaria:

Sub exemplo2()
Range (“A1”).Value = InputBox (Qual o valor de X?”)
Range (“A1”).Value = InputBox (Qual o valor de Y?”)
Soma = X+Y
MsgBox “O resultado é “ & Soma
End Sub

Se além disso pretendêssemos que o valor da Soma fosse guardado em B3 em vez da variável Soma,
então ficaria:

Sub exemplo3()
Range (“A1”).Value = InputBox (Qual o valor de X?”)
Range (“A1”).Value = InputBox (Qual o valor de Y?”)
Range (“B3”).Value = X+Y
MsgBox “O resultado é “ & Range (“B3”).Value
End Sub

Aplicação Prática

Desenvolva em VBA os exemplos 1 e 2 apresentados anteriormente

Ana Paula Camarinha 2019/2020 Pág. 6


PROGRAMAÇÃO EM VBA
6. Declaração de Variáveis

Importante ver que nas FDU, as variáveis de parâmetros são declaradas dentro dos parentises

7. Tipos de Dados

Ana Paula Camarinha 2019/2020 Pág. 7


PROGRAMAÇÃO EM VBA

8. Operadores matemáticos

Ana Paula Camarinha 2019/2020 Pág. 8


PROGRAMAÇÃO EM VBA
9. Funções de DATA

Ana Paula Camarinha 2019/2020 Pág. 9


PROGRAMAÇÃO EM VBA
10. Estrutura Condicional

Ana Paula Camarinha 2019/2020 Pág. 10


PROGRAMAÇÃO EM VBA

Aplicação prática

Desenvolva o seguinte procedimento em VBA. Repare que não tem interação com a folha de cálculo. Usa apenas
caixas de entrada e de saída

Atenção: Na 3.ª instrução surge o comando VAL(…..) que garante que o que vamos ler da caixa de input será
guardado como valor numérico. Deve ser sempre utilizado para evitar erros

Ana Paula Camarinha 2019/2020 Pág. 11


PROGRAMAÇÃO EM VBA
Altere o procedimento anterior de acordo com o seguinte:

Ana Paula Camarinha 2019/2020 Pág. 12


PROGRAMAÇÃO EM VBA
11. Estrutura de Repetição

Para ler um número por caixa de entrada, teria:

Num = InputBox (“Introduza um número”)

Se pretende ler 5 números através de caixa de entrada teria:


Sub Ler()
For I = 1 to 5
Num = InputBox (“Introduza um número”)

Next I

End Sub

Ana Paula Camarinha 2019/2020 Pág. 13


PROGRAMAÇÃO EM VBA
Completando e exemplo anterior, poderíamos, ao ler cada um dos números, ir adicionando os valores lidos para
no final termos o valor da sua Soma e posteriormente calcular a Média. Ficaria então:

Sub Média()
Soma = 0
For I = 1 to 5
Num = InputBox (“Introduza um número”)
Soma = Soma + Num
Next I
Media = Soma /5
MsgBox “A Média dos valores lidos é “ & Média
End Sub

A instrução Soma = 0 serve para dar um valor inicial a Soma para podermos depois usar a instrução

Soma = Soma + valor

Aplicação prática

1. Implemente em VBA o programa anterior que lê 5 números por caixa de entrada, calcula a sua média e
apresenta o resultado numa caixa de mensagem
2. Numa folha de cálculo, crie a seguinte tabela. Crie um procedimento idêntico, mas em que os valores
estão escritos nas células B2 a B6 e o resultado vai ser escrito em B8

RESOLUÇÃO RESOLUÇÃO
Sub Média2() Sub Média2()
Soma = 0 Soma = 0
For i = 1 to 5 For i = 2 to 6
Num = InputBox (“Qual o numero?”) Num = Range (“B”& i).Value
Soma = Soma + Num Soma = Soma + Num
Next i Next i
Media = Soma /5 Media = Soma /5
MsgBox “O valor da média é” & Media Range (“B8”).Value = Media
End Sub End Sub

Ana Paula Camarinha 2019/2020 Pág. 14


PROGRAMAÇÃO EM VBA
12. Trabalhar com objetos no EXCEL

Trabalhar com objetos do Excel:

• Aplicação – Application

• Livro - WorkBook

• Folha - Sheets

• Células - Range

a) Trabalhar com o objeto Aplicação

Sub Terminar()

Application.Quit

End Sub

b) Trabalhar com o objeto Livro

Exemplo: Gravar o Livro com o nome atual

Sub Gravar()
ActiveWorkBook.Save

End Sub

Exemplo: Gravar o Livro com um nome a introduzir pelo utilizador

Sub Grava_Com_NovoNome()

Dim newname as string

Newname = InputBox (“Qual o nome para o ficheiro?”)

ActiveWorbook.SaveAs Filename:=Newname & “.xlsm”

End Sub

Ana Paula Camarinha 2019/2020 Pág. 15


PROGRAMAÇÃO EM VBA

c) Trabalhar com o objeto Folha

Exemplo: Selecionar uma Folha

Sub DB_Colaboradores()
Sheets(“Colaboradores”).Select
End Sub

Exemplo: Criar nova folha a seguir á atual e dar o nome Teste

Sub NovaFolha_Teste()
Sheets.Add After:= ActiveSheet
ActiveSheet.Name=“Teste”
End Sub

Exemplo: Eliminar a folha com nome Teste

Sub Elimina_Teste()
Sheets(“Teste”).Select
ActiveWindow.SelectedSheets.Delete
End Sub

Ana Paula Camarinha 2019/2020 Pág. 16


PROGRAMAÇÃO EM VBA
13. FDU - Exercícios
 Considere a seguinte tabela e crie uma FDU para cálculo dos anos completos que foram registados. Os
parâmetros de entrada são a Data de admissão e a Data de saída

=Idadexx(A3,B3)

Resolução

Function Idadexx(antes, depois)

Idadexx = Int((depois - antes) / 365.25)

End Function

 Considere a seguinte tabela e crie uma FDU para cálculo do TOTAL. Os parâmetros de entrada são a
Quantidade, Preço Unit, %Desc e Taxa IVA. A fórmula será: Total = Quant * PreçUnit * (1 - desc) * (1 + iva)

=Total(A19,B19,C19,D19)

Resolução

Function Total(q, pu, desc, iva)

Total = q * pu * (1 - desc) * (1 + iva)

End Function

Ana Paula Camarinha 2019/2020 Pág. 17


PROGRAMAÇÃO EM VBA

 Considere a seguinte tabela e crie uma FDU para cálculo do Preço Final. Os parâmetros de entrada são o
preço do bilhete e a idade do comprador. Considere a tabela de descontos apresentada

=PrecoBilhetes(A35,B35)

Resolução

Function PrecoBilhetes(bilhete, Idade)


If Idade < 20 Then
Desconto = 25
Else
If Idade < 60 Then
Desconto =0
Else
Desconto = 30
End If
End If
PrecoBilhetes = bilhete -desconto
End Function

Ana Paula Camarinha 2019/2020 Pág. 18


PROGRAMAÇÃO EM VBA

 Considere a seguinte tabela e crie uma FDU para cálculo do Preço Final. Os parâmetros de entrada são a
Quant, o Preço Unit, o Codigo da Taca de IVA. Considere a tabela de Taxas apresentada

=precotot(A49,B49,C49)

Resolução

Function precotot(qt, pu, iva As String)


Dim taxa As Double
If iva = "a" Then
taxa = 0
Else
If iva = "b" Then
taxa = 13 / 100
Else
If iva = "c" Then
taxa = 26 / 100
End If
End If
End If
precotot = qt * pu * (1 + taxa)
End Function

Ana Paula Camarinha 2019/2020 Pág. 19


PROGRAMAÇÃO EM VBA

 Considere a seguinte tabela e crie uma FDU para cálculo do Preço. O parâmetro de entrada é a cor
sorteada. Considere os valores associados a cada cor e que constam da tabela apresentada.

Resolução
Function cores(cor As String)
If cor = "amarelo" Then
cores = 100
Else
If cor = "verde" Then
cores = 150
Else
If cor = "branco" Then
cores = 200
End If
End If
End If
End Function

Ana Paula Camarinha 2019/2020 Pág. 20


PROGRAMAÇÃO EM VBA
14. Procedimentos – Exercícios

a) Escreva um procedimento que usando caixas de entrada e de mensagem


Leia:
-O valor da despesa;
-O desconto ( por exemplo 0,20)
-A taxa de Iva (por exemplo 0,13)
Apresente o valor final

Resolução
Sub Valores()
valor = InputBox("Qual o valor?")
desconto = InputBox("Qual a taxa de Desconto?")
IVA = InputBox("Qual a taxa de IVA?")
val_final = valor * (1 - desconto) * (1 + IVA)
MsgBox "O valor final é " & val_final
End Sub

b) Faça um programa que leia as 6 notas de um aluno e apresente a média aritmética das mesmas. Não utilize a
Folha de Cálculo

Resolução
Sub Notas6()

Soma = 0

For i = 1 To 6

Nota = Val(InputBox(“Qual a nota ?”)

Soma = Soma + Nota

Next i

Média = Soma / 6

MsgBox " A média das notas é " & Média

End Sub

Ana Paula Camarinha 2019/2020 Pág. 21


PROGRAMAÇÃO EM VBA
c) Faça um programa que leia as Médias dos 5 anos de um Curso, que se encontram nas células B3 a B7 ,
calcule a sua média e escreva a média na célula B10.

Resolução

Sub Media_5_Anos()
Dim Soma, Media, Soma_Media As Double
Soma = 0
For i = 3 To 7
Nota = Range(“B”&i).value
Soma = Soma + Nota
Next i
Media = Soma / 5
Range("B10").Value = Media
Range("A10").Value = "Média do Curso"
End Sub

d) Faça um programa que utilizando caixa de entrada leia as 5 Médias anuais dos 5 anos de um curso, as
escreva nas células B3 a B7, calcule a sua média e a escreva na célula B10.

Resolução

Sub Media_Notas()

Dim Soma, Media, Soma_Media As Double

Soma = 0

For i = 3 To 7

Nota = Val(InputBox("Qual a Média do ano?"))

Range("B" & i).Value = Nota

Soma = Soma + Nota

Next i

Media = Soma / 5

Range("B10").Value = Media

End Sub

Ana Paula Camarinha 2019/2020 Pág. 22


PROGRAMAÇÃO EM VBA
15. Macros complexas para automatizar a Folha de cálculo
Abra um livro e grave-o com permissão para Macros (MACRO COM LOGOTIPO).
Crie uma folha a que deverá dar o nome MENU, onde colocará os botões para as macros.
Nesta folha (MENU) na célula K2 escreva o valor 1 que será usado para o 1.º numero de documento

e) Insere Folha com Logotipo


A. Crie a seguinte Macro

1. Estando na folha MENU, insira uma nova folha


2. Insira em A1 o logo do ISCAP, tamanho 2 por 4 cm, redimensione a coluna A
3. Em B1, escreva e formate para Algerian, 16, azul
4. Redimensione a colunas B adequadamente
5. Em F4, escreva “Documento n.º”

B. Altere a macro anterior de modo a que ao criar a nova folha, na célula G1 da nova folha esteja o valor da
célula K2 da folha MENU, e altere este valor aumentando 1 unidade.

Como fazer, Na macro, antes a instrução a preto…escrever o que está a vermelho


'Copia o valor de K2 da folha Menu para a variável NUM
Sheets("MENU").Select
num = Range("K2").Value
Sheets.Add After:=ActiveSheet
Range("G1").Value = num

No final do código da Macro, vá novamente selecione novamente a folha MENU e altere o valor de K2 para que
este seja maior em 1 unidade. (Estas instruções serão as últimas da macro anterior, antes do fim)
Sheets("MENU").Select
Range("K2").Value = num + 1
End Sub

Ana Paula Camarinha 2019/2020 Pág. 23


PROGRAMAÇÃO EM VBA

f)Atualização Da Base De Dados


Considere que tem a seguinte folha para introdução de dados relativos a eventos que depois de preenchidos
poderemos ter a necessidade de atualizar tabela RESUMO também apresentada, apenas o Código do evento e o
orçamento.

Para tal, pretende automatizar as seguintes tarefas:


1. Repor o Código do orçamento a 1
2. Atualizar o Código do evento em 1 unidade
3. Limpar o formulário, com exceção do Código do evento
4. Atualizar a BD - copiar o Código do evento e o Orçamento para a linha 8 (Utilize a funcionalidade de
Inserir células copiadas - Mover para baixo em vez do colar)

Resolução
1. Repor o Código do orçamento a 1 – é toda gravada automaticamente
Sub Repor1()
Range("C3").Select
ActiveCell.FormulaR1C1 = "1"
End Sub

2. Atualizar o Código do evento em 1 unidade – terá que ser feita manualmente


Sub AtualizarNum()
Range("C3").Value = Range("C3").Value + 1
End Sub

3. Limpar o formulário, com exceção do Código do evento – é toda gravada automaticamente


Sub Limpa()
Range("C4:C6").Select
Selection.ClearContents
End Sub

Ana Paula Camarinha 2019/2020 Pág. 24


PROGRAMAÇÃO EM VBA

4. Atualizar a BD - copiar o Código do evento e o Orçamento para a linha 8 (Utilize a funcionalidade de


Inserir células copiadas - Mover para baixo em vez do colar) – é toda gravada automaticamente
Sub AtualizaTabela()
Range("C3").Select
Selection.Copy
Range("G8").Select
Selection.Insert Shift:=xlDown
Range("C5").Select
Application.CutCopyMode = False
Selection.Copy
Range("H8").Select
Selection.Insert Shift:=xlDown
End Sub

g) Ler n Registos e perguntar se quer atualizar BD


Pretende-se uma macro que solicite a entrada de dados de 5 pessoas e para cada uma delas pergunte se quer
atualizar a BD.

Resolução – A preto é automático, o restante manual…(Grava-se primeiro a atualização da BD e depois


acrescenta-se o Ciclo e a condição
Sub LER_REGISTOS()
For I = 1 To 5
Range("C2").Value = InputBox("Nome?")
Range("C3").Value = InputBox("Morada")
Range("C4").Value = InputBox("Pais?")

x = InputBox("Quer atualizar a BD? (se sim, escreva 1")


If x = 1 Then
Range("C2").Select
Application.CutCopyMode = False
Selection.Copy
Range("C7").Select
Selection.Insert Shift:=xlDown
Range("C3").Select
Application.CutCopyMode = False
Selection.Copy
Range("D7").Select
Selection.Insert Shift:=xlDown
Range("C4").Select
Application.CutCopyMode = False
Selection.Copy
Range("E7").Select
Selection.Insert Shift:=xlDown
End If
Next I
End Sub

Ana Paula Camarinha 2019/2020 Pág. 25

Você também pode gostar