【问题标题】:Procedure Too Large程序太大
【发布时间】:2011-04-14 15:44:09
【问题描述】:

我在 VBA 中收到此错误消息 -Procedure too large。这个错误的原因和出路是什么?

【问题讨论】:

    标签: vba error-handling ms-office


    【解决方案1】:

    您可能有一个或多个巨大的过程/函数,我认为 VBA 的限制为每个过程 64k 或其他值。

    您可以通过将该过程拆分为多个过程来解决此问题,然后这些过程可由一个过程调用。

    所以不要有:

     Sub GiantProcedure()
          ... ' lots and lots of code
     End Sub
    

    你会有类似的东西:

     Sub GiantProcedure()
          ... ' a little bit of common code
          Proc1()
          Proc2()
          Proc3()
    
     End Sub
    
     Sub Proc1()
          ... ' quite a bit of code
     End Sub
    
     Sub Proc2()
          ... ' quite a bit of code
     End Sub
    
     Sub Proc3()
          ... ' quite a bit of code
     End Sub
    

    【讨论】:

    • 这个错误是直接出自 1980 年代... VBA 已经达到了一个新的水平的古老... 手掌
    【解决方案2】:

    您的编译程序不能超过 64kb。你应该把它分解成不同的子例程。

    http://msdn.microsoft.com/en-us/library/Aa264541

    【讨论】:

    • 或者以其他方式重构方法。
    【解决方案3】:

    如果宏是使用 64 位版本的 Office 创建的,您可能会收到此错误消息。有关更多详细信息和解决方法,请参阅以下文章:

    "Compile Error: Procedure too large" error message when you try to run a VBA macro in a 32-bit version of an Office 2010 program

    【讨论】:

      【解决方案4】:

      GiantProcedure 的想法不适合我,我使用的是 Microsoft Powerpoint 2013。 然后我在每个“proc”之前添加了一个“call”。像这样:

      Sub GiantProcedure()
      
        Call Proc1()
        Call Proc2()
        Call Proc3()
      
      End Sub
      

      现在,它可以工作了。

      【讨论】:

        【解决方案5】:

        不知道为什么推荐票数最高的帖子,因为巨大的程序代码也不适合我。最终起作用的是:

        Sub MacroName
        
        Call ProcedureName1
        Call ProcedureName2
        etc...
        
        End Sub
        
        Sub ProcedureName1
        'insert your vba code here
        
        End Sub
        

        只要我调用了正确的命名子,调用语句就会拉出每个子。

        【讨论】:

          【解决方案6】:

          同意,程序应该分成更小的子程序,而不是一大段代码。

          当 Excel 的 32 位 安装在 64 位 上运行/编译完美时,我已经看到 Procedure too large 错误安装代码是在上面编写的 - 因此,如果发生 Procedure too large 错误 [突然] 并且以前可以正常工作,请检查您尝试运行代码的 Excel 安装是否为32 位,然后尝试安装 64 位。

          【讨论】:

            【解决方案7】:

            使用 32 位版本的 Office 2010 程序 或者将模块分成几部分

            【讨论】:

              【解决方案8】:

              我的员工在他们较弱的计算机上收到相同的信息,但我没有。因此,要么是您计算机上的内存小于 16GB,要么是您的英特尔处理器太弱。第 8 代之后的 i7 英特尔处理器绝对可以完成这项工作。只需在您的计算机上安装更好的计算机处理器和更好的内存,它就会工作。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-05-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多