sábado, 12 de setembro de 2015

Do While e Do Until

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"

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.
For i = 1 To 10
      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
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.
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")
For i = 0 To 10
    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.
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”
 Agora criamos o Loop
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

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







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 a lista completa das combinanações de botões disponíveis nas Caixas de Mensagens e seus respectíveis valores e constantes:


 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"