Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1292to1296
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

Lange Laufzeit trotz EnableEvents

Lange Laufzeit trotz EnableEvents
15.01.2013 11:26:52
Florian
Hallo zusammen,
folgendes Problem:
Ich habe eine recht umfangreiche Tabelle (~30 Spalten, >10.000 Zeilen), die mit einem Autofilter versehen ist. Über ein Worksheet_Calculate werden die Tabellenüberschriften formatiert (Zeile 5, damit man auf einen Blick erkennt, wo Filter gesetzt sind). Außerdem können Filter durch Tippen in der Zeile 3 gesetzt werden, funktioniert über dasselbe Makro.
Das Ganze ist viel zu langsam, trotz screenupdating, enableevents und calculation.
Ich kann mir nur noch zwei weitere "Langsammacher" denken:
- In der Tabelle sind fünf Spalten mit bedingten Formatierungen versehen
- In der Arbeitsmappe gibt es ~30 Namensbezüge, die per Bereich.verschieben flexibel sind.
Können das die Bremsen sein? Habt Ihr sonst irgendwelche Tips?
Vielen Dank schonmal,
Florian

Private Sub Worksheet_Calculate()
' Sofortausstieg, wenn nicht Sheet Masterliste_U7 aktiviert
If ActiveSheet.Name  "Masterliste_U7" Then End
On Error GoTo err_exit
status = "stabil"
Dim rngMarkiert As Range
Set rngMarkiert = ActiveSheet.Range(Selection.Address) 'Auslesen der Range, damit später wieder  _
selbe Range markiert werden kann
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i = 1 To 27
If Sheets("Filter").Cells(3, i).Value  Sheets("Masterliste_U7").Cells(3, i).Value Then
status = "instabil"
spalte = i
End If
Next i
If status  "stabil" Then
'Tritt dann auf, wenn Filter in Zeile 3 (grün unterlegt) gesetzt oder gelöscht wurden
'FILTER PER TASTATUR
'Test, Ob Zelle leer oder nicht
If Cells(3, spalte).Value = "" Then
' FILTER WURDE GELÖSCHT
'Zelle ist leer, Filter löschen
ActiveSheet.Range("Opportunities").AutoFilter Field:=spalte
'Farbe zurücksetzen
Cells(3, spalte).Interior.Color = 12379351 'Freitext - Hintergrundfarbe
Cells(5, spalte).Font.Color = 16777215 'Filter - Schrift
Cells(5, spalte).Interior.Color = 11272192 'Filter - Hintergrundfarbe
Else
' FILTER WURDE GESETZT
'Zelle ist gefüllt, Filter setzen
ActiveSheet.Range("Opportunities").AutoFilter Field:=spalte, Criteria1:=Cells(3, spalte) _
, Operator:=xlAnd
'Farbe setzen
Cells(3, spalte).Interior.Color = 5296274 'Freitext - Hintergrundfarbe
Cells(5, spalte).Interior.Color = 255 'Filter - Schrift
Cells(5, spalte).Font.Color = -16711681 'Filter - Hintergrundfarbe
End If
Cells(3, spalte).Select
Else
'Tritt dann auf, wenn Filter in Zeile 5 (blau unterlegt) gesetzt oder gelöscht wurden
'FILTER PER MAUS
Dim filterbeschreibung As String
With Worksheets("Masterliste_U7")
If .AutoFilterMode Then
'Filter Spalte für Spalte durchgehen:
For spalte = 1 To .AutoFilter.Filters.Count
operator_Nr = ""
Kriterium1 = ""
Kriterium2 = ""
filterbeschreibung = ""
With .AutoFilter.Filters(spalte)
If .On Then
'Kriterium1 = .Criteria1
If .Operator Then
operator_Nr = .Operator
End If
End If
End With
'Operator auslesen
Select Case operator_Nr
Case 3, 4, 7, 8, 10, 11: filterbeschreibung = "dynamisch"
Case Else 'Mehrfach und einfach, test auf zweite Kondition
With .AutoFilter.Filters(spalte)
If .On Then Kriterium1 = .Criteria1
End With
With .AutoFilter.Filters(spalte)
If .On Then
If .Operator Then Kriterium2 = .Criteria2
End If
End With
If Kriterium2  "" Then filterbeschreibung = "dynamisch"
If filterbeschreibung = "" Then filterbeschreibung = Kriterium1
End Select
' 1 und         =xland
' 2 oder        =xlor
' 3 Top10       =xlTop10Items
' 4 Worst10     =xlBottom10Items
' 7 Mehrfach    =xlFilterValues
' 8 Farbe       =xlFilterCellColor
'10 Symbol      =xlFilterIcon
'11 Dynamisch   =xlFilterDynamic
If filterbeschreibung  "" Then
' FILTER WURDE GESETZT
If filterbeschreibung  "dynamisch" Then Cells(3, spalte) = filterbeschreibung
'Farbe setzen
Cells(3, spalte).Interior.Color = 5296274 'Freitext - Hintergrundfarbe
Cells(5, spalte).Interior.Color = 255 'Filter - Schrift
Cells(5, spalte).Font.Color = -16711681 'Filter - Hintergrundfarbe
Else
' FILTER WURDE GELÖSCHT
Cells(3, spalte) = ""
'Farbe zurücksetzen
Cells(3, spalte).Interior.Color = 12379351 'Freitext - Hintergrundfarbe
Cells(5, spalte).Font.Color = 16777215 'Filter - Schrift
Cells(5, spalte).Interior.Color = 11272192 'Filter - Hintergrundfarbe
End If
Next spalte
End If
End With
End If
'Zeile3 auslesen und in Filter schreiben
For i = 1 To 27
Sheets("Filter").Cells(3, i).Value = Sheets("Masterliste_U7").Cells(3, i).Value
Next i
ActiveSheet.Range(rngMarkiert.Address).Select
err_exit:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lange Laufzeit trotz EnableEvents
15.01.2013 14:51:48
Florian
Hallo Rudi,
vielen Dank schonmal. Ich habe meine Namensbezüge mal ersetzt, also aus vormals

=BEREICH.VERSCHIEBEN(Masterliste_U7!$B$5;;;ANZAHL2(Masterliste_U7!$A:$A);-1)
wurde

=Masterliste_U7!$B$5:INDEX(Masterliste_U7!$B:$B;ANZAHL2(Masterliste_U7!$A:$A)+4)
- das hat allerdings nichts gebracht. Trotzdem interessant, mal wieder was gelernt.
Gibt es irgendeine Möglichkeit, die Überwachung der bedingten Formatierung zu deaktivieren?
Viele Grüße,
Florian

Anzeige
AW: Lange Laufzeit trotz EnableEvents
15.01.2013 15:21:20
Klaus
Hi,
Gibt es irgendeine Möglichkeit, die Überwachung der bedingten Formatierung zu deaktivieren?
Mir fällt nur eine Fleiß-Lösung ein: Du könntest dir eimal die Mühe machen, alle bedingten Formatierungen zu setzen während der Rekorder läuft. Dann machst du zwei Makros, eins das alle bedingten Formatierungen rausschmeißt und eins das alle neu setzt.
Zwischen die Makros kommt dein bisheriger Code.
Aber ich denk mal das kommt nicht in Frage. Hättest du so wenige bed.Formatierungen, dass o.g. mal eben zu erledigen ist, gäb es ja kein Geschwindigkeitsproblem :-)
Ein anderer Ansatz währ zu überdenken, welche der Formatierungen man wirklich braucht und ob hier nicht schlicht verzicht eine akzeptable Lösung sei.
Grüße,
Klaus M.vdT.
(ich lasse offen, weil ich keine richtig gute Antwort hatte)

Anzeige
AW: Lange Laufzeit trotz EnableEvents
15.01.2013 15:31:07
Daniel
Hi
Bedingte Formatierungen können schon ein Problem sein.
Excel 2007 hat leider das Problem, daß es neue Bedingte Formate einfügt, wenn du Zeilen löschst oder einfügst.
Insofern lohnt es sich schon, da mal drüber zu schauen, da sich mit der Zeit so eine ganze Reihe von unnötigen Bedingten Formaten angesammelt haben könnte
Gruß Daniel

AW: Lange Laufzeit trotz EnableEvents
15.01.2013 16:07:03
Florian
Hallo zusammen,
danke nochmal für die Beiträge. Die Formatierungen werden wöchentlich per Makro gelöscht und neu erstellt (die Liste wird wöchentlich neu erstellt). Unnötige Formateirungen sammeln sich da nicht an.
Daher kenne ich auch die Laufzeit der Erstellung der bedingten Formatierung - in Summe bringt mir das auch nichts.
Trotzde vielen Dank für Eure Ideen!
Und es gibt gar keine Möglichkeit, Excel das Rechnen komplett zu verbieten, also auch bedingte Formatierungen und Bezüge zu deaktivieren?
Florian

Anzeige
AW: Lange Laufzeit trotz EnableEvents
15.01.2013 16:48:24
Daniel
Hi
wird deine Datei den schlanker und schneller, wenn du die Bedingten Formate entfernst?
du solltest erstmal testen, ob das überhaupt die Ursache ist.
da niemand von uns die Datei kennt, sind bisher alles nur Vermutungen, die du mal überprüfen solltest.
hast du auch schon mal die Datei neu aufgesetzt, dh eine neue leere Datei erstellt und nur die Formeln (ohne die Formate) rüberkopiert?
Wenn ja, was war das Ergebnis?
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige