Procedure too large vba ошибка как исправить

Return to VBA Code Examples

This article will explain the VBA procedure too large error.

vba procedure too large

There are 2 main reasons that this error can appear in Excel VBA.

Check Excel Version

This error can occur if you are running a 32-bit version of Excel, but you have a very large procedure which would be better off being run in a 64-bit environment.

Just because your PC is 64-bit does not necessarily mean that your version of the Microsoft Office is 64-bit, so you will need to check your Excel version.

In the Ribbon, select File, then (1) select Account and then (2) About Excel.

vba procedure account

Check in the information that appears about Excel – it will let you know if you are running the 32-bit or 64-bit version of Office.

vba procedure excel version

If you need to upgrade to the 64-bit version, make sure that it will not effect any add-ins or other macros that you use. Most add-ins and macros need to be customized to run on the 64-bit version of office and older add-ins may not run at all.

Decrease the Size of Your Procedure

The other main reason is that your Procedure is, simply, too large! You need to try and decrease the size of your procedure by using Loops or Nested Procedures instead of having the code all in a single procedure.

You can for example break down your code into separate procedures and then call the separate procedures in your main procedure.

For example:

vba procedure call procedures

Структура файла Excel следующая:  
отображаются нужные строки с именами в зависимости от выбранных условий в табличке.  

  Нашел стандартный код для реализации:  

  Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
If Range(«f3»).Value = «Да» Then  
Rows(«2»).EntireRow.Hidden = True  
Rows(«3»).EntireRow.Hidden = True  
Else  
Rows(«2»).EntireRow.Hidden = False  
Rows(«3»).EntireRow.Hidden = False  
End If  
End Sub  

    Все бы ничего, но условий пара десятков, а строк попадающих под Скрыть/Показать около сотни. Т.е код сам простой, но его доволно много, т.к. много If-ов и вот этих строк Rows(«N»).EntireRow.Hidden = True/False.  

  В итоге на полпути компилятор стал ругаться, выдавая «Procedure too large».  

  Стал гуглить, на форумах всплыла подсказка, мол, если свыше 1000 строк в коде, то процедура считается перегруженной и следует разбить код на несколько процедур, а затем соединить их событием клика.  
И описали:  

  Private Sub A  
…  
End Sub  

  Private Sub B  
…  
End Sub  

  Private Sub cmbGo_Click()  
A:B  
End Sub  

    Я было обрадовался, но не тут то было.  
Фигня в том, что Worksheet_SelectionChange — это базовая процедура, обращающаяся к своим переменным и каким-то библиотекам.  
Т.е. переименовать ее на №1, №2 и т.д. — нельзя.  
Тогда напрашивалось очевидное: обернуть блоки кода в новые процедуры, обозначая в каждом блоке, что работаем в этом самом Worksheet_SelectionChange:  

  Private Sub A  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
…  
End Sub  
End Sub  

  Private Sub B  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
…  
End Sub  
End Sub  

  но и так васёк ругается, видимо нельзя содержать процедуру в процедуре:(  

      Вот и дошли до вопроса:    
КАК БЫТЬ?  
Если никак иначе кроме разбивки на подпроцедуры не обойти ошибку «Procedure too large», то как грамотно разделять их выполняя по сути все ту же Worksheet_SelectionChange?  
Есть ли другие решения задачи?

Permalink

Cannot retrieve contributors at this time

title keywords f1_keywords ms.prod ms.assetid ms.date ms.localizationpriority

Procedure too large

vblr6.chm1018969

vblr6.chm1018969

office

1de6ac64-fc0c-9833-024c-44b3b5c68a79

06/08/2017

medium

When compiled, the code for a procedure can’t exceed 64K. This error has the following cause and solution:

  • Code for this procedure exceeds 64K when compiled. Break this, and any other large procedures, into two or more smaller procedures.

For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

[!includeSupport and feedback]

Процедура слишком большая

Я получил это сообщение об ошибке —Procedure too large — в VBA. В чем причина и выход этой ошибки?

2010-09-20 12:01

8
ответов

Вероятно, у вас есть одна или несколько гигантских процедур / функций, и я думаю, что VBA имеет ограничение в 64 КБ или что-то на процедуру.

Вы исправляете это, разделяя эту процедуру на несколько процедур, которые затем могут быть вызваны одной процедурой.

Поэтому вместо того, чтобы:

 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

2010-09-20 12:07

Идея GiantProcedure не работала для меня, используя Microsoft Powerpoint 2013. Затем я добавил «вызов» перед каждым «процессом». Как это:

Sub GiantProcedure()

  Call Proc1()
  Call Proc2()
  Call Proc3()

End Sub

Теперь это работает.

2018-04-02 16:17

Не уверен, почему рекомендуется публикация, получившая наибольшее количество голосов, поскольку гигантский код процедуры для меня тоже не работал. В итоге сработало вот что:

Sub MacroName

Call ProcedureName1
Call ProcedureName2
etc...

End Sub

Sub ProcedureName1
'insert your vba code here

End Sub

Оператор Call вытягивал каждую из подпрограмм, пока я вызывал правильную именованную подпрограмму.

2020-12-06 03:31

Решено, что процедуры следует разбивать на более мелкие подпрограммы, а не на один гигантский кусок кода.

Я видел слишком большие ошибки процедуры в 32-битных установках Excel, когда они отлично запускаются / компилируются на 64-битной установке, код был написан, поэтому, если это случай процедуры, слишком большая ошибка [внезапно] возникает, и она раньше работала, проверьте, является ли установка Excel, на которой вы пытаетесь запустить код, 32-разрядной версией, и попробуйте вместо нее 64-разрядную установку.

2021-02-17 02:41

Используйте 32-разрядную версию программы Office 2010 или разделите модуль на части

2021-10-06 16:55

Мои сотрудники получают то же сообщение на своих более слабых компьютерах, а я — на моем. Так что либо тот факт, что объем памяти на вашем компьютере меньше 16 ГБ, либо тот факт, что у вас слишком слабый процессор Intel. Процессор i7 Intel после 8-го поколения определенно должен справиться со своей задачей. Просто купите лучший компьютерный процессор и лучшую память на вашем компьютере, и он будет работать.

2021-05-17 23:45

4676 символов вместе с операторами Sub…End Sub, не зависимо от количества пустых строк.

Это значит что процедура действительно чрезмерно перегружена.
Пробуйте удалять лишние Select, Activate.
Пользуйтесь With, циклами, массивами данных.
Создавайте отдельные функции и подпрограммы с передачей им параметров по Byref, Byval.

Придерживаясь элементарных правил, для самого себя Ваш код станет более читаемым, узнаваемым. А отдельные его части можно будет использовать повторно из под других процедур/модулей (т.н. расширяемость программы).

Понравилась статья? Поделить с друзьями:
  • Procedure formcreate sender tobject ошибка
  • Pro tools ошибка при запуске
  • Pro tools run out of cpu power ошибка
  • Pro dialog plus коды ошибок для carrier
  • Pro cs 80r ошибка ec датчик поворотной пластины