Access VBA - используйте переменную для вызова подпрограммы / функции в модуле формы - PullRequest
1 голос
/ 18 января 2020

У меня есть для l oop, который хранит имя подпрограммы в строковой переменной, вызывает эту подпрограмму и повторяет.

Public Sub CallByVar_Click()
        Dim i
        Dim st As String
        Dim subName(1)
        subName(0) = "A"
        subName(1) = "B"

        For i = 0 To 1
            st = "Sub_" & subName(i)
            Application.Run st
        Next i
    End Sub

Public Sub Sub_A()
        Debug.Print "run Sub_A"
    End Sub

Public Sub Sub_B()
        Debug.Print "run Sub_B"
    End Sub

Он отлично работает в модуле , но когда я вырезал и вставил это в окно кода формы , это выдает ошибку: Microsoft Access не может найти процедуру 'Sub_A.'

Я пытался использовать функции вместо Подпрограммы, я пытался использовать Call Eval() вместо Application.Run, я не могу понять, почему он работает в модуле, но не в форме. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 января 2020

Используйте CallByName для этого:

Public Sub CallByVar_Click()

    Dim i           As Integer
    Dim st          As String
    Dim subName(1)  As String

    subName(0) = "A"
    subName(1) = "B"

    For i = 0 To 1
        st = "Sub_" & subName(i)
        CallByName Me, st, VbMethod
    Next i

End Sub
...