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

Einfügen von Zeilen extrem langsam ;-(

Forumthread: Einfügen von Zeilen extrem langsam ;-(

Einfügen von Zeilen extrem langsam ;-(
11.02.2017 15:27:37
Zeilen
Hallo liebe VBA-Experten!
Ich brauche wieder einmal Eure Hilfe - ich habe einen Projektplan erstellt, in welchem Zeilen via Makro eingefügt werden - leider ist das Ganze extrem langsam ;-(
Unter Excel 2007 ist die Geschwindigkeit noch annehmbar - ab 2013 eine Katastrophe...
Ich wäre Euch daher sehr dankbar, wenn Ihr Euch das mal ansehen könntet - anbei eine auf das wesentliche beschränkte Beispieldatei:
https://www.herber.de/bbs/user/111380.xlsm
Was auch noch nett wäre, wenn man gleich mehrere Zeilen einfügen oder löschen könnte - je nach dem wie viele Zeilen man markiert hat... Aber wie stelle ich das an? Wäre auch hier über Eure Hilfe dankbar!
Glg,
Chrisi
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einfügen von Zeilen extrem langsam ;-(
11.02.2017 19:56:58
Zeilen
Hat wirklich niemand eine Idee? Oder zum umfangreich?
Wäre wirklich nett, wenn sich jemand die Mühe macht und mir folglich einen Tipp gibt - besten Dank im Voraus!
Lg
AW: Einfügen von Zeilen extrem langsam ;-(
11.02.2017 20:07:31
Zeilen
Hallo Chris,
die Makros sollten schneller werden, wenn neben der Abschaltung der Bildschirmaktualisierung auch der Berechnungsmodus temporär auf Manuell gesetzt wird.
Hauptproblem ist deine volatile benutzerdefinierte Funktion PROFEXIndentLevel, die bei jeder Neu-Berechnung des Blattes in allen Zellen neu berechnet wird. Aber auch alle anderen Formeln in Zellen können das Makro extrem ausbremsen.
Hier der Code mit Anpassungen als Textdatei.
https://www.herber.de/bbs/user/111385.txt
LG
Franz
Anzeige
AW: Einfügen von Zeilen extrem langsam ;-(
12.02.2017 08:47:27
Zeilen
Guten Morgen Franz,
vielen lieben Dank für deine Rückmeldung! Das mit dem Berechnungsmodus bringt definitiv etwas!
Hast Du zufällig noch eine Idee, wie ich das mit mehreren Zeilen auf einmal einfügen anstelle? D.h. ich markiere einen Bereich in welchen dann die Zeilen reinkopiert werden - soll aber nur da funktionieren, wo noch Leerzeilen vorhanden sind - wo kopierte Zeilen vorhanden sind, soll man nur einzelne Zeilen einfügen können (wie jetzt auch schon)...
Und das Löschen mehrerer Zeilen auf einmal (je nachdem wieviele markiert wurden) würde ich auch begrüßen.
Vielleicht kannst Du mir hierzu noch deine Hilfe anbieten... Natürlich ist der Rat von jedem anderen auch willkommen!
Lg,
Chrisi
Anzeige
AW: Einfügen von Zeilen extrem langsam ;-(
12.02.2017 14:36:32
Zeilen
Hallo Chrisi,
hier die Textdatei mit angepasster Variablendeklaration und den beiden Makros zum Einfügen bzw. Löschen von Zeilen.
https://www.herber.de/bbs/user/111400.txt
Vor dem Löschen mehrerer Zeilen erfolgt immer eine Sicherheitsabfrage.
LG
Franz
Anzeige
AW: Einfügen von Zeilen extrem langsam ;-(
12.02.2017 17:51:10
Zeilen
Hallo Franz,
Du bist echt der Beste - funktioniert genauso wie ich mir das vorgestellt habe!!!
Ich bin Dir mind. ein Bier schuldig - wenn Du aus Österreich bist, kann ich meine Schuld gerne mal tilgen ;-)
Vielen lieben Dank nochmal und schönen Abend noch!
Lg,
Chrisi
AW: Einfügen von Zeilen extrem langsam ;-(
12.02.2017 18:04:19
Zeilen
Hallo Franz,
leider habe ich doch noch ein Problem festgestellt - wenn die Zeilen von oben nach unten markiert werden passt alles - jedoch von unten nach oben wird nur eine Zeile eingefügt oder gelöscht - was macht das für einen Unterschied? Vielleicht kannst mich hierzu noch aufklären...
Lg,
Chrisi
Anzeige
AW: Einfügen von Zeilen extrem langsam ;-(
12.02.2017 21:06:57
Zeilen
Hallo Chrisi,
das liegt an der Art wie die 1. Zeile ermittelt wird.
Im Moment wird die ActiveCell genommen - diese ist dort, wo du mit dem makieren beginnst.
Für das Löschen/Einfügen bei mehren markierten Zeilen wird dann aber die letzte Zeile ermittel, indem die Anzahl Zeilen zur Startzeile adiert werden
Ändere in den beiden Makros
    intLigne = ActiveCell.Row

in
    intLigne = Selection.Row

dann sollte es passen,
LG
Anzeige
;
Anzeige

Infobox / Tutorial

Einfügen von Zeilen in Excel: Tipps und Tricks zur Performance


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Code für das Einfügen von Zeilen einfügen:

    Sub ZeilenEinfügen()
       Application.ScreenUpdating = False
       Application.Calculation = xlCalculationManual
    
       Dim intLigne As Long
       intLigne = Selection.Row
    
       ' Anzahl der markierten Zeilen
       Dim Anzahl As Long
       Anzahl = Selection.Rows.Count
    
       ' Zeilen einfügen
       Rows(intLigne & ":" & intLigne + Anzahl - 1).Insert Shift:=xlDown
    
       Application.Calculation = xlCalculationAutomatic
       Application.ScreenUpdating = True
    End Sub
  4. Code für das Löschen von Zeilen einfügen:

    Sub ZeilenLoeschen()
       Application.ScreenUpdating = False
       Application.Calculation = xlCalculationManual
    
       Dim intLigne As Long
       intLigne = Selection.Row
    
       ' Anzahl der markierten Zeilen
       Dim Anzahl As Long
       Anzahl = Selection.Rows.Count
    
       ' Zeilen löschen
       Rows(intLigne & ":" & intLigne + Anzahl - 1).Delete
    
       Application.Calculation = xlCalculationAutomatic
       Application.ScreenUpdating = True
    End Sub
  5. Makros ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Du kannst die Makros über Entwicklertools > Makros ausführen.

Häufige Fehler und Lösungen

  • Langsame Performance: Wenn das Einfügen von Zeilen langsam ist, kann es helfen, die Bildschirmaktualisierung (Application.ScreenUpdating) und den Berechnungsmodus (Application.Calculation) temporär auszuschalten, wie im obigen Code gezeigt.
  • Nicht alle Zeilen werden gelöscht/eingefügt: Achte darauf, dass die korrekte Zeile für das Einfügen oder Löschen ermittelt wird. Bei Problemen kann die Änderung von intLigne = ActiveCell.Row zu intLigne = Selection.Row helfen.

Alternative Methoden

Wenn du keine VBA-Makros verwenden möchtest, kannst du auch die folgenden Methoden ausprobieren:

  • Tastenkombinationen: Drücke Strg + +, um eine Zeile einzufügen, oder Strg + -, um eine Zeile zu löschen. Diese Methode ist schneller, erfordert jedoch, dass du jede Zeile einzeln auswählst.
  • Rechtsklick-Menü: Markiere die Zeilen, klicke mit der rechten Maustaste und wähle Einfügen oder Löschen.

Praktische Beispiele

  1. Einfügen mehrerer Zeilen: Markiere mehrere Zeilen, gehe zu Entwicklertools und führe das ZeilenEinfügen-Makro aus.
  2. Löschen mehrerer Zeilen: Markiere die Zeilen, die du löschen möchtest, und führe das ZeilenLoeschen-Makro aus.

Tipps für Profis

  • Nutze benutzerdefinierte Funktionen sparsam, da sie die Performance beeinträchtigen können. Achte darauf, dass volatile Funktionen, wie PROFEXIndentLevel, nur dann verwendet werden, wenn es notwendig ist.
  • Teste deine Makros in einer Kopie der Datei, um ungewollte Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Warum ist das Einfügen von Zeilen in Excel 2013 langsamer als in Excel 2007?
Das liegt oft an der Verwendung von komplexen Formeln oder benutzerdefinierten Funktionen, die bei jeder Berechnung neu ausgewertet werden müssen.

2. Wie kann ich sicherstellen, dass nur leere Zeilen eingefügt werden?
Du kannst die Logik im Makro anpassen, um zu überprüfen, ob die Zielzeilen leer sind, bevor du neue Zeilen einfügst.

3. Was kann ich tun, wenn mein Makro nicht funktioniert?
Überprüfe, ob du alle notwendigen Berechtigungen hast und dass der Code korrekt in das Modul eingefügt wurde. Teste auch die Ausführung in einem neuen Excel-Dokument.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige