Eval scope в Access VBA - PullRequest
2 голосов
/ 25 января 2012

Пожалуйста, помогите.

= Не работает:

Function f()
    f = 1
End Function

Private Sub Button1_Click()
    k = Eval("f()")
End Sub

= Не работает:

Private Sub Button1_Click()
    с=1
    k = Eval("с")
End Sub

= Работает:

Function f()
    f = 1
End Function

Private Sub Button1_Click()
    k = f()
End Sub

= В справке: в следующем примере предполагается, что у вас есть серия из 50 функций, определенных как A1, A2 и т. Д.В этом примере функция Eval используется для вызова каждой функции в серии.

Sub CallSeries()
    Dim intI As Integer
    For intI = 1 To 50
        Eval("A" & intI & "()")
    Next intI
End Sub 

Как заставить работать вариант 1?

Заранее спасибо.

++++++++++++++++++++++++++++

= ОБНОВЛЕНИЕ: Количество ошибок, которые я получаю в разделах «Не работает», равно 2425 ».Не могу найти название функции. "(или «Не удается найти имя выражения.» во втором случае).Извините за мой английский.

= ОБНОВЛЕНИЕ: Когда я пытаюсь явно назвать функцию в Eval:

 k = Eval("[Forms]![Form1].f()")

Я получаю ошибку 31005 - "Доступ не может вычислить выражение, потому что есть ссылка на«е»».Я начинаю подозревать, что Access запрещает использование пользовательских функций и переменных в Eval.Хотя помощь утверждает обратное.

= ОБНОВЛЕНИЕ: Работайте:

    Function f()
        f = 1
    End Function

    Private Sub Button1_Click()
        k = Eval("val(""551" & "9" & "6"")")
    End Sub

Очень странные правила двойных кавычек, как по мне.Но это не решает мою проблему.

Ответы [ 2 ]

5 голосов
/ 25 января 2012

Функция Eval не может получить доступ к функциям, которые находятся в Form модулях.Поместите функцию в обычный Module.

1 голос
/ 25 января 2012

Есть один интересный факт. Eval () не принимает пользовательские переменные в качестве аргументов, но принимает данные элементов управления формы.

...