Pesquisar este blog

segunda-feira, 28 de outubro de 2013

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!!

domingo, 27 de outubro de 2013

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

Choose


    Função empregada para selecionar e retornar um valor a partir de uma lista de argumentos, utilizando esta sintaxe:

Choose(índice, Opção 1[, Opção 2,... [, Opção n]])

Onde, 
  • Índice: argumento obrigatório, constituindo-se de uma expressão que resulte em um valor entre 1 e o número de opções disponíveis na lista;
  • Opção: argumento obrigatório, consiste em uma lista de constantes, valores, ou expressões passíveis de serem retornados pela função Choose, dependendo do valor do argumento Índice.
As seguintes considerações são válidas para a função Choose: 
  • Choose é uma função com base 1, ou seja, se Índice igual a 1, Choose retorna o valor contido na primeira opção da lista, e assim sucessivamente;
  • Ao utilizar Choose, todos os elementos da lista serão avaliados para produzir um valor, antes da escolha do item a ser retornado. Isto significa que, se cada item for o resultado retornado por uma função, todas as funções serão avaliadas, possibilitando erros imprevisíveis e muitas vezes provocando a lentidão do código;
  • Choose sempre retorna Null se o valor contido em Índice for menor que 1 o maior que o número de opções disponíveis;
  • Sempre que Índice não for um número inteiro, Choose irá arredondá-lo para o próximo número inteiro válido antes de ser avaliado.
Exemplo: Normalmente a função Choose é empregada para sincronizar itens em um grupo de opção ou em uma caixa de listagem. O exemplo a seguir emprega a função Choose para exibir um nome no lugar de um argumento numérico.

Function TipoDeItem(intItem as Integer)

TipoDeItem = Choose(intItem, “Taxa”,”Material”,”Medicamento”,”Honorários”)

End Function

Até a Próxima!!

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

Call



    Instrução empregada para transferir o fluxo de execução de um procedimento para outro procedimento Sub. Function ou API em uma DLL, utilizando esta sintaxe:

[Call] Nome [Argumentos]

Onde, 
  • Call: argumento opcional que, quando especificado, exige que os argumentos do procedimento Sub ou Function referenciado sejam necessariamente envolvidos entre parênteses;
  • Nome: argumento obrigatório, indica o nome do procedimento cujo código deseja-se executar;
  • Argumentos: argumento opcional, indica a lista de variáveis delimitadas por vírgulas, que o procedimento espera receber.
As seguintes considerações são válidas para a instrução Call:
  • O uso da instrução Call não é obrigatório, constituindo-se apenas uma questão de estilo de programação ao se executar chamadas a um procedimento no interior de outro (Sub-rotinas);
  • Ao se empregar a instrução Call para chamar um procedimento que exige a passagem de argumentos, é obrigatório fornecê-los entre parênteses. Entretanto, quando se efetua uma chamada a um procedimento qualquer sem o emprego de Call, os parênteses deverão ser omitidos, separando-se o primeiro argumento do nome do procedimento por um espaço e os demais argumentos por vírgulas;
  • Para passar uma matriz como argumento de um procedimento, o nome da variável contendo a matriz deverá ser sucedido de parênteses vazios;
  • Quando Call for emprego para chamar um procedimento API em uma DLL, pode-se empregar as instruções ByVal e ByRef para especificar que os argumentos são passados por valor ou por referência, respectivamente;
  • Quando se emprega a instrução Call para se chamar um procedimento Function, o valor retornado por pelo procedimento é descartado.
Exemplo: O exemplo a seguir ilustra a função Call é empregada para transferir o controle do fluxo de execução do procedimento atual para um procedimento Sub, cujo único objetivo é fornecer uma mensagem padronizada de erro. O procedimento Dividir tenta dividir o numerador pelo denominador. Se o denominador for zero, ou ocorrer um erro de overflow (estouro de capacidade) a rotina padrão de exibição de erro MsgErro será chamada, exibindo o erro ocorrido:

Sub MsgErro(intErro as Integer, Optional Procedimento as String)

Dim strMsg as string 
Dim strTitle as string

StrTitle = “Erro “ & intErro
If Len(Procedimento) > 0 Then
    StrMsg = strMsg & “ em “& Procedimento
End If

StrMsg = Error(Err)
MsgBox strMsg, vbOK + vbCritical, strTitle

End Sub

Function Dividir(Numerador As Double, Denominador Y As Double)

On Error Resume Next
Dividir = Numerador/Denominador

Dividir_Fim:
    Exit Function
Dividir_Erro:
     Call MsgBoxErro(Err, “Função Dividir”)
Resume Dividir_Fim

End Function

Até a Próxima!!

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

Assert


    Método do objeto Debug, empregado para suspender condicionalmente a execução de um procedimento na linha na qual aparece, utilizando a seguinte sintaxe:

Debug.Assert Expressão

Onde, 
  • Expressão: argumento obrigatório, constituindo-se de uma expressão booleana, que sempre avalia para verdadeiro ou falso (no VBA, o valor zero é sempre falso e qualquer outro valor é verdadeiro).
As seguintes considerações são válidas sobre o método Assert: 
  • Assert funciona apenas no ambiente de desenvolvimento do VBA. Quando o módulo é compilado para um executável (arquivos MDE no Access) todas as instruções contendo o método Assert são ignoradas.
Exemplo: O exemplo a seguir demonstra como empregar o método Assert para interromper temporariamente a execução do código de um procedimento que retorna a raiz quadrada de um número, tornando mais fácil depurá-lo. O procedimento será interrompido sempre que o argumento for negativo:

Option Explicit

Function RaizQuadrada(dblValor as Doublé) as Doublé

Debug.Assert dblValor < 0
RaizQuadrada = dblValor^(1/2)

End Function

Até a Próxima!!