Função Eval

Você pode utilizar a função Eval para avaliar uma expressão (expressão: uma combinação de operadores, nomes de campos, funções, literais e constantes avaliados como um único valor. As expressões podem especificar critérios (como Valor do Pedido > 10000) ou executar cálculos em valores de campos (como Preço*Quantidade).) que resulte em uma seqüência de texto ou em um valor numérico.

É possível criar uma seqüência e enviá-la para a função Eval como se a seqüência fosse uma expressão real. A função Eval avalia a expressão em seqüência (expressão de cadeia de caracteres: uma expressão avaliada como uma cadeia de caracteres contíguos. Os elementos da expressão podem incluir: funções que retornam uma cadeia ou uma cadeia Variant (VarType 8); uma cadeia literal, constante, variável ou Variant.) e retorna seu valor. Por exemplo, Eval("1 + 1") retorna 2.

Se você enviar uma seqüência para a função Eval que contenha o nome de uma função, a função Eval retornará o valor de retorno da função. Por exemplo, Eval("Chr$(65)") retorna "A".

Sintaxe

Eval(exprseq)

O argumento exprseq é uma expressão que avalia uma seqüência de texto alfanumérico. Por exemplo, exprseq pode ser uma função que retorna uma seqüência ou um valor numérico. Ou pode ser uma referência a um controle (controle: um objeto da interface gráfica do usuário, como uma caixa de texto, uma caixa de seleção, uma barra de rolagem ou um botão de comando, que permite a usuários controlar o programa. Você usa controles para exibir dados ou opções, executar uma ação ou facilitar a leitura da interface do usuário.) de um formulário. O argumento exprseq deve avaliar uma seqüência ou um valor numérico; ele não pode avaliar um objeto do Microsoft Access (objeto do Microsoft Access: um objeto definido pelo Access que se refere ao Access, sua interface, ou formulários, relatórios e páginas de acesso a dados de um aplicativo que você usa para programar os elementos da interface utilizados na inserção e exibição de dados.).

 Observação   Os exemplos a seguir demonstram o uso dessa função em um módulo do Visual Basic for Applications (VBA). Para obter mais informações sobre como trabalhar com VBA, selecione Referência sobre o Desenvolvedor na lista suspensa ao lado de Pesquisa e digite um ou mais termos na caixa de pesquisa.

 Observação   Se estiver enviando o nome de uma função para a função Eval, você deverá incluir parênteses após o nome da função no argumento exprseq. Por exemplo:

' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")   
      
Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")
      
Debug.Print Eval("Date()")
      

Comentários

Você pode utilizar a função Eval em um controle calculado (controle calculado: um controle usado em um formulário, um relatório ou uma página de acesso a dados para exibir o resultado de uma expressão. O resultado é recalculado sempre que ocorre uma alteração em um dos valores nos quais a expressão está baseada.)em um formulário ou relatório, ou em uma macro ou módulo. A função Eval retorna uma Variant (tipo de dados Variant: o tipo de dados padrão para variáveis que não têm caracteres de declaração de tipo quando uma instrução Deftype não está sendo usada. Um Variant pode armazenar dados numéricos, cadeias de caracteres, data/hora, valores Nulo ou dados Vazio.) do tipo seqüência ou numérico.

O argumento exprseq deve ser uma expressão armazenada em uma seqüência. Se você enviar para a função Eval uma seqüência que não contém uma expressão numérica ou um nome de função, mas somente uma seqüência de texto simples, ocorrerá um erro em tempo de execução (erro em tempo de execução: um erro que pode ser detectado somente quando um aplicativo está em execução.). Por exemplo, Eval("Smith") resulta em um erro.

Você pode utilizar a função Eval para determinar o valor armazenado na propriedade Value de um controle. O exemplo a seguir envia uma seqüência que contém uma referência completa de um controle para a função Eval. Essa função exibe o valor atual do controle em uma caixa de diálogo.

Dim ctl As Control
Dim strCtl As String

Set ctl = Forms!Employees!LastName
strCtl = "Forms!Employees!LastName"
MsgBox ("The current value of " & ctl.Name & _
    " is " & Eval(strCtl))
      

Você pode utilizar a função Eval para acessar os operadores da expressão que normalmente não ficam disponíveis em um módulo do VBA (Visual Basic for Applications). Por exemplo, você não pode utilizar os operadores SQL Between...And ou In diretamente em seu código, mas pode utilizá-los em uma expressão enviada para a função Eval.

O exemplo a seguir determina se o valor de um controle ShipRegion em um formulário Orders é uma das várias abreviações de estado especificadas. Se o campo contiver uma das abreviações, o intState será True (–1). Observe que são utilizadas aspas simples (') para incluir uma seqüência dentro de uma outra seqüência.

Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _
    & "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
      

Exemplo

O exemplo a seguir pressupõe que você possui uma série de 50 funções definidas como A1, A2, etc. Este exemplo utiliza a função Eval para chamar cada função da série.

Sub CallSeries()

    Dim intI As Integer

    For intI = 1 To 50
        Eval("A" & intI & "()")
    Next intI

End Sub
      

O próximo exemplo dispara um evento Click como se o usuário tivesse clicado em um botão de um formulário. Se o valor da propriedade OnClick do botão começar com um sinal de igual (=), indicando que é o nome de uma função, a função Eval chamará a função, que é equivalente a disparar o evento Click. Se o valor não começar com um sinal de igual, o valor deverá nomear uma macro. O método RunMacro do objeto DoCmd executará a macro nomeada.

Dim ctl As Control
Dim varTemp As Variant

Set ctl = Forms!Contacts!HelpButton
If (Left(ctl.OnClick, 1) = "=") Then
    varTemp = Eval(Mid(ctl.OnClick,2))
Else
    DoCmd.RunMacro ctl.OnClick
End If
      
 
 
Aplica-se a:
Access 2007