由于我无法在任何地方找到解决方案,因此我只发布此内容。我终于弄明白了。有点傻。
在Access宏中使用RunCode属性时,我试图从我的全局模块运行Sub。我收到错误“您输入的表达式具有数据库找不到的函数名称。”我无法弄清楚问题是什么。我遵循了发布在这个问题上的每个人的建议,主要是以下内容:
仍然无法正常工作!
答案 0 :(得分:33)
然后我仔细阅读了错误消息。它提到它无法找到FUNCTION名称。显然,RunCode属性特别需要“Function”而不是Sub。所以,我只是简单地将Sub改为Function,它运行良好!
希望这有帮助。
答案 1 :(得分:4)
另一个对我有用的解决方案:
模块名称不能与模块中的过程名称相同。
答案 2 :(得分:2)
我遇到了与错误消息类似的问题。我的VBA代码有以下声明:
private function MyFunction()
....
end function
我删除了private
声明以让Macro Runcode
执行MyFunction()
例如:
Function MyFunction()
End Function
答案 3 :(得分:0)
Access 2013:一个从RunCode调用MyFunction()的函数,其中MyFunction不存在,这给了我错误2425.然而,上述所有工作对我来说都没有,当函数存在并且是公共的时我仍然得到错误号2001 。数据库位于可信位置。没有编译错误,但MyFunction中的某些东西不起作用,即
DoCmd.ShowAllRecords
在GoToControl选择我的子表单之后。真正的问题是我的代码删除了VBA过滤器。 ShowAllRecords手册似乎表明这应该有效,但用
替换DoCmd.ShowAllRecordsDoCmd.RunCommand acCmdRemoveFilterSort
解决了我的问题。
答案 4 :(得分:0)
除了调用VBA函数之外,数据库似乎还需要包含对象。没有其他对象(特别是我的情况下的表),无法在调用环境中找到该函数(例如Excel VBA)。
答案 5 :(得分:0)
我想感谢上面的John Tipton并添加一些新信息。我正在使用MS Access 2016并开始遇到这个问题所以这个问题仍然是它丑陋的头脑。为了我的工作,函数名称和宏名称必须不同,并且在函数myFunc()之后的代码中,名称必须与您在Access侧栏中看到的模块名称不同。另一件奇怪的事。当我在Macro中选择RunCode时,它会向我显示我试图选择的功能(它不会显示Sub VBA模块)但是当我选择它时,Macro将其编码为具有单个左键的函数名称" ("。这是在Windows 8 Pro计算机上运行的。
答案 6 :(得分:0)
我的错误是将函数放在类模块而不是常规模块中。
答案 7 :(得分:0)
Access Office 365:当从VBA中调用并用于宏时,我的子例程可以工作。将功能文本移到单独的模块中,并单独保存。给模块(而不是类)一个唯一的名称。
答案 8 :(得分:0)
我从网上借用了一个“模板”基本文本作为外壳。当我在代码部分重命名该函数时,MSAccess / Vbasic并未在“模块”框的函数标题中显示名称更改,因此当我运行调用此函数的宏时,它说找不到。反复尝试修复。然后,我注意到vbasic的代码部分中的名称与函数对话框的标题不同。因此,我在标题框中手动更改了名称,并提示我保存所做的操作,现在可以使用了。也许这就是为什么蛇软件如此受欢迎。 :)
答案 9 :(得分:0)
我对app.Run("MyMacro")
的VSTO C#调用突然停止工作,并且错误消息开始打印。 (“ Access找不到过程MyMacro。”)
我的机器上的问题是我的代码(连接到正在运行的Access实例)连接到其中没有该VBA宏的僵尸数据库实例。去搞清楚。僵尸实例未显示在任务栏,Alt-TAB显示或我使用控制台程序打印出的窗口列表中。
我发现它的方法是让我的VSTO代码打印出它正在连接的数据库的名称。 Access数据库是我当天早些时候一直在使用的数据库,没有错误。在尝试运行MyMacro之前的几个小时,我已经关闭了成功保存它的Access应用程序。
除了将VStudio升级到最新版本外,我想不出什么异常的方法。重新启动可能会解决问题。真是个奇怪的问题。