如何跨多个模块编写动态 MS-Access VBA 函数调用?

How do you write a dynamic MS-Access VBA function call across multiple modules?

提问人:Catalyst 提问时间:11/15/2023 最后编辑:Catalyst 更新时间:11/15/2023 访问量:52

问:

我有一个场景,我有多个包含“CreateMember”函数的模块。我有一个 Sub 可以决定调用哪个模块,但是动态调用错误,指出它无法找到 Sub。

我正在运行的线路是

Application.Run (moduleName + ".CreateMember", param1, param2, param3)

moduleName 在调试器中正确解析。我得到“Module1.CreateMember”,但它出错了,

Error 2517, Microsoft Access cannot find the procedure.

现在,如果我将其切换到非动态调用,它确实可以解析并正常工作。

CreateMember 在所有模块中都定义为 Public,因此这不是问题。

我想知道是否不支持合格的动态过程调用?

VBA 函数 MS-Access Dynamic

评论

0赞 Tim Williams 11/15/2023
尝试不带括号
0赞 Catalyst 11/15/2023
删除括号不会传递语法。
1赞 Tim Williams 11/15/2023
另请参阅模块名称与项目名称的 stackoverflow.com/a/21758357/478884。你需要Application.Run projectName + ".CreateMember", param1, param2, param3
3赞 June7 11/15/2023
为什么有多个 CreateMember 函数?也许你应该有一个带参数的过程。
3赞 Erik A 11/15/2023
听起来您正在使用模块作为类。不要。如果需要静态类,请改用预声明的类。

答:

0赞 Gustav 11/15/2023 #1

除了 Erik A 的建议外,您能得到的最接近的建议是:

Public Function RunCreateMember(ModuleName As String)

    Select Case ModuleName
        Case "Module1"
            Module1.CreateMember
        Case "Module2"
            Module2.CreateMember
    End Select
            
End Function

评论

1赞 M. Johnstone 11/15/2023
您不是还需要模块的参数吗?
1赞 Gustav 11/15/2023
@M.Johnstone:是的。这只是一个说明方法的scheleton。