Pesquisar este blog

segunda-feira, 28 de outubro de 2013

FUNÇÃO E INSTRUÇÃO DE CONTROLE DO FLUXO DE EXECUÇÃO - FOR...NEXT

For...Next



    Instrução empregada para repetir um grupo de instruções por um número definido de vezes, utilizando esta sintaxe:

For Contador = Inicio To Fim [Step Passo]
       [Instruções]
  [Exit For]
       [Instruções]
Next [Contador]

Onde,
  • Contador: argumento obrigatório, indicando uma variável numérica, empregada como contador do número de vezes que o laço é executado;
  • Início: argumento obrigatório, define o valor inicial da variável Contador;
  • Fim: argumento obrigatório, define o valor final da variável Contador;
  • Step: argumento obrigatório, define a quantidade com que o Contador será alterado a cada passada do laço For...Next, podendo ser um número positivo ou negativo (contando-se para trás);
  • Instruções: grupo de instruções a serem executadas pelo laço For...Next;
  • Next: define o ponto de término da estrutura de laço.
As seguintes considerações são válidas para a instrução For...Next:
  • Normalmente, o valor do argumento Início deve ser maior que o argumento Fim, indicando que o laço será executado o número de vezes determinado pela expressão Fim – Início;
  • Se Início for menor do que Fim, o laço não será executado nem uma única vez, a menos que você defina o valor de Passo para um número negativo, fazendo com que a contagem do laço seja processada de trás para frente;
  • Passo pode ser qualquer valor de Contador até que Início seja maior que Fim (para Passo > 0) ou Início seja menor que Fim (para Passo < 0);
  • Evite alterar o valor de Contador dentro do laço For...Next, pois você poderá ter resultados imprevisíveis em seu código;
  • Você pode terminar abruptamente uma instrução For...Next utilizando uma ou mais instruções Exit For no interior do laço;
  • Quando o laço terminar ou quando for encontrada uma instrução Exit For, o controle do código será definido para a instrução subseqüente à instrução Next Contador;
  • Você pode aninhar instruções For...Next, uma dentro da outra, desde que cada laço For...Next possua um contador exclusivo. Esta operação é normalmente empregada para percorrer matrizes de dados linha a linha ou coluna a coluna;
  • Para percorrer todos os elementos de uma matriz ou coleção, é mais fácil empregar uma instrução For Each...Next, pois ela não exige a definição dos argumentos Início e Fim para contagem.
Exemplo: O exemplo a seguir emprega um laço For...Next para percorrer todos os controles de um formulário e tornar visível/invisível , aqueles cuja prosperidade Tag tenha sido definida para “-1” no modo Estrutura do formulário.

Public Sub ExibeCtls(fExibe as boolean)
   Dim intl as Integer
   For intl = 0 to Me.Controls.Count – 1
                If Me.Controls(intl).Tag = “-1” Then
                    Me.Controls(intl).Visible = fExibe   
                End If
   Next
End Sub

Até a Próxima!!

FUNÇÃO E INSTRUÇÃO DE CONTROLE DO FLUXO DE EXECUÇÃO - DOLOOP

DoLoop



    Instrução empregada no código de um procedimento para repetir um bloco de instruções indefinidamente ou até uma condição determinada seja verdadeira, utilizando a seguinte sintaxe:

Do [{While | Until} condição]
      [Instruções]
      [Exit Do]
      [Instruções]
Loop

Ou alternativamente:

Do
      [Instruções]
      [Exit Do]
      [Instruções]
Loop [{While | Until} condição]

Onde, 
  • Condição: argumento opcional, indicando uma expressão numérica ou string que retorne True or False;
  • Instruções: uma ou mais instruções que serão repetidas dentro do laço Do...Loop, enquanto a condição for True.
Os seguintes comentários são válidos sobre a instrução Do...Loop; 
  • Condições que retornem Null sãoconsideradas False;
  • Para sair de um laço Do...Loop, empregue uma instrução Exit Do. Nesta situação, o controle do código será enviado para a instrução imediatamente após a instrução Loop;
  • Você pode aninhar instruções Do...Loop, uma dentro da outra, sem limite do número de ninhos efetuados.
Exemplo: O exemplo a seguir demonstra como empregar uma instrução Do...Loop para processar um arquivo aberto com ADO – Active Data Objects, registro a registro, até atingir o fim do arquivo.

Sub ProcessaRegistros(rs As ADODB.RecordSet)
   Dim intl as Integer

Rs.MoveFirst

      Do until rs.EOF
          For intl = 0 to rs.Field.Count
                 Debug.Print rs.Fields(intl).Name & “=”, rs.Fields(intl).Value
          Next
      Loop
End Sub

Até a Próxima!!

FUNÇÃO E INSTRUÇÃO DE CONTROLE DO FLUXO DE EXECUÇÃO - FOR EACH...NET

For Each...Next


    Instrução empregada para repetir um grupo de instruções para cada elemento de uma coleção ou matriz, utilizando a seguinte sintaxe:

For Each Elemento In Coleção
    [Instruções]
    [Exit For]
    [Instruções]
Next [Element]

Onde,
  • Elemento: argumento obrigatório, é uma variável empregada para interagir com cada elemento da coleção ou matriz;
  • Coleção: argumento obrigatório, indicando o nome da coleção ou matriz a ser percorrida pelo laço For Each...Next;
  • Instruções: argumento opcional, indicando as instruções a serem executadas no interior do laço For..Each...Next;
  • Next: indica o término das instruções a serem executadas no interior do laço For...Each.
São válidas as seguintes considerações para a instrução For Each...Next:
  • Quando a coleção se referenciar a uma matriz, Elemento deverá obrigatoriamente ser uma variável declarada As Variant;
  • Quando Coleção se referenciar a uma coleção de dados fornecida por um objeto, Elemento poderá ser dclarada como As Variant, As Object ou As <TipoDeObjeto>, onde <TipoDeObjeto> é um objeto do mesmo tipo existente em Coleção;
  • As instruções interiores ao laço For Each serão executadas se houver pelo menos um  elemento na Coleção referenciada. Se houverem n-elementos na coleção, o grupo de instruções será executado uma vez para cada elemento, até a ocorrência do último elemento;
  • For Each...Next é útil para se percorrer todos os elementos de coleções que possuem um número indeterminado de elementos, sem que o programador tenha de se preocupar em definir quantos elementos existem na coleção;
  • Para terminar abruptamente um laço For Each...Next, empregue uma ou mais instruções Exit For no interior do laço;
  • Você pode aninhar instruções For Each.Next, desde que o Elemento empregado em cada laço seja unicamente identificável dentro do laço;
  • .Não é possível empregar a instrução For Each...Next em uma matriz de tipos de dados definidos pelo usuário, porque uma variável declarada As Variant não pode conter este tipo de dados.
Exemplo: O exemplo que se segue emprega um laço For Each...Next para percorrer todos os controles de um formulário e tornar visível/Invisível, aqueles cuja propriedade Tag tenha sido definida para “-1” no modo Estrutura do formulário.

Public Sub ExibeCtls(fExibe as boolean)
Dim ctl as Control
  For Each ctl in Me.Controls
         If ctl.Tag = “-1” Then
             Ctl.Visible = fExibe
         End If
   Next
End Sub

Até a Próxima!!

FUNÇÃO E INSTRUÇÃO DE CONTROLE DO FLUXO DE EXECUÇÃO - EXIT

Exit


    Instrução que permite terminar abruptamente um bloco Do...Loop ou For...Next, ou terminar um procedimento Function, Sub ou Property, utilizando uma destas sintaxes:

Exit Do
Exit For
Exit Função
Exit Property
Exit Sub

Onde,
  • Exit Do e Exit For: permitem terminar a execução de um laço Do...Loop ou For...Next, respectivamente, retornando o controle do código para a instrução imediatamente após a instrução Loop ou Next correspondente;
  • Exit Function, Exit Property e Exit Sub: permitem terminar o código de um procedimento Function, Sub ou Property, respectivamente.
São válidos os seguintes comentários sobre a instrução Exit:
  • Exit termina a execução de um procedimento, mas não termina o aplicativo ou definne o término de uma estrutura de laço;
  • Empregue Exit para terminar um laço finito ou infinito quando uma determinada condição tiver ocorrido, normalmente testada utilizando-se uma instrução If...Then...Else
Exemplo: O exemplo a seguir demonstra como sair de um laço Do...Loop infinito, após o mesmo ter sido executado 1000 vezes consecutivas.

Public Function Atraso()
   Dim intl as integer
    Do
      Intl = intl + 1
      If intl >= 1000 Then
          Exit Do
      End If
     Loop
End function

Até a Próxima!!

FUNÇÃO E INSTRUÇÃO DE CONTROLE DO FLUXO DE EXECUÇÃO - END

End


    Instrução que termina um procedimento ou bloco de instruções, utilizando uma destas sintaxes:

End
End Function
End If
End Property
End Select
End Sub
End Type
End Enum
End With

Onde as sintaxes empregadas geram os seguintes resultados:
  • End: termina imediatamente a execução de um programa, onde quer que seja executada, destruindo o valor de todas as variáveis existentes;
  • End Function, End If, End Property, End Select, End Sub, End Type, End Enum e End With são argumentos obrigatórios para indicar o término de funções, instruções If...The...Else, propriedades, instruções Select Case, sub-rotinas, declaração de tipos definidos pelo usuário, enumeradores e términos de blocos With, respectivamente.
Os seguintes comentários são válidos para a instrução End:
  • A função End termina absolutamente qualquer aplicativo em Visual Basic ou código escrito em VBA, eliminando o valor de todas as variáveis porventura empregadas pelo aplicativo, e destruindo quaisquer objetos representados por módulos classe. Todos os arquivos abertos com a instrução Open são fechados, e a memória utilizada pelo aplicativo é liberada para o sistema operacional;
  • Quando a instrução End é executada, nenhum evento de terminação é disparado, como Close, Unpload, QueryUnload e Terminate;
  • Para paralisar o programa e verificar o valor das variáveis, empregue a instrução Stop no lugar de End.
Exemplo: O exemplo a seguir demonstra como empregar a instrução End para terminar abruptamente um aplicativo após um determinado número de execuções. Note que o número já efetuado de execuções é armazenado mo registro do Windows com a instrução SaveSetting e recuperado com a instrução SaveSetting.

Dim Function TempoUtilizaçãoVencido()
Dim intVezes as integer
Cons conNumMaxVezes = 50
intVezes = GetSetting(“MeuAplicativo”,”Inicialização”,”NumVezes”,1)

If intVezes < conNumMaxVezes Then
    SaveSetting(“MeuAplicativo”,”Inicialização”,”NumVezes”,IntNumVezes+1)
Else
    MsgBox “Número de avaliações vencido!”, vbInformation,”Impossível prosseguir”
End If
End Function

Até a Próxima!!

FUNÇÃO E INSTRUÇÃO DE CONTROLE DO FLUXO DE EXECUÇÃO - DOEVENTS

DoEvents


    Instrução empregada para permitir que o processador execute outras instruções na lista de chamadas, permitindo que outros eventos sejam processados durante a execução deoutro procedimento, utilizando esta sintaxe:

DoEvents()

As seguintes considerações são válidas sobre a função DoEvents: 
  • DoEvents passa o controle do fluxo de execução para o sistema operacional, o qual retorna o controle para o VBA tão logo tenha de terminar outros eventos na lista de chamadas, ou até que todas as teclas fornecidas pela função SendKeys tenham sido processadas.
  • O principal emprego de DoEvents reside no cancelamento de um processo após o mesmo ter sido iniciado.
  • A instrução DoEvents é empregada para funções simples, como o pressionamento de um botão Cancelar que causa a interrupção de um processo atualmente em curso. Se você não empregar DoEvents durante o processo em execução, não poderá processar o evento Click do botão Cancelar, e a única alternativa será aguardar indefinidamente até que o processo termine.
Exemplo: O exemplo a seguir demonstra um laço infinito utilizando uma instrução Do...Loop, disparado a partir do evento Cick do botão cmdOK. O laço possuí em seu interior uma instrução DoEvents, capaz de permitir interromper sua execução a partir do evento Click de um botão cmdCancelar no mesmo formulário. Note que nesta situação. Empregua-se uma variável declarada ao nível do módulo para indicar se o botão cdmCancelar foi ou não pressionado.

Dim mfCancelar_Cclock()

  Do
    DoEvents

    If mfCancelou Then
        Exit Do

    End If
  Loop
End Sub

Sub cdmCancelar_Click()

  MfCancelou = True

End Sub

Até a Próxima!!