【发布时间】:2013-06-19 03:50:06
【问题描述】:
我只是发布这个,因为我无法在任何地方找到解决方案。我终于弄明白了。真的有点傻。
在 Access 宏中使用 RunCode 属性时,我试图从我的全局模块中运行一个 Sub。我收到错误“您输入的表达式有一个 database 找不到的函数名称。”我无法弄清楚问题是什么。我听从了在这个问题上发帖的每个人的建议,主要是以下几点:
- 在过程名称末尾使用 ()
- 不要在过程名称前使用“=”
还是不行!
【问题讨论】:
我只是发布这个,因为我无法在任何地方找到解决方案。我终于弄明白了。真的有点傻。
在 Access 宏中使用 RunCode 属性时,我试图从我的全局模块中运行一个 Sub。我收到错误“您输入的表达式有一个 database 找不到的函数名称。”我无法弄清楚问题是什么。我听从了在这个问题上发帖的每个人的建议,主要是以下几点:
还是不行!
【问题讨论】:
然后我仔细阅读了错误信息。它提到它找不到 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.ShowAllRecordsDoCmd.RunCommand acCmdRemoveFilterSort
解决了我的问题。
【讨论】:
另一个对我有用的解决方案:
模块名称不能与模块中的过程名称相同。
【讨论】:
除了调用的 VBA 函数之外,数据库似乎还需要在其中包含对象。如果没有其他对象(在我的例子中特别是一个表),则无法从调用环境(例如 Excel VBA)中找到该函数。
【讨论】:
我的错误是将函数放在类模块而不是常规模块中。
【讨论】:
访问 Office 365:我的子例程在从 VBA 中调用并用于在宏中工作时工作。将函数文本移至单独的模块,自行保存。给模块(不是类)一个唯一的名称。
【讨论】:
我从网上借用了一个“模板”vbasic 文本作为外壳。虽然我在代码部分重命名了函数,但 MSAccess/Vbasic 没有在模块框的函数标题中显示名称更改,所以当我运行调用该函数的宏时,它说找不到它。反复尝试修复。然后我注意到 vbasic 的代码部分中的名称与函数对话框的标题不同。所以我在标题框中手动更改了名称,它提示我保存我所做的,现在它可以工作了。也许这就是蛇软件如此受欢迎的原因。 :)
【讨论】:
我对@987654321@ 的 VSTO C# 调用突然停止工作,错误消息开始打印。 ("Access 找不到过程 MyMacro。")
我的机器上的问题是我的代码(连接到正在运行的 Access 实例)正在连接到其中没有该 VBA 宏的僵尸数据库实例。去搞清楚。僵尸实例没有显示在任务栏、Alt-TAB 显示或我使用控制台程序打印出的窗口列表中。
我发现它的方法是让我的 VSTO 代码打印出它所连接的数据库的名称。 Access 数据库是我当天早些时候一直在使用的数据库,没有出现错误。在尝试运行 MyMacro 前几个小时,我已经成功关闭了 Access 应用程序。
除了将 VStudio 升级到最新版本之外,我想不出我所做的任何不寻常的事情。可能重新启动会解决问题。多么奇怪的问题。
【讨论】: