【问题标题】:Cannot run the macro... the macro may not be available in this workbook无法运行宏...此工作簿中可能没有该宏
【发布时间】:2013-08-25 17:19:34
【问题描述】:

我正在尝试调用不同工作表上的子程序,但我收到了运行时错误消息。

具体来说,我在这些工作表中有两个工作表和多个 VBA sub。在其中一个 VBA 项目(比如 workbook1.xlsm)中,我有以下代码:

Sub AnalysisTableMacro()
Workbooks("Python solution macro.xlsm").Activate
Application.Run "Python solution macro.xlsm!.PreparetheTables"
End Sub

但我收到以下错误。两个工作表上的宏都已启用。在这两个工作表中,潜艇都在 Module1 中。

无法运行宏“Workbook.xlsm!PrepareTheTables”。该宏可能在>此工作簿中不可用,或者所有宏都可能被禁用。

我也尝试了Application.Run "Python solution macro.xlsm!Module1.PreparetheTables",但没有成功。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    删除您的名称宏并重新构建。 我这样做了,并且宏起作用了。

    【讨论】:

    • 我对这个解决方案不感兴趣(自然),但是当其他建议失败时,这个成功
    【解决方案2】:

    根据Microsoft's KB,尝试允许以编程方式访问 Visual Basic 项目:

    1. 单击 Microsoft Office 按钮,然后单击 Excel 选项。
    2. 点击信任中心。
    3. 点击信任中心设置。
    4. 点击宏设置。
    5. 单击以选中“信任对 VBA 项目对象模型的访问”复选框。
    6. 单击“确定”关闭“Excel 选项”对话框。
    7. 您可能需要关闭并重新打开 excel。

    【讨论】:

    • 我知道这是一个旧答案,但由于此 Q&A 已链接到,因此此处需要有一条评论说 不要这样做。这是非常危险的可怕的、不合理的建议。不要勾选该复选框,除非您在 VBA 中进行实际的元编程,或者需要运行这样做的代码。这个答案完全不适合这里的这个 OP。选中此框的唯一原因是如果您使用的是 VBIDE API并且您知道自己在做什么。否则,这是一个巨大的宏病毒安全漏洞。
    • 只是为了用一点现实主义来引诱 Mathieu Guindon 的评论 - 在行业中这样做并不少见,因为这是一个建设性的步骤,可以实际调用宏。在我看来,它留下的安全漏洞并不令人望而却步。并不是说你应该只做这个,但这个选项不值得直接拒绝。
    【解决方案3】:

    我遇到了和 OP 一样的问题,发现是由于选项声明拼写错误:

    ' Comment comment  
    
    Options Explicit  
    
    Sub someMacroMakechart()
    

    在子模块中,而不是正确的;

    ' Comment comment  
    
    Option Explicit  
    
    Sub someMacroMakechart()
    

    【讨论】:

      【解决方案4】:

      如果工作簿名称中有空格,则必须在文件名周围使用单引号 (')。我也删除了句号。

      Application.Run "'Python solution macro.xlsm'!PreparetheTables"
      

      【讨论】:

        【解决方案5】:

        遇到了同样的问题,我“编译的 VBA 项目”发现了一个错误。修正和编译后,宏工作。

        【讨论】:

          【解决方案6】:

          我必须从文件名和宏名中删除所有短划线和下划线,确保启用了宏并将它们添加到模块名.宏名

          这就是我最终得到的结果:Application.Run ("'" & WbName & "'" & "!ModuleName.MacroName")

          【讨论】:

            【解决方案7】:

            我也遇到了这个错误的问题,原来是文件名导致了问题。

            我是这样称呼它的: Application.Run "'" & strPath & strFName & "'!UPC.PrintaFew"

            变量 strFName 中包含一个撇号,这当然把事情搞砸了。我花了几个小时才弄明白。但是一旦从文件名中删除撇号,它就起作用了。

            【讨论】:

              【解决方案8】:

              在类模块中创建例程时也会遇到此问题。

              当您尝试在外部运行代码时,您会收到此错误。
              您也不能将宏分配给类模块的成员按钮。

              如果您尝试通过按绿色播放按钮从代码中运行,您也会看到相同的错误。

              要么将例程移入常规模块,要么在调用类成员的常规模块中创建新例程。

              【讨论】:

                【解决方案9】:

                在我的情况下,当子名称与模块名称相同时出现此错误。

                【讨论】:

                • 有一个在自动 Excel 2003 中工作的宏,但在我转移到 Excel 2010 时没有。重命名 Sub 并且它工作。现在我必须回去检查每个 VBA 文件。
                【解决方案10】:

                在我的情况下,当我将宏(公共子)放入文件的 ThisWorkbook 部分时发生错误,期望它将使其对 Application.Run 函数可见。事实并非如此,我收到了你提到的那个错误。

                我将宏移到一个单独的模块中,它解决了问题。

                【讨论】:

                  【解决方案11】:

                  如果您在“Microsoft Excel 对象”(如 Sheet1、Sheet2、...)中创建子或函数而不是在模块中创建它,也会发生此错误。

                  例如: 您使用 VBA 创建一个按钮并设置 .OnAction = 'btn_action' 。而 Sub btn_action 您将其放入 Sheet 对象中,而不是放入 Module。

                  【讨论】:

                    【解决方案12】:

                    进入任务管理器,查看是否有任何 Microsoft Excel 进程在后台运行。我关闭了我的 excel 后台进程,我的代码再次运行。

                    【讨论】:

                    • 如此简单。我遇到了这个问题,所以我检查了是否有一个 Excel 进程正在运行。它就在那里!我杀了它。有效。所以现在我认为问题是有时一个 Excel 进程可以在不受机器控制的情况下运行。它必须被杀死才能正常工作。
                    【解决方案13】:

                    我收到了相同的错误消息“找不到宏 ___ 等”,即使在我将文件保存为 XLSX 后,这个问题仍然存在。这看起来很奇怪......当文件没有宏时,它怎么可能运行宏!

                    当我使用自定义 UI 编辑器检查文件时,我发现在文件初始化时调用了一个宏,而当用户单击“保存”按钮时又调用了另一个自定义宏。

                    使用自定义 UI 编辑器,我删除了所有 XML 代码,错误消息消失了。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2017-03-09
                      • 2021-01-16
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多