[VBA] Mehrere Zeilen in eine Tabelle einfügen

Scotty94

Ensign
Registriert
Juli 2012
Beiträge
198
Ich hab mit VBA ein kleines Makro geschrieben, welches mehrere Zeilen an das Ende einer Tabelle einfügt. Jedoch läuft der Code relative langsam bei einer höheren Anzahl von Zeilen, die eingefügt werden sollen.

Daher habe ich mich gefragt, ob man den Code nicht verbessern könnte bzw. eine einfachere / schnelle Möglichkeit gibt mein Vorhaben umzusetzen.


Code:
Private Sub CommandButton2_Click()

'==============================================
On Error Resume Next

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationAutomatic
'==============================================

Dim StartTimer As Double, Seconds As Double
StartTimer = Timer

Dim ws As Worksheet
Set ws = ActiveSheet

Dim table As ListObject
Set table = ws.ListObjects("Table1")


Dim i As Integer, j As Integer

If table.ListRows.Count > 0 Then
j = InputBox("Anzahl")
i = 0
ws.Unprotect (rmdb)
    
    If j > "100" Or j < "1" Then Exit Sub
        
        'Do Until i = j
            'table.ListRows.Add
            'i = i + 1
        'Loop
        
        For i = 1 To j
            table.ListRows.Add
        Next i
        
End If


Die Grundidee mit dem Makro ist relativ simple. Es soll möglich sein, dass man mit einem Button zügig zwischen 100 - 500 Zeilen hinzufügen kann.

Würde mich über Verbesserungsvorschläge freuen!
 
Hallo,
ich würde mal mit der Typisierung anfangen.

greetz
hroessler
 
Zuletzt bearbeitet von einem Moderator:
Ich habe den Kern der Aufgabe nicht verstanden.

Oder anders gesagt, ich würde nicht irgendeine obskure Liste quasi von innen her erweitern wollen.
Diese Liste muss (logisch…) aus dem Aufgelisteten bestehen. Also orientierte ich mich an Anfang und Ende der Rohdaten (..!) aus dene die Liste existiert um sie dann mit diesen Angaben als Objekt zu definieren oder…
…ja, wozu; DropDown, Userform? dem User anzubieten.

Eine «Tabelle» ist unter Excel nur ein Schwung Daten irgendwo auf dem Arbeitsblett. Füge ich willkürlich Zeilen ein (oder lösche sie) reiße ich womöglich anderes mit in den Abgrund.
Deshalb würde ich diese Rohdaten-Tabelle außerhalb des Sichtfeldes anlegen und pflegen und sie dann über die oben angesprochenen beschafften Infos anzusprechen.
Selbst eine immer größer werdende Datenaufstellung bleibt ein Agglomerat von Rohdaten dessen Eckdaten ich auslese um damit umzugehen.

CN8
 
Welche Daten in der Liste enthalten sind und wie diese sich verändern, wenn ich Reihen hinzufüge, ist zunächst einmal vollkommen irrelevant. Mir geht es um die Funktion und die Ausführgeschwindigkeit.

Es sollen per Button z.b 200 Reihen hinzugefügt werden aber nicht mit einer Berechnungszeit von 1-2min.
 
Das was hier Zeit frist, ist die Schleife ...

Erster Suchmaschinentreffer: "ActiveSheet.Rows("[Startzeile]:[Endzeile]").Insert"
 
Leute Leute, warum denn immer gleich so aggressiv wenn hier jemand eine Frage stellt? Ist doch völlig egal was dieses Makro am Ende machen soll....viel wichtiger ist doch warum das Einfügen von 200 Reihen hier 1-2 Minuten dauert.

Also ich habe noch nicht viel mit Tabellen wie du sie beschreibst gearbeitet, aber wenn das Einfügen von 200 Zeilen so lange dauert, dann hast du entweder einen sehr langsamen Computer, oder eine Zeile ist sehr lang, oder was auch immer.

Vielleicht werde ich da mal ein wenig rumprobieren :-)

Edit: Schon fertig :-) Also am Makro liegt es nicht. Bei mir geht das mit einem leeren Table1 innerhalb eines Sekundenbruchteils. Ich denke mal, da sind auch noch ein paar Formeln in deinem Sheet und da du am Anfang auf Application.Calculation = xlCalculationAutomatic stellest, wartet das Makro auf jede einzelne Formel bis sie fertig gerechnet hat. Also wie gesagt....der Fehler liegt irgendwo anders ;-)
 
Zuletzt bearbeitet:
@Janush vielen Dank für deine Antwort und Mühe das Makro einmal selber zu testen!

Das Problem sind die Notebooks an der Arbeit, die leider etwas veraltet sind. Auf meinem eigenem Notebook läuft das Makro auch ein wenig zügiger.

Dennoch arbeite ich erstmal ohne Excel Table und benutze die .Insert Funktion, welche um einiges schneller läuft.
Sollte trotzdem noch jemand eine Idee haben, wie ich mehrere Zeilen, ohne solch eine For-Schleife, wie ich sie in meinem Makro verwendet habe, in einen Excel Table hinzufügen kann, würde ich mich über jede Idee freuen!
 
Ein wenig zügiger? Versuch doch zu Begin des Makros auf
Application.Calculation = xlCalculationManual zu stellen, ob es dann schneller geht.
 
Zurück
Oben