As instruções de Loop Do While e Do Until servem para que um bloco de instruções seja executado enquanto as condições referentes à cada instrução sejam alcançadas.
Numa tradução literal do inglês para o português as instruções podem ser entendidas da seguinte forma:
Do While = Faça enquanto
Do Until = Faça até
A sintaxe das duas instruções é a mesma, porém sua lógica é diferente
Do While "Teste condição"
Bloco de instruções
Loop
Do Until "Teste condição"
Bloco de instruções
Loop
Como pode-se reparar, a única diferença entre as duas instruções são as Palavras chave While e Until.
Agora vamos ver as respectivas lógicas das instruções.
O Loop While será executado sempre que o Teste de condição retornar um valor Verdadeiro
Dim aValor As Integer
aValor = 0
Do While aValor < 4 'enquanto for verdadeira
MsgBox a
aValor = aValor + 1
Loop
MsgBox "Fim"
No exemplo acima, a variável aValor começa com o valor 0 e a cada rodada do loop, seu valor é acrescido de 1.
O teste de condição verifica se aValor é menor do que 4, caso seja menor ( verdadeira ), o loop continua, caso contrário ele é finalizado.
Ao contrário do While o Loop Until será executado sempre que o Teste de condição retornar um valor Falso
Dim aValor As Integer
aValor = 0
Do Until aValor > 4 'enquanto for Falsa
MsgBox a
aValor = aValor + 1
Loop
MsgBox "Fim"
No exemplo acima, a variável aValor começa com o valor 0 e a cada rodada do loop, seu valor é acrescido de 1.
O teste de condição verifica se aValor é maior do que 4, caso seja maior ( falsa ), o loop se encerra, caso contrário ele continua. Outro detalhe nesse tipo de loop, é onde desejamos fazer a verificação da condição. Podemos colocar logo após o DO ou então após o LOOP.
Esse detalhe tem que ser usado com cautela, pois pode prejudicar de alguma forma os resultados do seu projeto.
Vejamos um exemplo da instrução While e passando de primeira um valor Falso para o teste de condição
Dim aValor As Integer
aValor = 0
Do While aValor > 4 'enquanto for verdadeira
MsgBox a
aValor = aValor + 1
Loop
MsgBox "Fim"
Nesse exemplo, o bloco de instruções não é executado, pois a condição já começa como Falsa ( a não é maior que 4 ) e o loop é encerrado
Porém se alterarmos o local do teste de condição e deixarmos após o Loop, o bloco de instruções será executado uma vez.
Dim aValor As Integer
aValor = 0
Do
MsgBox a
aValor = aValor + 1
Loop While aValor > 4 'enquanto for verdadeira
MsgBox "Fim"
sábado, 12 de setembro de 2015
segunda-feira, 8 de setembro de 2014
Loop For...Next
A instrução For...Next é usada quando precisamos executar algumas rotinas uma determinada quantidade de vezes em seqüência.
Com ela podemos usar uma variável de controle e passarmos valores a controles e objetos. Também podemos usá-la para chamar outras funções e procedimentos.
A sintaxe simples do Loop For...Next é a descrita abaixo.
Com ela podemos usar uma variável de controle e passarmos valores a controles e objetos. Também podemos usá-la para chamar outras funções e procedimentos.
A sintaxe simples do Loop For...Next é a descrita abaixo.
For i = 1 To 10
Aqui sera definido nosso bloco de instruções
Next
Aqui sera definido nosso bloco de instruções
Next
Definimos uma variável de controle e a nomeamos como “i”, mas pode ser outro nome qualquer. O valor Zero (0) é onde nosso contador irá iniciar e o valor Dez(10) até onde o Loop irá executar.
No nosso exemplo, a variável de controle “i” irá iniciar no Zero e irá executar a rotina por 10 vezes, lembrando que a cada execução, o valor da variável é acrescido de 1.
O valor que acrescentamos a cada execução do loop pode ser alterado através da instrução Step.
For i = 0 To 10 Step 2
Aqui sera definido nosso bloco de instruções
Next
Aqui sera definido nosso bloco de instruções
Next
No Exemplo, a rotina irá executar 6 vezes e a cada rodada do loop, a variável será acrescida de 2.
Os valores assumidos pela variável durante todas as rodadas são: 0, 2, 4, 6, 8 e 10.
Os valores assumidos pela variável durante todas as rodadas são: 0, 2, 4, 6, 8 e 10.
Importante ressaltar que a variável de controle só é visível dentro do For, caso seja necessário visualizá-la em outra parte do código, tem que ser declarada usando as instruções (DIM ou Public) e do tipo numérica (Integer, Double ou Long).
Pode ser que em alguma situação na Rotina For, seja necessário encerrar o LOOP como no exemplo abaixo.
Nessa situação, caso a data retornada pela instrução DateAdd seja maior que a Data atual do Sistema, o loop é encerrado usando a instrução Exit For
Dim a As Date
a = InputBox("informe a data")
a = InputBox("informe a data")
For i = 0 To 10
If DateAdd("d", i, a) > Date Then
Exit For
Else
MsgBox DateAdd("d", i, a)
End If
Next
If DateAdd("d", i, a) > Date Then
Exit For
Else
MsgBox DateAdd("d", i, a)
End If
Next
Vamos supor que no nosso projeto existam duas consultas uma de Atualização e outra de Acréscimo de dados.
Nas nossas rotinas, precisamos executar a consulta de Acréscimo e depois a de Atualização pra consolidar os Dados importados.
Nas nossas rotinas, precisamos executar a consulta de Acréscimo e depois a de Atualização pra consolidar os Dados importados.
Com a ajuda do For...Next podemos deixá-las em execução sempre uma após a outra.
Primeiro vamos definir uma variável do tipo Array de tamanho 2 e pra cada item dessa variável vamos passar o nome das duas consultas.
Dim stConsulta(2) as string
stConsulta(0)=”ConsultaAcrescimo”
stConsulta(1)=”ConsultaAtualizacao”
Dim stConsulta(2) as string
stConsulta(0)=”ConsultaAcrescimo”
stConsulta(1)=”ConsultaAtualizacao”
Agora criamos o Loop
For i=0 to 1
DoCmd.OpenQuery stConsulta(i), acViewNormal
Next
For i=0 to 1
DoCmd.OpenQuery stConsulta(i), acViewNormal
Next
Nesse caso, na primeira execução a variável de controle está com o valor Zero, dessa forma irá executar a consulta ConsultaAcrescimo que está definida no item Zero da Variavel Array stConsulta.
Quando o Loop executa pela segunda vez, a variável de controle assume o valor 1 e executa então a nossa segunda Consulta.
Condicionais Select Case e IF... Then... Else
As construções condicionais servem para testar certas condições e executar determinadas ações quando essas condições são atendidas.
Existem basicamente 2 construções que nos permite realizar esses testes, o Select Case e o If...Then...Else
A função das duas construções é a mesma, porém para certos casos uma de aplica melhor que a outra.
Nos exemplos abaixo, para os mesmos testes, vou lista as duas formas de escrever o código.
1) Realizar a verificação da Variável "a" do tipo String, nos procedimentos Select Case e If...then...else.
Dim a As String
a = InputBox("Informe um Valor")
Select Case a
Case "Pedro", "João", "Marcia", "Flavia"
MsgBox "Vc Escolheu alguem da familia"
Case Else
MsgBox "Não Pertence a familia"
End Select
If a = "Pedro" Or a = "João" Or a = "Marcia" Or a = "Flavia" Then
MsgBox "Vc Escolheu alguem da familia"
Else
MsgBox "Não Pertence a familia"
End If
2) Realizar o cálculo MOD para retornar o produto de uma divisão. Caso o produto da divisão de um número seja 1, então ele é um número ímpar, caso contrário um número par.
Dim a As Integer
a = InputBox("Informe um Valor")
Select Case a Mod 2
Case 0
MsgBox "Número Par"
Case Else
MsgBox "Número Ímpar"
End Select
If a Mod 2 = 0 Then
MsgBox "Número Par"
Else
MsgBox "Número Ímpar"
End If
3) Verificação simples para testar o valor da variável
Dim a As Integer
a = InputBox("Informe um Valor")
Select Case a
Case Is > 5
MsgBox "Número maior ou igual que 5"
Case Else
MsgBox "Número menor que 5"
End Select
If a > 5 Then
MsgBox "Número maior ou igual que 5"
Else
MsgBox "Número menor que 5"
End If
4) selecionar casos que estejam em um determinado intervaldo. Ex.: de 0 a 5, de 6 a 9
Dim a As Integer
a = InputBox("Informe um Valor de 0 a 10")
Select Case a
Case 0 To 5
MsgBox "Ruim"
Case 6 To 9
MsgBox "Bom"
Case 10
MsgBox "Excelente"
Case Else
MsgBox "Valor informado fora do intervalo"
End Select
If a >= 0 And a <= 5 Then
MsgBox "ruim"
ElseIf a >= 6 And a <= 9 Then
MsgBox "Bom"
ElseIf a = 10 Then
MsgBox "Excelente"
Else
MsgBox "Valor informado fora do intervalo"
End If
Existem basicamente 2 construções que nos permite realizar esses testes, o Select Case e o If...Then...Else
A função das duas construções é a mesma, porém para certos casos uma de aplica melhor que a outra.
Nos exemplos abaixo, para os mesmos testes, vou lista as duas formas de escrever o código.
1) Realizar a verificação da Variável "a" do tipo String, nos procedimentos Select Case e If...then...else.
Dim a As String
a = InputBox("Informe um Valor")
Select Case a
Case "Pedro", "João", "Marcia", "Flavia"
MsgBox "Vc Escolheu alguem da familia"
Case Else
MsgBox "Não Pertence a familia"
End Select
If a = "Pedro" Or a = "João" Or a = "Marcia" Or a = "Flavia" Then
MsgBox "Vc Escolheu alguem da familia"
Else
MsgBox "Não Pertence a familia"
End If
2) Realizar o cálculo MOD para retornar o produto de uma divisão. Caso o produto da divisão de um número seja 1, então ele é um número ímpar, caso contrário um número par.
Dim a As Integer
a = InputBox("Informe um Valor")
Select Case a Mod 2
Case 0
MsgBox "Número Par"
Case Else
MsgBox "Número Ímpar"
End Select
If a Mod 2 = 0 Then
MsgBox "Número Par"
Else
MsgBox "Número Ímpar"
End If
3) Verificação simples para testar o valor da variável
Dim a As Integer
a = InputBox("Informe um Valor")
Select Case a
Case Is > 5
MsgBox "Número maior ou igual que 5"
Case Else
MsgBox "Número menor que 5"
End Select
If a > 5 Then
MsgBox "Número maior ou igual que 5"
Else
MsgBox "Número menor que 5"
End If
4) selecionar casos que estejam em um determinado intervaldo. Ex.: de 0 a 5, de 6 a 9
Dim a As Integer
a = InputBox("Informe um Valor de 0 a 10")
Select Case a
Case 0 To 5
MsgBox "Ruim"
Case 6 To 9
MsgBox "Bom"
Case 10
MsgBox "Excelente"
Case Else
MsgBox "Valor informado fora do intervalo"
End Select
If a >= 0 And a <= 5 Then
MsgBox "ruim"
ElseIf a >= 6 And a <= 9 Then
MsgBox "Bom"
ElseIf a = 10 Then
MsgBox "Excelente"
Else
MsgBox "Valor informado fora do intervalo"
End If
quarta-feira, 27 de agosto de 2014
Tipos de Dados - Variáveis
Abaixo a tabela com os tipos de dados que podem ser usados com as variáveis no VBA.
Para trabalhar com esses dados e variáveis de forma adequada, é necessário atenção em alguns detalhe:
• ao declarar uma variável de um tipo e tentar armazenar um valor que foge as características do valor estabelecido, o VBA irá retornar um erro.
• se usar uma variável sem declarar o seu tipo, o VBA irá automaticamente tratá-la como do dipo Variant
• após declarar uma variável como Object, deve-se atribuir o objeto a essa variável usando o comando Set = variável = Objeto
quinta-feira, 21 de agosto de 2014
Tabela Verdade - AND, OR e NOT
Nas linhas de código, muitas vezes é necessário tomar uma decisão a partir de mais de uma condição e nesses casos usamos os operadores lógicos de conjunção ( AND ) ou o de desjunção inclusiva ( OR ).
Para negar uma condição, podemos usar o operador lógico de negação ( NOT ).
Abaixo as Tabelas Verdade para cada operador lógico.
• Operador AND
Usamos o operador AND quando todas as condições ( 2 ou mais ), tem que ser verdadeiras para que se retorne Verdadeiro
• Operador OR
Usamos o operador OR quando pelo uma das condições precisa ser Verdadeira para que se retorne Verdadeiro
• Operador NOT
O operador NOT inverte o resultado de uma condição obtida através dos operadores AND ou OR
Para negar uma condição, podemos usar o operador lógico de negação ( NOT ).
Abaixo as Tabelas Verdade para cada operador lógico.
• Operador AND
Usamos o operador AND quando todas as condições ( 2 ou mais ), tem que ser verdadeiras para que se retorne Verdadeiro
• Operador OR
Usamos o operador OR quando pelo uma das condições precisa ser Verdadeira para que se retorne Verdadeiro
• Operador NOT
O operador NOT inverte o resultado de uma condição obtida através dos operadores AND ou OR
quarta-feira, 20 de agosto de 2014
Limpar Temporário Outlook
Quem recebe diariamente arquivos anexos no Outlook pode encontrar a situação descrita abaixo:
Por exemplo, todos os dias você recebe a planilha Levantamento.xlsx. Você a abre e trabalha com ela fazendo as devidas análises e alterações.
Dia após dia esse processo se repete. Mas chega um dia em que, do nada, não consegue mais abrir essa planilha. Você então entra em contato com quem lhe encaminha esse levantamento pra ver se houve alterações na planilha ou no seu modo de envio. Mas o processo continua o mesmo.
Então por que não consegue abrir o arquivo?
A resposta é que, cada vez que você recebe e abre esse arquivo, o Outlook salva um arquivo temporário e cada vez que salva, ele coloca uma numeração incremental automática. Ex. Levantamento(1).xlsx, Levantamento(2).xlsx, Levantamento(3).xlsx e assim por diante.
Porém, o limite para esses arquivos é até o 99 Levantamento(99).xlsx. Quando ele atinge esse número, o Outlook não consegue mais salvar o arquivo temporário e dessa forma não abre o arquivo anexo ao email.
Para resolver esse problema, basta ir até a pasta C:\Documents and Settings\UsuárioLogado\Configurações locais\Temporary Internet Files\Content.Outlook e apagar todos os arquivos e pastas existentes.
Pode apagar sem medo, pois são somente arquivos temporários.
Lembrando que onde está UsuárioLogado você tem que substituir pelo nome do usuário que efetuou o Login na Máquina.
Uma maneira de fazer isso rápido e também poder deixar disponível a todos os colaboradores de sua empresa é criar um arquivo de texto com extensão VBE conforme passo a passo abaixo.
1) Clicar na tecla Windows + R
2) Na caixa executar, digitar Notepad
3) Colar o Código abaixo
on error resume next
Set WshShell = Wscript.CreateObject("Wscript.Shell")
set fso = CreateObject("Scripting.FileSystemObject")
aUser=inputbox("Informe o nome do usuário Logado")
if len(aUser)<>7 then
msgbox aUser & " - Usuário incorreto!"
else
set Folder= fso.GetFolder("C:\Documents and Settings\" & aUser & "\Configurações locais\Temporary Internet Files\Content.Outlook")
' delete all subfolders and files
For Each f In folder.SubFolders
On Error Resume Next
name = f.name
f.Delete True
if err then
msgbox a & " - Verificar o usuário informado!"
end if
On Error GoTo 0
Next
msgbox ("Pasta limpa com sucesso!!!")
end if
4) Clicar em Salvar Como
5) Em Nome do arquivo: informar um nome com extensão ( Ex. LimpaOutlook.vbe )
6) Em Salvar como tipo: selecionar Todos os Arquivo
7) Em Codificação: Deixar como ANSI
O
Arquivo será salvo conforme abaixo:
Esse é um tipo de arquivo executável. Ao clicar 2 vezes, informar o Nome do usuário logado.
Se o usuário for informado corretamente, será exibida a mensagem abaixo
Caso Contrário
VBA - MsgBox
A função MsgBox() pode ter diversas possibilidades de combinações de botões de acordo com os valores ou constantes informadas no código.
A linha de código da função MsgBox() pode ser escrita de duas formas, porém possuem o mesmo efeito:
• MsgBox "Exemplo", 0, "Live Brain Tutoriais"
• MsgBox "Exemplo", vbOkOnly, "Live Brain Tutoriais"
Para ambos os casos, será exibida a seguinte Caixa de Mensagem:
Abaixo os ícones disponíveis
É possível combinar valores para exibir botões e avisos na MsgBox().
Exemplo 1: Botões Anular, Repetir e Anular e o ícone Exclamação
MsgBox "Exemplo", vbAbortRetryIgnore + vbExclamation, "Título"
Exemplo 2: Botões Sim e Não e o Ícone Interrogação
MsgBox "Exemplo", vbYesNo + vbQuestion, "Título"
Marcadores:
access,
caixa de mensagem,
código,
excel,
mensagem,
msgbox,
vba,
vbabortretryignore,
vbcritical,
vbexclamation,
vbinformation,
vbokcancel,
vbokonly,
vbquestion,
vbyesno,
vbyesnocancel
Assinar:
Postagens (Atom)