Pesquisar este blog

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

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

AddressOf


    Operador unário que transfere o endereço de memória de um procedimento para uma função API que espera receber o primeiro do procedimento em um de seus argumentos, utilizando esta sintaxe:

AdderessOf NomeDoProcedimento

Onde,
  •  NomeDoProcedimento: argumento obrigatório, especifica o nome de um procedimento existente em um módulo padrão do projeto onde a  chamada é efetuada, cujo endereço deve ser passado para a API.
As seguintes considerações são válidas para o operador AddressOf: 
  • AddressOf é normalmente empregada em funções de call-back: uma função API existente em uma DLL, que recebe o endereço do procedimento a ser executado em um momento posterior;
  • AddressOf pode aparecer apenas em listas de argumentos de função – jamais como uma linha de código que atribui seu valor a uma variável;
  • Para capturar o endereço de memória de um procedimento utilizando a instrução AddressOf, atribua o resultado a um argumento de função do tipo Long;
  • O emprego de AddressOf pode provocar resultados imprevisíveis, de depuração difícil ou até mesmo impossível, devido a ambos os procedimentos (API em DLL e procedimento em VBA) executaram-se no mesmo processo do ambiente de desenvolvimento.
    • Para criar protótipos de funções que empregam caal-back em DLLs, você deverá utilizar o Microsoft Visual C++ ou ferramentas similares, utilizando as convenções de chamada de procedimento __ stdcall (__cdecl não funciona com AddressOf);
    • Empregue sempre uma instrução On Error Resume Next para evitar que qualquer erro proveniente do procedimento de call-back,escrito em VBA, se propague no procedimento externo (API). 

Exemplo: O exemplo a seguir demonstra como empregar as API do Windows SetTimer e KillTimer para criar um cronômetro a partir de qualquer aplicativo COM compatível (como Visual Basic, Access, Excel etc.). O cronômetro é disparado utilizando-se a função SetTimer e passando-lhe o endereço de um procedimento que deverá ser chamado quando o intervalo de tempo desejado tiver sido atingido, o que é feito utilizando-se a função AddressOf do VBA.

Declare Function SetTimer Lib “user32” (ByVal hwnd As Long, ByVal nlDEvent As Long, ByVal uElapse As Long, ByVal IpTimerFunc As Long) As Long

Declare Function KillTimer Lib “user32” (ByVal hwnd As Long, ByVal nlDEvent As Long) As Long

Dim IngTimerID As Long

Public Sub AtivaCronômetro(Optional IngTempo As Long = 5000)

‘IngTempo = Tempo em milisegundos
IngTimerID = SetTimer(0,0,IngTempo,AddressOf Minha função)

End Sub

Public Sub MinhaFunção(ByVal hwnd&, ByVal msg&, ByVal ID&, ByVal CurrentTime&)

Call KillTimer(0, IngTimerID)
MsgBox “O evento ocorreu após o tempo especificado!”

End Sub

    Para verificar o funcionamento do procedimento de Call-back, basta efetuar uma chamada ao procedimento AtivaCronômetro() passando-lhe um valor em milisegundos (o valor padrão é de 5 milesegundos). Após o intervalo fornecido (5 segundos), você obterá uma MsgBox indicando que o tempo esperado já passou.

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - VARTYPE

VarType


    Função empregada para indicar o subtipo de uma variável Variant, utilizando esta sintaxe:

VarType(NomeDaVariável)

Onde,
  • NomeDaVariável: argumento obrigatório, indicando o nome de uma variável declarada como As Variant.
As seguintes considerações são válidas para a função VarType: 
  • VarType não poe ser utilizada com uma variável Variant que contenha um tipo de dado definido pelo usuário;
  • VarType retornará uma das constantes exibidas na próxima tabela;
  • Se VarType se referenciar a uma variável Variant, contendo uma matriz, VarType irá retornar a constante vbArray somada à constante que indica o subtipo de dados da matriz. Por exemplo, se a matriz for declarada As Long, VarType retornará vbArray + vbLong.














Exemplo:

Dim varValor as Variant
Dim intTipoDeDados as Integer
varValor = 973
intTipoDeDados = VarType(varValor)     ‘Retorna 2 (vbInteger)
varValor = “Gutemberg”
intTipoDeDados = VarType(varValor)     ‘Retorna 2 (vbString)
varValor = #25/04/1961#
intTipoDeDados = VarType(varValor)     ‘Retorna 2 (vbDate)

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - TYPENAME

TypeName


    Função empregada ao retornar uma string que fornece informações do tipo de dados contido em uma variável, utilizando esta sintaxe:

TypeName(NomeDaVariável)

Onde, 
  • NomeDaVariável: argumento obrigatório, indicando o nome da variável cujo tipo de dado se pretende avaliar.
As seguintes considerações são válidas para a função TypeName:
  • TypeName não pode ser utilizada com tipos de dados definidos pelo usuário;
  • TypeName é normalmente empregada para verificar o tipo de dados contido em variáveis declaradas como As Variant, retornando uma string definida na tabela que se segue.











  • Se a variável contiver uma matriz, o valor retornado por TypeName poderá ser uma das strings indicadas na tabela anterior, sucedido de parênteses vazios “()” para indicar uma matriz. 
Exemplo:

Dim strTipo as String
Dim varVariant as Variant
Dim strTexto as String
Dim intValor as Integer
Dim curValor as Currency
Dim aintMatriz(1 to 5) as Long
strTipo = TypeName(varVariant)  ‘Retorna “Empty”
varVariant = Null
strTipo = TypeName(varVariant)  ‘Retorna “Null”
strTipo = TypeName(strTexto)      ‘Retorna “String”
strTipo = TypeName(intValor)      ‘Retorna “Integer”
strTipo = TypeName(curValor)     ‘Retorna “Currency”
strTipo = TypeName(aintMatriz)   ‘Retorna “Long()”


Até a Próxima!!

FUNÇÃO DE CONVERSÃO DE CONTEÚDO - ISOBJECT

IsObject


    Função empregada para indicar se uma variável declarada como As Variant, já foi inicializada, contendo um ponteiro para um objeto válido no sistema, utilizando esta sintaxe:

As seguintes considerações são válidas para a função IsObject:
  • IsObject deve ser utilizada apenas para variáveis declaradas como As Variant, retornando Tru (verdadeiro) se NomeDaVariável se referenciar a uma variável cujo subtipo seja vbObject;
  • Uma variável Variant possui vbObject se ela contiver um ponteiro válido para um objeto, ou se contiver o valor Nothing (obtido após a referência ao objeto ter sido termminada);
  • IsObject retorna True mesmo para variáveis que possuam o valor Nothing.
Exemplo:

Dim objObjeto as Object 
Dim varObjeto as Variant
Dim bolResultado as Boolean
bolResultado = IsObject(varObjeto)  ‘Retorna False
Set varObjeto = objObject
bolResultado = IsObject(varObjeto)  ‘Retorna True
Set varObjeto = Nothing
bolResultado = IsObject(varObjeto)  ‘Retorna True

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - ISNUMERIC

IsNumeric


    Função empregada para verificar se uma variável declarada As Variant, As String ou uma expressão, pode ser avaliada como um valor numérico, retornando True ou False, utilizando esta sintaxe:

IsNumeric(Expressão)

Onde,
  • Expressão: argumento obrigatório, consistindo no nome de uma variável ou em uma expressão válida envolvendo variáveis e/ou valores numéricos.
Exemplo: IsNumeric permite verificar o conteúdo de uma variável antes de efetuar uma operação. Ela é útil quando se emprega a função InputBox() para recuperar um valor digitado pelo usuário e verificar se este valor é ou não numérico (pois InputBox sempre retorna uma string)

Function SomaValores()
  Dim strValor as String
  Dim strMsg as String
  Dim strTitle as String

StrMsg = “Digite o ano a partir do qual os valores devem ser somados (formato ‘2003’):”
strTitle = “Ano para totalização”
strValor = InputBox(strMsg, strTitle)
If IsNumeric(strValor) Then

    ‘A função irá passar por aqui apenas se o usuário digitar um valor numérico válido
...
End If

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - ISNULL

IsNull


    Função empregada para indicar se uma variável declarada As Variant, ou uma expressão, contém ou propaga p valor Null (chr(0)), retornando True ou False, utilizando esta sintaxe:

IsNull(Expressão)

Onde,
  • Expressão: argumento obrigatório, indicando o nome de uma variável declarada como As Variant, ou uma expressão numérica ou string capaz de resultar em Null.
As seguintes considerações são válidas para a função IsNull:
  • Apenas as variáveis declaradas como As Variant podem conter o valor Null. A tentativa de associar Null a outros tipos de variáveis gera um erro em tempo de execução; 
  • Se uma expressão contendo várias variáveis e valores, uma delas contiver o valor Null, a expressão redundará no valor Null. Este procedimento é chamado “Propagação do Null”; 
  • Muitas funções de agregação de Microsoft Access, como Dcount, Dsum etc., retornam Null quando nenhum registro é encontrado com as condições especificadas. Sempre verifique com a função IsNull se estas funções retornam uma valor válido, ou você poderá gerar eventuais e imprevisíveis erros em seus aplicativos que empregam bancos de dados; 
  • Null não é igual a Empty. Empty (ou vazio) indica ausência de valor, enquanto que a expressão Null refere-se ao código ASCII = 0 (primeiro caractere da tabela ASCII).
Exemplo: O exemplo a seguir demonstra como empregar a função IsNull para verificar se uma variável contém ou não o valor Null. Nesta situação, emprega-se a tabela “Valores”, que contém os campos DataLançamento e Valor, junto da função de agregação Dsum do Microsoft Access, que irá somar todos os valores do campo Valor desta tabela, para registros que possuam a data especificada. Note que na função de agregação, todos os argumentos são strings, e que as datas devem ser fornecidas no formato mm/dd/aaaa.

Dim varValor as Variant
varValor = Dsum(“Valor”, “Valores”, “DataLançamento >= #12/25/2002#”)

If IsNull(varValor) Then
   ‘A função irá passar por aqui se nenhum registro for encontrado.
   ‘Nesta situação, atribua zero ao valor da variável

   varValor = 0

End If

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - ISMISSING

IsMissing


    Função empregada para indicar se um argumento opcional declarado com As Variant foiou não passado para um procedimento, retornando True ou False,utilizando esta sintaxe:

IsMissing(NomeDoArgumento)

Onde, 
  • NomeDoArgumento: argumento obrigatório, consistindo no nome de um argumento declarado como “Optional... As Variant. 
As seguintes considerações são válidas para a função Is Missing:
  • IsMissing deve ser usada para verificar se um argumento opcional foi recebido por um procedimento, porém, IsMissing retornará True apenas se o  argumento for declarado como As Variant. Todos os outros tipos de dados irão falhar ao se empregar IsMissing (principalmente porque os demais tipos de dados são automaticamente inicializadas para seus valores padrão – números para zero, string para “”); 
  • Para tipos de dados diferentes de Variant, empregue a sintaxe de declaração de argumentos opcionais com um valor padrão. Nesta situação, você poderá testar o argumento contra um valor determinado para indicar se o mesmo foi ou não recebido; 
  • É muito eficaz empregar um valor padrão determinado para um argumento de procedimento e evitar testá-lo no interior do código no caso de o mesmo não ter sido recebido. 
  • Se IsMissing for empregada  em um argumento declarado como ParamArray, sempre retornará o valor False; 
  • Para verificar se um argumento declarado como ParamArray foi ou não recebido, empregue as funções Lbound e Ubound para verificar os limites da matriz recebida. 
Exemplo: No próximo exemplo, a função IsMissing é empregada para verificar se os argumentos opcionais esperados pelo procedimento foram ou não recebidos.

Public Function TesteDeArgumentos(Optional varValor as Variant, _
                                                             Optional intValor as Integer = -1)

...
If IsMissing(varValor) Then
    ‘O procedimento irá passar por aqui se varValor não for fornecido
...
End If

If intValor = -1 Then
    ‘Como intValor não é Variant, verifica-se se a variável possui valor padrão como
    ‘forma de especificar se ela foi ou nãorecebida

...
End If

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - ISERROR

IsError


    Função empregada para indicar se o resultado de uma expressão gera um valor de erro, retornando True ou False, utilizando esta sintaxe:

IsError(Expressão)

Onde,
  • Expressão: argumento obrigatório, consistindo do nome de uma variável ou qualquer expressão  válida entre variáveis e/ou valores. 
As seguintes considerações são válidas para a função IsError: 
  • Valores de erros, apesar de serem códigos numéricos, são criados pelo VBA empregando-se a função CVErr, a qual produz um valor Variant subtipo Error. Normalmente, emprega-se IsError() para verificar o valor retornado por um procedimento Function. 
Exemplo: No exemplo a seguir, IsError() é empregada para verificar se o procedimento chamado Teste() retorna um valor de erro.

Dim varRetVal as Variant

On Error Resume Next

VarRetVal= Teste()
If IsError(varRetVal) Them
    ‘Ocorreu um erro, trate-o
     ...

End If

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - ISEMPTY

IsEmpty


    Função empregada para indicar se uma variável declarada As Variant já foi incializada, retornando True ou False, usando esta sintaxe:

IsEmpty(NomeDaVariável)

Onde, 
  • NomeDaVariável: argumento obrigatório, indicando o nome da variável declarada As Variant, que se pretende verificar. IsEmpty retorna True se a variável foi apenas declarada, mas ainda não foi inicializada (ou seja, não recebeu qualquer valor, pois o valor Empty é diferente do valor Null (Chr$(0)). 
Exemplo: Verificando o conteúdo de uma variável declarada As Variant:

Dim varValor as Variant
Dim bolTeste as Boolean
bolTeste = IsEmpty(varValor)   ‘Retorna True
varValor = Null                          ‘varValors recebe Null
bolTeste = IsEmpty(varValor)   ‘Retorna False
varValor = Empty                       ‘varValor recebe Empty (ou vazio)
bolTeste = IsEmpty(varValor)   ‘Retorna True

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - ISDATE

IsDate


    Função empregada para indicar se uma expressão contém uma data válida, utilizando esta sintaxe:

IsDate(Expressão)

Onde,
  • Expressão: qualquer argumento que, após ser avaliado, resulte em uma data ou hora válida. O VBA reconhece como datas válidas a faixa situada entre 1/1100 e 31/12/9999. 
Exemplo: O exemplo a seguir contém diversas expressões diferentes que, quando avaliadas por IsDate(), podem ser ou não consideradas como datas válidas.

Resultado = IsDate  (“Abril, 25, 1961”)  ‘Retorna True
Resultado = IsDate  (“25, Abril, 1961”)  ‘Retorna True
Resultado = IsDate  (“1961, 25, Abril”)  ‘Retorna True
Resultado = IsDate  (#4/25/1961#)         ‘Retorna True
Resultado = IsDate  (#25/4/1961#)         ‘Retorna True
Resultado = IsDate  (#1961/25/4#)         ‘Retorna True
Resultado = IsDate  (“25.4.1961”)          ‘Retorna False

Até a Próxima!!

FUNÇÃO DE VERIFICAÇÃO DE CONTEÚDO - ISARRAY

IsArray


    Função empregada para verificar se uma variável contém uma matriz.utilizando esta sintaxe:

IsArray(NomeDaVariável)

Onde, 
  • NomeDaVariável: argumento obrigatório, especificando o nome da variável a ser examinada. 
  • Exemplo: Use IsArray() para verificar se um argumento, normalmente declarado como Variant, contém um valor ou uma matriz, mudando a forma de processamento do argumento. 

Function ValorAoQuadrado(varValor as Variant) as Variant

 Dim inl as integer
  If IsArray(varValor) Then
 
      For intl = 0 to Ubound(varValor)

                      varValor(intl) = varValor(intl) ^ 2

      Next

      ValorAoQuadrado = varValor

  Else

      ValorAoQuadrado = varValor ^ 2

  End If

End Function

Até a Próxima!!