Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehler beim Kompilieren: Prozedur zu groß

Fehler beim Kompilieren: Prozedur zu groß
26.09.2016 15:06:04
Herr
Hallo Zusammen,
ich habe im Anhang( https://www.herber.de/bbs/user/108416.txt ) einen Code...sehr umständlich, geht wahrscheinlich auch einfacher. Jedenfalls kommt bei der Anwendung immer die Fehlermeldung: "Prozedur zu groß".
Nun hab ich mich bereits im Inet erkundigt und herausgefunden, dass es wohl an der 64kb-Grenze liegt.
Kann mir jemand den Code vereinfachen oder so verändern, dass die Fehlermeldung nicht mehr kommt. Vllt mit "Sub-Blöcken"?
Leider sind meine Möglichkeiten begrenzt, daher darf gern direkt in die Datei geschrieben werden.
Vielen Dank für die Unterstützung!
VG
Herr Koch
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler beim Kompilieren: Prozedur zu groß
26.09.2016 15:18:13
Daniel
Hi
du musst nicht jede Zelle einzeln übertragen.
immer dann, wenn du einen grösseren Zellblock ohne Lücken von einem Bereich in einen anderen überträgst, funktioniert das für alle Zellen gleichzeitig mit einem Befehl.
Wenn dabei Zeilen und Spalten getauscht werden müssen, so wie bei dir, dann geht das auch mit Inhalte einfügen - Transponieren.
ersetze in deinem Code diesen ganzen Block
WS2.Cells(Zeile, 3) = WS1.Range("K12")
WS2.Cells(Zeile, 749) = WS1.Range("K758")

durch:
WS1.Range("K12:K758").Copy
WS2.Cells(Zeile, 3).PasteSpecial xlpastevalues, Transpose:=True

und für die anderen Zellbereiche natürlich auch entsprechend.
um das hier zu vereinfachen:
Case "K12", ...,  "K758"
müsstest du auf ein IF - THEN - Konstrukt ausweichen. Analog wäre hier:
If Target.CountLarge = 1 Then
If Not Intersect(Target, Range("K12:K758")) is nothing Then
...  hier dann der weitere Code
ElseIf Not Intersect(Target, Range("H4:I4")) is nothing then
... hier dann der Code für diesen Fall
End if
End If
Gruß Daniel
Anzeige
AW: Fehler beim Kompilieren: Prozedur zu groß
26.09.2016 15:41:15
Herr
Hallo Daniel,
danke für die Hilfe. Kann ich mit dem Bereich:
WS1.Range("K12:K758").Copy
WS2.Cells(Zeile, 3).PasteSpecial xlpastevalues, Transpose:=True
1:1 beide großen Bereiche ersetzen oder muss hier noch was angepasst werden?
VG Tino
Anzeige
AW: Fehler beim Kompilieren: Prozedur zu groß
26.09.2016 15:54:32
Daniel
Hi
naja, du musst schon schauen, welches der Quelldatenbereich und welches der Zieldatenbereich ist und dann die Codes entsprechend anpassen.
Das ist nur ein Beispiel, um dir zu zeigen wie es geht.
Die konkrete Arbeit und Anpassung in deinem Code musst du schon selber machen.
wie gesagt, zusammenfassen kannst du immer alles, was einen Lückenlosen Zellblock bildet, sowohl im Quell-, als auch im Zielbereich.
sobald da eine Lücke drin ist, musst du erneut kopieren und einfügen.
Ich habe deinen Code jetzt dahingehend auch nicht vollständig überprüft, ob da in den über 700 Zellen alles durchgängig ist, dass musst du dann schon selber tun (oder jemanden dafür bezahlen, dass er deine Arbeit für dich erledigt)
Gruß Daniel
Anzeige
AW: Fehler beim Kompilieren: Prozedur zu groß
26.09.2016 16:00:10
Herr
Okay, vielen Dank...ich versuche es.
Fehler beim Kompilieren: Prozedur zu groß
26.09.2016 17:24:56
Michael
Hi,
teste mal:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WS1 As Worksheet, WS2 As Worksheet
Dim Zeile As Long
If Target.CountLarge > 1 Then Exit Sub
' Stop
If Target.Column = 11 And Target.Row >= 12 And Target.Row 
Schöne Grüße,
Michael
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Fehler beim Kompilieren: Prozedur zu groß beheben


Schritt-für-Schritt-Anleitung

  1. Identifizierung des Problems: Der Fehler "Prozedur zu groß" tritt auf, wenn die VBA-Prozedur eine Größe von 64 KB überschreitet. Das bedeutet, dass Du Deinen Code optimieren musst.

  2. Zellen effizient kopieren: Statt einzelne Zellen zu übertragen, kannst Du ganze Zellblöcke kopieren. Ändere Deinen Code wie folgt:

    WS1.Range("K12:K758").Copy
    WS2.Cells(Zeile, 3).PasteSpecial xlPasteValues, Transpose:=True
  3. Verwendung von IF-THEN: Verwende IF-THEN-Konstrukte, um den Code zu vereinfachen:

    If Target.CountLarge = 1 Then
       If Not Intersect(Target, Range("K12:K758")) Is Nothing Then
           ' Dein Code hier
       ElseIf Not Intersect(Target, Range("H4:I4")) Is Nothing Then
           ' Dein Code hier
       End If
    End If
  4. Code-Überprüfung: Achte darauf, dass alle Quell- und Zielbereiche lückenlos sind, um den Fehler "Excel Fehler beim Kompilieren" zu vermeiden.


Häufige Fehler und Lösungen

  • Fehler "Prozedur zu groß": Dieser Fehler tritt auf, wenn die Prozedur zu viele Zeilen umfasst. Reduziere die Größe der Prozedur, indem Du den Code in kleinere Unterprozeduren aufteilst.

  • Kopieren von Zellbereichen: Wenn Du versuchst, nicht zusammenhängende Zellbereiche zu kopieren, kann dies ebenfalls zu Problemen führen. Stelle sicher, dass die zu kopierenden Zellen lückenlos sind.

  • Fehler beim Kompilieren in VBA: Wenn Du diesen Fehler erhältst, überprüfe, ob alle Variablen korrekt deklariert sind und ob es keine Syntaxfehler gibt.


Alternative Methoden

  • Modularer Code: Teile Deinen Code in kleinere Subroutinen auf. Dies hilft nicht nur, die Größe der einzelnen Prozeduren zu reduzieren, sondern verbessert auch die Lesbarkeit des Codes.

  • Verwendung von Arrays: Anstatt Zellen einzeln zu bearbeiten, kannst Du Daten in Arrays speichern und dann in einem Schritt in das Arbeitsblatt schreiben. Dies kann die Ausführungsgeschwindigkeit erheblich verbessern.


Praktische Beispiele

  • Beispiel für das Kopieren eines Zellbereichs:

    WS1.Range("K12:K758").Copy
    WS2.Cells(Zeile, 3).PasteSpecial xlPasteValues, Transpose:=True
  • Beispiel für IF-THEN-Konstrukte:

    If Target.CountLarge = 1 Then
       If Not Intersect(Target, Range("K12:K758")) Is Nothing Then
           ' Deine Anweisungen hier
       End If
    End If

Tipps für Profis

  • Verwende die Option Explicit-Anweisung: Diese Anweisung zwingt Dich, alle Variablen zu deklarieren, was die Fehlersuche erleichtert und die Codequalität verbessert.

  • Regelmäßige Code-Überprüfungen: Überprüfe regelmäßig Deinen Code auf Optimierungsmöglichkeiten, um den Fehler "VBA Prozedur zu groß" zu vermeiden.

  • Nutzung von Debugging-Tools: Verwende die integrierten Debugging-Tools in Excel, um Probleme frühzeitig zu erkennen und zu beheben.


FAQ: Häufige Fragen

1. Was bedeutet der Fehler "Prozedur zu groß"?
Der Fehler tritt auf, wenn der Code eine bestimmte Größe überschreitet, typischerweise 64 KB.

2. Wie kann ich den Fehler "Excel VBA Fehler beim Kompilieren" beheben?
Optimisiere Deinen Code, indem Du ihn in kleinere Prozeduren aufteilst und sicherstellst, dass Du lückenlose Zellbereiche verwendest.

3. Gibt es eine einfache Möglichkeit, Zellen zu kopieren?
Ja, Du kannst ganze Zellbereiche kopieren, anstatt sie einzeln zu übertragen, um den Code zu vereinfachen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige