Live-Forum - Die aktuellen Beiträge
Datum
Titel
15.04.2024 16:30:01
15.04.2024 13:59:59
15.04.2024 13:54:18
Anzeige
Archiv - Navigation
1444to1448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenmenge für Makro zu groß

Datenmenge für Makro zu groß
27.08.2015 09:50:03
Timo
Hallo zusammen,
ich verwende folgendes Makro, um an mehreren Stellen im Tabellenblatt neue Werte gleichzeitig einzufügen. Neben einer zu ändernden Bezeichnung in Spalte C (die auch auf einem Verweis aus einem anderen Blatt beruht) habe ich in allen folgenden Spalten Formeln hinterlegt. Daher ist es für mich die praktikabelste Lösung, die Zellen einfach zu kopieren und dann eben den Bezug in Spalte C jeweils zu ändern, um die korrekte Bezeichnung zu erhalten.
Leider funktioniert das Makro nur bei einer kleinen Datenmenge.
Hat vielleicht jemand eine Idee, was ich ändern könnte damit es schneller läuft?
Sub Werteeinfügen()
Dim strInput As String
Dim lngRow As Long
strInput = InputBox("Bitte Einfügeort eingeben")
If StrPtr(strInput)  0 Then
For lngRow = Cells(Rows.Count, 3).End(xlUp).Row To 1 Step -1
If Cells(lngRow, 3).Text = strInput Then _
Call Rows(lngRow).Resize(1).Copy
Call Rows(lngRow).Resize(1).Insert(Shift:=xlShiftDown)
Application.CutCopyMode = False
Next lngRow
End If
End Sub

Danke und Gruß Timo

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenmenge für Makro zu groß
27.08.2015 11:33:16
Daniel
Hi
das Hauptproblem dürfte sein, dass jedes Einfügen eine neuberechnung der Formeln auslöst.
es sollte schneller gehen, wenn du die automatische neuberechnung für das Einfügen abschaltest.
Auch reicht es aus, wenn erst am Schluss das vollständige Ergebnis angezeigt wird, dh solange das Makro läuft, muss der Bildschirm nicht ständig aktualisiert werden.
Sub Werteeinfügen()
Dim strInput As String
Dim lngRow As Long
strInput = InputBox("Bitte Einfügeort eingeben")
If StrPtr(strInput)  0 Then
Application.ScreenUpdating = false
Application.Calculation = xlCalulationManual
For lngRow = Cells(Rows.Count, 3).End(xlUp).Row To 1 Step -1
If Cells(lngRow, 3).Text = strInput Then _
Call Rows(lngRow).Resize(1).Copy
Call Rows(lngRow).Resize(1).Insert(Shift:=xlShiftDown)
Application.CutCopyMode = False
Next lngRow
Application.Calculation = xlcalculationautomatic
Application.ScreenUpdating = True
End If
End Sub
Gruß Daniel

Anzeige
AW: Datenmenge für Makro zu groß
27.08.2015 13:05:03
Timo
Hi Daniel,
vielen Dank für deine Antwort. Leider hat sich das Programm erneut aufgehängt..
Es kam dann die Meldung "Intersect für das Objekt-Global ist fehlgeschlagen".
Danke und Gruß,
Timo

AW: Datenmenge für Makro zu groß
27.08.2015 13:20:44
Daniel
Hi
das ist insbesondere deswegen erstaunlich, weil "intersect" im Code ja gar nicht vorkomm!
Gruß Daniel

AW: Datenmenge für Makro zu groß
27.08.2015 14:15:02
Timo
Hallo Daniel,
ja, ich vermute das kommt von diesem Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
If Not Intersect(Range("I1:EG800"), Target) Is Nothing Then
For Each Zelle In Intersect(Range("I1:EG800"), Target)
With Zelle
If .Value = "----" Then .Font.Size = 16
If .Value = "---" Then .Font.Size = 16
If .Value = "===" Then .Font.Size = 12
If .Value = "xxxx" Then .Font.Size = 11
End With
Next Zelle
End If
End Sub

Könnte das Problem auftreten, wenn Zellen verändert werden sollen, die einen der im Code defnierten Werte enthalten?
Danke und Gruß,
Timo

Anzeige
AW: Datenmenge für Makro zu groß
27.08.2015 14:30:15
Daniel
hi
kann viel passieren.
muss dieses Makro ausgeführt werden, wenn dein andere Code läuft?
wenn nein, schau dir mal den Befehl: Application.EnableEvents an.
damit kann man die Ausführung der Eventmakros verhindern, wenn sie nicht erforderlich sind und den Programmablauf zusätzlich beschleunigen.
Gruß Daniel

AW: Datenmenge für Makro zu groß
27.08.2015 16:27:50
Timo
Hallo Daniel,
danke für deinen Vorschlag. Es muss nicht ausgeführt und habe das auch so ausprobiert. Das Worksheet_Change Ereignis lief dann nicht, jedoch hatte es leider keine Auswirkungen auf das andere Makro.
Weißt du evtl. noch von weiteren „typischen“ Fehlerquellen in großen Excel-Dateien? Liegt ja dann vermutlich nicht an der VBA-Programmierung.
Danke und Gruß
Timo

Anzeige
AW: Datenmenge für Makro zu groß
27.08.2015 16:47:16
Daniel
Hi
grosse Exceltabellen sollte man nicht in Schleifen über einzelne Excelzellen bearbeiten.
insbesondere dann nicht, wenns ums einfügen oder Löschen von Zeilen geht.
hier sollte man immer dafür sorgen, dass man dann die Zeilen möglichst in einem Schritt als lückenlosen Block bearbeit.
hierbei kann man ausnutzen, dass Excel im Sortieren auch bei grossen Datenmengen sehr schnell ist.
in deinem Fall würde ich das so lösen, wenn ich von bestimmte Zeilen kopieren unterhalb der Ausgangszeile anlegen will:
1. in der Ausgangstabelle in einer Hilfsspalte die Originalreihenfolge sichern, indem ich dort die Zeilennummer oder eine aufsteigende Zahl eintrage (wie das geht, brauche ich einem Excelprofi nicht zu erklären)
2. dann sortiere ich die Liste nach Spalte C, so dass alle Zeilen, die ich suche, einen lückenlosen Block bilden.
3. dann suche ich die erste und letze Zeile in Spalte C mit dem entsprechenden Suchbegriff (kann man in .Find über den Parameter: Searchdirection:=xlNext/xlPrevious steueren
4. dann kopiere ich alle zeilen zwischen dem ersten und dem letzen Auftreten des Suchbegriffs (Tabelle ist ja entsprechend sortiern und füge sie nach der letzen Zeile wieder ein.
5. dann sortiere ich die ganze Tabelle nach der Hilfsspalte mit den gesicherten Zeilennummern.
damit werden die Zeilen wieder in die originalreihenfolge gebracht und die neu hinzugefügten Zeilen werden unter ihre "originale" sortiert, weil sie die gleiche Sortiernummer haben.
das verfachen sollte auch mit grössten Datenmengen schnell und zuverlässig funktioniern.
man kann das auch in VBA dann relativ einfach mit hilfe des Recorder umsetzen.
Gruß Daniel

Anzeige
AW: Datenmenge für Makro zu groß
28.08.2015 10:11:55
Timo
Hallo Daniel,
vielen Dank. Das funktioniert gut.
Mit dem Makro-Recorder komm ich allerdings nicht ganz so weit. Ich müsste ja den Zellbereich bzw. die Werte, die ich kopieren möchte irgendwie durch eine Inputbox übergeben? Das ist auch insbesondere deshalb wichtig, weil das Einfügen neuer Zeilen durch eine einzige neue Zeile in einer Mastersicht auf einem anderen Tabellenblatt ausgelöst wird. Der Wert einer solchen Zelle kommt dann im neuen Blatt mehrmals vor und daher wär die Suche mit einer Inputbox ideal.
Danke und Gruß Timo

AW: Rückfragen
28.08.2015 09:34:54
Gerd
Hallo Timo!
Wieviele Datenzeile sind es maximal?
Wieviele Spalten sind es(einschl. der Formeln), Spalte A bis Spalte ..?
Gruß Gerd
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige