Ошибка макроса procedure too large

I received this error message —Procedure too large — in VBA. What is the reason and way out for this error?

Dirk Vollmar's user avatar

Dirk Vollmar

173k53 gold badges255 silver badges316 bronze badges

asked Sep 20, 2010 at 12:01

Sourav's user avatar

You probably have one or more gigantic procedures/functions and I think VBA has a limit of 64k or something per procedure.

You fix it by splitting that procedure up into multiple procedures that can then be called by the one procedure.

So instead of having:

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

You’d have something like:

 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

answered Sep 20, 2010 at 12:07

Hans Olsson's user avatar

Hans OlssonHans Olsson

54.2k15 gold badges94 silver badges116 bronze badges

1

The idea of GiantProcedure didn’t work for me, using Microsoft Powerpoint 2013.
Then I added a «call» before each «proc». Like this:

Sub GiantProcedure()

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

End Sub

Now, it works.

answered Apr 2, 2018 at 16:17

Siamak's user avatar

SiamakSiamak

3351 silver badge11 bronze badges

Not sure why the top voted post is recommended as the giant procedure code didn’t work for me either. What did end up working was this:

Sub MacroName

Call ProcedureName1
Call ProcedureName2
etc...

End Sub

Sub ProcedureName1
'insert your vba code here

End Sub

The Call statement pulled each of the subs as long as I called the correct named sub.

answered Dec 6, 2020 at 0:31

Deniz Balta's user avatar

Agreed, procedures should be split into smaller subs instead of one gigantic piece of code.

I have seen the Procedure too large errors on 32 bit installations of Excel, when they run / compile perfectly fine on the 64 bit installation the code was written on — so if it is a case of Procedure too large error [suddenly] occurring and it used to work before, check if the Excel installation you are trying to run the code on is 32 bit, and try on a 64 bit installation instead.

answered Feb 16, 2021 at 23:41

Ben Carroll's user avatar

Use a 32-bit version of an Office 2010 program
Or Divide the module into parts

answered Oct 6, 2021 at 13:55

abdomohamed's user avatar

My employees get the same message on their weaker computers, but I don’t on mine. So it’s either the fact that the memory on your computer is less than 16GB or otherwise it’s the fact that you have an intel processor that’s too weak. An i7 intel processor that’s after the 8th generation should definitely get the job done. Just get a better computer processor and better memory on your computer and it will work.

answered May 17, 2021 at 20:45

Ahmedakhtar11's user avatar

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

My VBA program is very long, I can’t run the program. There is only the writing error «Compile error: Procedure too large». I have tried changing it into two procedures, but I don’t understand how to apply it to my system. can anyone help me in making this into two procedures? or can this program be shortened? Thank you, I really appreciate if you want to help me. Here is the some piece

Private Sub Worksheet_Change(ByVal Target As Range)

Dim varF1 As Variant
Dim i, cel, num As Integer
Dim rtn, myFile, str As String

On Error GoTo Err_cmm1_Click

  Select Case Target.Address(False, False)
    Case "B3"
    Range("B5").Select

    Case "B5"
    str = Range("B5")
    Range("B7") = Trim(Mid(str, Range("I3"), Range("J3") - Range("i3") + 1))
    Range("E7") = Mid(str, Range("I5"), Range("J5") - Range("I5") + 1)

    myFile = ThisWorkbook.Path & "\Part\" & Range("B7") & ".jpg"
    If Dir(myFile) = "" Then
    Else
    Image1.Picture = LoadPicture(myFile)
    End If

    myFile = ThisWorkbook.Path & "\Part\" & Range("B7") & "-1.jpg"
    If Dir(myFile) = "" Then
    Else
    Image2.Picture = LoadPicture(myFile)
    End If

    myFile = ThisWorkbook.Path & "\PIS\" & Range("B7") & ".jpg"
    If Dir(myFile) = "" Then
    Else
    Image3.Picture = LoadPicture(myFile)
    End If
    Range("B13").Select

    Case "B7"
    myFile = ThisWorkbook.Path & "\Part\" & Range("B7") & ".jpg"
    If Dir(myFile) = "" Then
    Else
    Image1.Picture = LoadPicture(myFile)
    End If

    myFile = ThisWorkbook.Path & "\Part\" & Range("B7") & "-1.jpg"
    If Dir(myFile) = "" Then
    Else
    Image2.Picture = LoadPicture(myFile)
    End If

    myFile = ThisWorkbook.Path & "\PIS\" & Range("B7") & ".jpg"
    If Dir(myFile) = "" Then
    Else
    Image3.Picture = LoadPicture(myFile)
    End If
    Range("E7").Select

    Case "E7"
    Range("B13").Select

    Case "B17"
    Range("C13").Select

    Case "C17"
    Range("D13").Select

    Case "B13"
    If Range("B63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("B14").Select
    End If

    Case "B14"
    If Range("B63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("B15").Select
    End If

    Case "B15"
    If Range("B63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("B16").Select
    End If

    Case "B16"
    If Range("B63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("B17").Select
    End If

    Case "B17"

    Range("C13").Select
      If Range("C10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "C13"
    If Range("C63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("C14").Select
    End If

    Case "C14"
    If Range("C63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("C15").Select
    End If

    Case "C15"
    If Range("C63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("C16").Select
    End If

    Case "C16"
    If Range("C63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("C17").Select
    End If

    Case "C17"

    Range("D13").Select
      If Range("D10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "D13"
    If Range("D63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("D14").Select
    End If

    Case "D14"
    If Range("D63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("D15").Select
    End If

    Case "D15"
    If Range("D63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("D16").Select
    End If

    Case "D16"
    If Range("D63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("D17").Select
    End If

    Case "D17"

    Range("E13").Select
      If Range("E10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "E13"
    If Range("E63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("E14").Select
    End If

    Case "E14"
    If Range("E63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("E15").Select
    End If

    Case "E15"
    If Range("E63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("E16").Select
    End If

    Case "E16"
    If Range("E63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("E17").Select
    End If

    Case "E17"

    Range("F13").Select
      If Range("F10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "F13"
    If Range("F63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("F14").Select
    End If

    Case "F14"
    If Range("F63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("F15").Select
    End If

    Case "F15"
    If Range("F63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("F16").Select
    End If

    Case "F16"
    If Range("F63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("F17").Select
    End If

    Case "F17"

    Range("G13").Select
      If Range("G10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "G13"
    If Range("G63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("G14").Select
    End If

    Case "G14"
    If Range("G63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("G15").Select
    End If

    Case "G15"
    If Range("G63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("G16").Select
    End If

    Case "G16"
    If Range("G63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("G17").Select
    End If

    Case "G17"

    Range("H13").Select
      If Range("H10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "H13"
    If Range("H63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("H14").Select
    End If

    Case "H14"
    If Range("H63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("H15").Select
    End If

    Case "H15"
    If Range("H63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("H16").Select
    End If

    Case "H16"
    If Range("H63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("H17").Select
    End If

    Case "H17"

    Range("I13").Select
      If Range("I10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "I13"
    If Range("I63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("I14").Select
    End If

    Case "I14"
    If Range("I63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("I15").Select
    End If

    Case "I15"
    If Range("I63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("I16").Select
    End If

    Case "I16"
    If Range("I63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("I17").Select
    End If

    Case "I17"

    Range("J13").Select
      If Range("J10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "J13"
    If Range("J63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("J14").Select
    End If
    Case "J14"
    If Range("J63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("J15").Select
    End If

    Case "J15"
    If Range("J63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("J16").Select
    End If

    Case "J16"
    If Range("J63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("J17").Select
    End If

    Case "J17"

    Range("K13").Select
      If Range("K10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If

    Case "K13"
    If Range("K63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("K14").Select
    End If

    Case "K14"
    If Range("K63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("K15").Select
    End If

    Case "K15"
    If Range("K63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("K16").Select
    End If

    Case "K16"
    If Range("K63")  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If
    Else
    Range("K17").Select
    End If

    Case "K17"

    Range("L13").Select
      If Range("L10") = "" Then
      rtn = MsgBox("‘‡”»’è‚Æ‚µ‚ćŠi‚Å‚·‚©?‡Ši‚Ìê‡Au‚Í‚¢vA•s‡Ši‚Ìê‡Au‚¢‚¢‚¦v‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B", vbYesNo)
        i = 1
        Do While (Worksheets("Record").Cells(i, 1))  ""
         i = i + 1
         Loop
        If rtn = vbYes Then
         Range("G1") = "OK"
         GoTo step1
         Else
          Range("G1") = "NG"
          GoTo step1
        End If
        End If


Case Else
End Select

Exit Sub

step1:

Touroku

Exit_cmm1_Click:
    Exit Sub

Err_cmm1_Click:
    MsgBox Err.Description
    Resume Exit_cmm1_Click



 End Sub

 

erros

Пользователь

Сообщений: 75
Регистрация: 01.01.1970

Добрый день  

  Надо сделать из txt файла красивую таблицу прайс  
1) Жму: Сервис -> Макрос -> Начать запись…  
2) Импортирую данные, пишу много умных формул, чтобы текст выглядел красиво, разукрашиваю прайс  
3) Останавливаю запись, закрываю excel, сохраняю макрос  
4) Открываю excel, запускаю макрос, а он мне: Compile error: Procedure too large  

  Какие тут могут быть советы?  
(Ниже описано как много действий надо сделать, но всеже — хоть чтонибудь подскажите)  

  PS Немного о обрабатываемом файле:  
1) Импортируется ~12000 строк, 17 столбцов  
2) Убирается около половины столбцов  
3) Теперь надо убрать товар, у которого в одной из строк написано ZPAM (около 1000 нижних позиций)  
4) Справа от этой таблицы создаются формулы типа: =если(A2=»ZPAM»;»»;если(A2″»;»»;A2)) — таким макаром создаю новую таблицу, но без ненужного товара, растягиваю эти формулы до 15000 строки (на будущее — прайс потихоньку растет)  
5) Новая таблица копируется и вставляется сама на себя специальной вставкой — чтобы вставились только значения, старая таблица удаляется  
6) производится изменение шрифта, заливки, ширины столбцов, закрепление области (шапки), дописывание контактной информации  
7) если нужен этот макрос, то если объясните, как залить его сюда, то залью

 

Serge

Пользователь

Сообщений: 11312
Регистрация: 01.01.1970

Чудно как то…  

  Сначала: «…Надо сделать из txt файла красивую таблицу прайс…»  
Потом: «…3) Останавливаю запись, закрываю excel, сохраняю макрос…»  
И между: «…пишу много умных формул, чтобы текст выглядел красиво…»  

  Когда из txt в excel перепрыгнули и какие формулы в txt текст украшают ? :)

 

{quote}{login=Serge 007}{date=24.09.2009 05:54}{thema=}{post}Чудно как то…  

  Сначала: «…Надо сделать из txt файла красивую таблицу прайс…»  
Потом: «…3) Останавливаю запись, закрываю excel, сохраняю макрос…»  
И между: «…пишу много умных формул, чтобы текст выглядел красиво…»  

  Когда из txt в excel перепрыгнули и какие формулы в txt текст украшают ? :){/post}{/quote}  

  Складская программа выдает скучный txt файл  
Для публикации наших цен, наличия на сайте создаю xls файл  
делаю все вручную  
сначала импортирую данные, потом довожу до ума прайс  
хочется создать такой макрос, чтобы делать ничего не надо было — нажал кнопочку, а он все сам сделал

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

Давайте код в сюда.  
Уберем все Select и Activate  
Код станет вполовину короче.

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

{quote}{login=erros}{date=24.09.2009 05:32}{thema=Очень длинный макрос надо сделать: Compile error: Procedure too large}{post}  
7) если нужен этот макрос, то если объясните, как залить его сюда, то залью{/post}{/quote}При написании ответа обратите внимание на кнопочку «Обзор…» Вот туда и жмите.  
Прочитайте Правила о форматах и размерах прикрепляемых файлов.

 

После прочтения правил — зайдите по ссылке  

http://www.planetaexcel.ru/forum.php?thread_id=9945  

  Эта ссылка еще на 1 странице, а там 3 варианта сбора данных из .тхт от ZVI.  
Может какой то и Вам подойдет.  
Игор67

 

erros

Пользователь

Сообщений: 75
Регистрация: 01.01.1970

{quote}{login=Лузер™}{date=24.09.2009 06:31}{thema=Re: Очень длинный макрос надо сделать: Compile error: Procedure too large}{post}{quote}{login=erros}{date=24.09.2009 05:32}{thema=Очень длинный макрос надо сделать: Compile error: Procedure too large}{post}  
7) если нужен этот макрос, то если объясните, как залить его сюда, то залью{/post}{/quote}При написании ответа обратите внимание на кнопочку «Обзор…» Вот туда и жмите.  
Прочитайте Правила о форматах и размерах прикрепляемых файлов.{/post}{/quote}  

  я имел в виду, что не знаю, как прицеплять макрос для изучения=) — не знаю, где он лежит и как его брать — записываю все макросы в PERSONAL.XLS (если не ошибаюсь, то так называется этот «секретный» екселевский файл)  

  завтра прицеплю прайс, который должен получиться и txt файл из которого надо все брать + запишу макрос по новой и сохраню его в Книга1.xls — его тоже залью

 

erros

Пользователь

Сообщений: 75
Регистрация: 01.01.1970

а может быть можно разбить макрос на части?  

  максос А делает 1/3 дела, макрос Б доделывает и готово 2/3 дела и макрос С доделывает  

  а возможно написать макрос и добавить в концовку, чтобы он запускал другой макрос? Если да — объясните плз, как так сделать — этого будет достаточно

 

Юрий М

Модератор

Сообщений: 60912
Регистрация: 14.09.2012

Контакты см. в профиле

Если Вы действительно хотите разбить всю работу на три части, то поступите следующим образом:  
1. Запись производите в «Эта книга».  
2. Запишите первую часть нужных операций. Остановите запись.  
3. Запишите вторую часть нужных операций. Остановите запись.  
4. Запишите третью часть нужных операций. Остановите запись.  
Затем, зайдите в редактор (Alt+F11), найдите первый макрос, допустим, он назван Макрос1. Перед последней строкой (End Sub) вставьте такие строки:  
Call Макрос2  
Call Макрос3  
Это при условии, что они у Вас имеют такие имена.    
А лучше всего прислушайтесь к совету Лузер™ и приложите файл или текст макроса. Наверняка его можно значительно укоротить после макрорекордера.

 

erros

Пользователь

Сообщений: 75
Регистрация: 01.01.1970

{quote}{login=Юрий М}{date=24.09.2009 10:55}{thema=}{post}  
А лучше всего прислушайтесь к совету Лузер™ и приложите файл или текст макроса. Наверняка его можно значительно укоротить после макрорекордера.{/post}{/quote}  

  А разве у меня уже не обрезан макрос? «поздно пить боржоми, когда почки отказали» — это не про меня? =)  

  + макросы записываю в PERSONAL.XLS (удобнее мне так)  
+ может мне самому удалить лишние строки из макроса с учетом всего вышеперечисленного? объясните только тогда, какие именно строки удалить — я попробую=)

 

Юрий М

Модератор

Сообщений: 60912
Регистрация: 14.09.2012

Контакты см. в профиле

Обрезан или нет у Вас макрос, мне судить трудно — я ведь его не вижу. А «лишние» строки, это те, где есть Select, Activate, возможно Scroll…    
Но без текста самого макроса сложно Вам советовать что-то конкретно.

 

erros

Пользователь

Сообщений: 75
Регистрация: 01.01.1970

Всем спасибо, разбил макрос на 2 макроса — такое решение меня устроило

 

erros

Пользователь

Сообщений: 75
Регистрация: 01.01.1970

гм… чегойто синий флажек у темы не встает, хотя при написании сообщения около «Опции:» меняю метку с «нет» на синиф флажек…

 

Serge

Пользователь

Сообщений: 11312
Регистрация: 01.01.1970

#14

26.09.2009 03:28:31

{quote}{login=erros}{date=25.09.2009 11:45}{thema=}{post}гм… чегойто синий флажек у темы не встает, хотя при написании сообщения около «Опции:» меняю метку с «нет» на синиф флажек…{/post}{/quote}  

  А на кой ляд Вам синий флажок?!

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

Я получил это сообщение об ошибке —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

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ошибка макроса overflow
  • Ошибка лаунчера сталкер лост альфа
  • Ошибка майнкрафт существует nonexistent
  • Ошибка ман тгх 03404 02
  • Ошибка ман тга 0064710

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии