【问题标题】:MS Access RunCode Macro cannot find my procedureMS Access RunCode 宏找不到我的程序
【发布时间】:2013-06-19 03:50:06
【问题描述】:

我只是发布这个,因为我无法在任何地方找到解决方案。我终于弄明白了。真的有点傻。

在 Access 宏中使用 RunCode 属性时,我试图从我的全局模块中运行一个 Sub。我收到错误“您输入的表达式有一个 database 找不到的函数名称。”我无法弄清楚问题是什么。我听从了在这个问题上发帖的每个人的建议,主要是以下几点:

  1. 在过程名称末尾使用 ()
  2. 不要在过程名称前使用“=”

还是不行!

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    然后我仔细阅读了错误信息。它提到它找不到 FUNCTION 名称。显然,RunCode 属性特别需要“功能”而不是子。所以,我只是将我的 Sub 更改为 Function 并且效果很好!

    希望这会有所帮助。

    【讨论】:

    • 天哪,这让我快疯了半天!我不习惯 Access 编程,只需要包含一些代码。代码很好,模块没有显示错误,但我的“subs”甚至没有出现在选择器中(另一个表明有问题的指标)。只需将“Sub”替换为“Function”确实解决了这个问题!不用说“MS Access(上下文)帮助”甚至无法指出方向......
    • 只是想让你知道,多年后,这仍然是在拯救人们的培根
    • 谢谢。我发现该函数不需要返回任何内容或具有非默认类型。您可以将“Sub”一词替换为“Function”一词。
    • @MultiGuy 这仍然不起作用。你在哪里保存你的模块?我在左侧导航栏上有它。这让我发疯,这似乎是世界上最简单的愚蠢事情。
    • 如果你按 ALT-F11,VBA 代码区将被打开。所有的模块都在那里。不确定在导航栏上保存模块是什么意思。如果您的意思是您的 MACRO 显示在导航栏中,那是有道理的。但是您的函数代码将驻留在底层代码中,您可以通过 ALT-F11 访问它。有一个菜单(功能区)选项,但我不记得在哪里。我从不使用它。我想它会说“查看代码”或“查看 VBA”或类似的东西。
    【解决方案2】:

    我对错误消息有类似的问题。我的 VBA 代码有以下声明:

    private function MyFunction()
    
    ....
    
    end function
    

    我删除了private 声明以获取Macro Runcode 来执行MyFunction()

    例如:

    Function MyFunction()
    
    End Function
    

    【讨论】:

      【解决方案3】:

      Access 2013:在 MyFunction 不存在的 RunCode 中使用 MyFunction() 调用的函数给了我错误 2425。但是,以上都对我不起作用,并且当函数存在并且是公共的时,我仍然收到错误号 2001 .数据库位于受信任的位置。没有编译错误,但 MyFunction 中的某些内容不起作用,即

      DoCmd.ShowAllRecords 
      

      在 GoToControl 选择我的子表单之后。真正的问题是我用 VBA 删除过滤器的代码。 ShowAllRecords 手册似乎表明这应该有效,但是用

      替换 DoCmd.ShowAllRecords
      DoCmd.RunCommand acCmdRemoveFilterSort 
      

      解决了我的问题。

      【讨论】:

      • 如前所述,函数必须是公共的,不能在类模块中(包括表单/报告代码模块)。事实上,您不能调用驻留在类模块中的子程序或函数。因此,重要的是要记住表单(或报告)代码模块实际上是类对象。要调用类模块中的代码,您必须首先创建或拥有该对象的运行实例。但是,您可以使用表达式服务在表单中调用公共函数,其中包括自定义菜单或功能区代码。
      【解决方案4】:

      另一个对我有用的解决方案:

      模块名称不能与模块中的过程名称相同。

      【讨论】:

      • 我使用的是 MS Access 2016 并开始遇到此问题,因此此问题仍在抬头。为了使我的工作,函数名称和宏名称必须不同,并且在 Function myFunc() 之后的代码中,名称必须与您在 Access 侧栏中看到的模块名称不同。另一个奇怪的事情。当我在 Macro 中选择 RunCode 时,它​​会显示我试图选择的函数(它不会显示 Sub VBA 模块),但是当我选择它时,Macro 将其编码为带有单个左括号“(”的函数名称。这是在 Windows 8 Pro 机器上运行的。
      【解决方案5】:

      除了调用的 VBA 函数之外,数据库似乎还需要在其中包含对象。如果没有其他对象(在我的例子中特别是一个表),则无法从调用环境(例如 Excel VBA)中找到该函数。

      【讨论】:

        【解决方案6】:

        我的错误是将函数放在类模块而不是常规模块中。

        【讨论】:

          【解决方案7】:

          访问 Office 365:我的子例程在从 VBA 中调用并用于在宏中工作时工作。将函数文本移至单独的模块,自行保存。给模块(不是类)一个唯一的名称。

          【讨论】:

            【解决方案8】:

            我从网上借用了一个“模板”vbasic 文本作为外壳。虽然我在代码部分重命名了函数,但 MSAccess/Vbasic 没有在模块框的函数标题中显示名称更改,所以当我运行调用该函数的宏时,它说找不到它。反复尝试修复。然后我注意到 vbasic 的代码部分中的名称与函数对话框的标题不同。所以我在标题框中手动更改了名称,它提示我保存我所做的,现在它可以工作了。也许这就是蛇软件如此受欢迎的原因。 :)

            【讨论】:

              【解决方案9】:

              我对@9​​87654321@ 的 VSTO C# 调用突然停止工作,错误消息开始打印。 ("Access 找不到过程 MyMacro。")

              我的机器上的问题是我的代码(连接到正在运行的 Access 实例)正在连接到其中没有该 VBA 宏的僵尸数据库实例。去搞清楚。僵尸实例没有显示在任务栏、Alt-TAB 显示或我使用控制台程序打印出的窗口列表中。

              我发现它的方法是让我的 VSTO 代码打印出它所连接的数据库的名称。 Access 数据库是我当天早些时候一直在使用的数据库,没有出现错误。在尝试运行 MyMacro 前几个小时,我已经成功关闭了 Access 应用程序。

              除了将 VStudio 升级到最新版本之外,我想不出我所做的任何不寻常的事情。可能重新启动会解决问题。多么奇怪的问题。

              【讨论】:

                猜你喜欢
                • 2011-04-22
                • 1970-01-01
                • 1970-01-01
                • 2016-05-16
                • 1970-01-01
                • 1970-01-01
                • 2014-06-04
                • 2023-03-20
                • 1970-01-01
                相关资源
                最近更新 更多