我只发布这个,因为我无法在任何地方找到解决方案。我终于弄明白了。有点傻。
在Access宏中使用RunCode属性时,我试图从我的全局模块运行Sub。我收到错误“您输入的表达式有一个数据库找不到的函数名称。”我无法弄清楚问题是什么。我遵循了发布在这个问题上的每个人的建议,主要是以下内容:
仍然没有奏效!
然后我仔细阅读了错误消息。它提到它无法找到FUNCTION名称。显然,RunCode属性特别需要“Function”而不是Sub。所以,我只是将我的Sub改为Function,它工作得很好!
希望这可以帮助。
另一个对我有用的解决方案:
模块名称不能与模块中的过程名称相同。
我有一个与错误消息类似的问题。我的VBA代码有以下声明:
private function MyFunction()
....
end function
我删除了private
声明让Macro Runcode
执行MyFunction()
例如:
Function MyFunction()
End Function
Access 2013:一个从RunCode调用MyFunction()的函数,其中MyFunction不存在,这给了我错误2425.然而,上述所有工作对我来说都没有,当函数存在并且是公共的时,我仍然得到错误号2001。数据库位于可信位置。没有编译错误,但MyFunction中的某些东西不起作用,即
DoCmd.ShowAllRecords
GoToControl工作后选择我的子表单。真正的问题是我的代码删除了VBA过滤器。 ShowAllRecords手册似乎表明这应该有效,但用DoCmd.ShowAllRecords替换
DoCmd.RunCommand acCmdRemoveFilterSort
解决了我的问题。
除了调用VBA函数之外,数据库似乎需要在其中包含对象。如果没有其他对象(特别是我的表中的表),则无法在调用环境中找到该函数(例如Excel VBA)。
我想感谢上面的John Tipton并添加一些新信息。我正在使用MS Access 2016并开始遇到这个问题所以这个问题仍然是它丑陋的头脑。为了我的工作,函数名称和宏名称必须不同,并且在函数myFunc()之后的代码中,名称必须与您在Access侧栏中看到的模块名称不同。另一件奇怪的事。当我在Macro中选择RunCode时它会向我显示函数(它不会显示Sub VBA模块)我试图选择但是当我选择它时,Macro将它编码为函数名称,只有一个左侧的paren“(”。这是在Windows 8 Pro计算机上运行的。
我的错误是将函数放在类模块而不是常规模块中。