我只是发布这个,因为我无法在任何地方找到解决方案。我终于弄明白了。真的有点傻。
在 Access 宏中使用 RunCode 属性时,我试图从我的全局模块中运行一个 Sub。我收到错误“您输入的表达式具有数据库找不到的函数名称。” 我无法弄清楚问题是什么。我听从了在这个问题上发布的每个人的建议,主要是以下几点:
- 在过程名称的末尾使用 ()
- 不要在过程名称前使用“=”
还是没用!
然后我仔细阅读了错误信息。它提到它找不到 FUNCTION 名称。显然,RunCode 属性特别需要“功能”而不是子。所以,我只是将我的 Sub 更改为 Function 并且效果很好!
希望这可以帮助。
另一个对我有用的解决方案:
模块名称不能与模块中的过程名称相同。
我对错误消息有类似的问题。我的 VBA 代码有以下声明:
private function MyFunction()
....
end function
我删除private
了声明以Macro Runcode
执行MyFunction()
例如:
Function MyFunction()
End Function
我的错误是将函数放在类模块而不是常规模块中。
Access 2013:在 MyFunction 不存在的 RunCode 中使用 MyFunction() 调用的函数给了我错误 2425。但是,以上都对我不起作用,当该函数存在并且是公共的时,我仍然收到错误号 2001。数据库位于受信任的位置。没有编译错误,但 MyFunction 中的某些内容不起作用,即
DoCmd.ShowAllRecords
在 GoToControl 努力选择我的子表单之后。真正的问题是我用 VBA 删除过滤器的代码。ShowAllRecords 手册似乎表明这应该有效,但将 DoCmd.ShowAllRecords 替换为
DoCmd.RunCommand acCmdRemoveFilterSort
解决了我的问题。
我的 VSTO C# 调用app.Run("MyMacro")
突然停止工作,错误消息开始打印。(“Access 找不到过程 MyMacro。”)
我机器上的问题是我的代码(连接到正在运行的 Access 实例)正在连接到一个僵尸数据库实例,该实例中没有该 VBA 宏。去搞清楚。僵尸实例没有显示在任务栏、Alt-TAB 显示或我使用控制台程序打印出的窗口列表中。
我发现它的方法是让我的 VSTO 代码打印出它所连接的数据库的名称。Access 数据库是我早些时候一直在使用的数据库,没有出现任何错误。在尝试运行 MyMacro 前几个小时,我已经成功关闭了 Access 应用程序。
除了将 VStudio 升级到最新版本之外,我想不出我所做的任何不寻常的事情。可能重新启动会解决问题。多么奇怪的问题。
除了调用的 VBA 函数之外,数据库似乎还需要在其中包含对象。如果没有其他对象(在我的情况下特别是表),则无法从调用环境(例如 Excel VBA)中找到该函数。
我从网上借了一个“模板”vbasic文本作为外壳。虽然我在代码部分重命名了函数,但 MSAccess/Vbasic 没有在模块框的函数标题中显示名称更改,所以当我运行调用该函数的宏时,它说找不到它。反复尝试修复。然后我注意到 vbasic 的代码部分中的名称与函数对话框的标题不同。所以我在标题框中手动更改了名称,它提示我保存我所做的,现在它可以工作了。也许这就是蛇软件如此受欢迎的原因。:)
Access Office 365: My subroutine works when called from within VBA and used to work in Macros. Moved function text to a separate module, saved it by itself. Gave the module (not class) a unique name.