如何在多模块间动态调用MS-Access VBA的CreateMember函数?
Access VBA动态调用模块过程报错问题解决
问题场景
多个标准模块中都包含Public修饰的CreateMember函数,尝试通过Application.Run动态指定模块调用该函数时触发错误2517(Microsoft Access无法找到该过程)。执行代码如下:
Application.Run (moduleName + ".CreateMember", param1, param2, param3)
调试时moduleName已正确解析为"Module1",但拼接成"Module1.CreateMember"作为参数传入后依然报错,静态直接调用Module1.CreateMember param1, param2, param3可正常运行。
原因及解决方法
- 核心问题:
Application.Run不支持直接传入"模块名.过程名"这种拼接后的完整字符串作为第一个参数。当前写法会把整个拼接字符串当作独立的过程名去查找,自然找不到对应过程。 - 正确写法:将模块名和过程名分开作为前两个参数传递,后续依次传入过程所需参数,同时注意不要给
Application.Run加括号(加括号会强制将参数作为表达式求值,引发额外错误):Application.Run moduleName, "CreateMember", param1, param2, param3 - 额外验证点:确保调用的是标准模块(而非类模块)中的
Public函数,静态调用正常则此条件已满足。
内容的提问来源于stack exchange,提问作者Catalyst
相关产品推荐
相关产品推荐

