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

Ein-/Ausblenden zu langsam

Ein-/Ausblenden zu langsam
17.08.2023 11:20:27
Wolfgang
Hallo Zusammen,
ich habe leider nur sehr eingeschränkte VBA-Kenntnisse, aber ich habe mir einen Code zusammengebastelt, der das tut, was ich möchte, nämlich Zeilen im Bereich von Zeile 2 bis 1024 ausblenden, wenn in Spalte R durch ein Formelergebnis eine 0 erscheint. Wird die 0 durch ein anderes Formelergebnis (immer "1") ersetzt, werden die ausgeblendeten Zeilen automatisch wieder eingeblendet. Soweit so gut.

Mein Problem mit meinem Code ist, dass der Prozess ewig dauert. Für das durchsuchen dieser 1023 Zeilen und das Ein-, bzw. Ausblenden braucht Excel gute 2 Minuten und eigentlich möchte ich die Funktion in insgesamt 6 Tabellenblättern nutzen. Gibt es eine Möglichkeit den Prozess zu beschleunigen? Hier ist der Code:

Private Sub Worksheet_Calculate()
Dim Y As Long
Application.ScreenUpdating = False 'Bildschirmaktualisierung aus
Application.EnableEvents = False 'Ereignismakros deaktivieren
For Y = 2 To 1024
Rows(Y).EntireRow.Hidden = Cells(Y, 18).Value = "0"
Next
Application.EnableEvents = True 'Ereignismakros aktivieren
Application.ScreenUpdating = True 'Bildschirmaktualisierung wieder an
End Sub

Vielen Dank und viele Grüße
Wolfgang

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ein-/Ausblenden zu langsam
17.08.2023 11:29:33
daniel
Hi
das einfachste wäre, dass du in dem Blatt von Hand den Autofilter einrichtest und hier nach >0 oder =1 filterst
solange niemand den Autofilter löscht, reicht es aus, im Calculate-Event den Befehl

ActiveSheet.AutoFilter.ApplyFilter

auszuführen
Ein-/Ausblenden zu langsam
17.08.2023 13:36:02
Wolfgang
Hallo Daniel,
das habe ich versucht, irgendwie scheitere ich daran. Ich muss zugeben, noch nie einem Filter mit VBA kombiniert zu haben, da muss ich mich wohl erst etwas hinarbeiten. Meine aktuellen Versuche enden in einem Runtime-Error

Viele Grüße
Wolfgang
Ein-/Ausblenden zu langsam
17.08.2023 13:50:56
Ulf
Hi Wolfgang,
ich denke dass führt zur Dauerberechnung
Mein Vorschlag:


Public bInProgress As Boolean

Private Sub Worksheet_Calculate()
Dim Y As Long
Dim intCalc As Integer
If bInProgress Then
Exit Sub
End If
Application.ScreenUpdating = False 'Bildschirmaktualisierung aus
Application.EnableEvents = False 'Ereignismakros deaktivieren
intCalc = Application.Calculation
Application.Calculation = xlCalculationManual
For Y = 2 To 1024
Rows(Y).EntireRow.Hidden = Cells(Y, 18).Value = "0"
DoEvents: DoEvents
Next
bInProgress = False
Application.Calculation = intCalc
Application.EnableEvents = True 'Ereignismakros aktivieren
Application.ScreenUpdating = True 'Bildschirmaktualisierung wieder an
End Sub


hth
Ulf
Anzeige
Ein-/Ausblenden zu langsam
17.08.2023 14:54:41
Wolfgang
Hallo Ulf,

vielen Dank für Deine Unterstützung. Ich habe den Code in meine Datei übertrage, allerdings ohne, dass ein sichtbares Ergebnis produziert werden würde. Alle Zeilen mit einer 0 in Spalte R bleiben sichtbar. Hast Du eine Idee, woran das liegen könnte?

Viele Grüße
Wolfgang
Ein-/Ausblenden zu langsam
17.08.2023 17:59:26
Ulf
Da du
Rows(Y).EntireRow.Hidden = Cells(Y, 18).Value = "0"
verwendet hast ging ich davon aus, dass dort Texte zu finden sind, wenn Zahlen dann:



Public bInProgress As Boolean

Private Sub Worksheet_Calculate()
Dim Y As Long
Dim intCalc As Integer
If bInProgress Then
Exit Sub
End If
Application.ScreenUpdating = False 'Bildschirmaktualisierung aus
Application.EnableEvents = False 'Ereignismakros deaktivieren
intCalc = Application.Calculation
Application.Calculation = xlCalculationManual
For Y = 2 To 1024
Rows(Y).EntireRow.Hidden = Cells(Y, 18).Value = 0
DoEvents: DoEvents
Next
bInProgress = False
Application.Calculation = intCalc
Application.EnableEvents = True 'Ereignismakros aktivieren
Application.ScreenUpdating = True 'Bildschirmaktualisierung wieder an
End Sub

so funktioniert dass bei mir mit den 1024 mit Zufallsergebnis 1 oder 0 ansprechend schnell.
Autofilter ist aber imho besser und auch nur 1Klick
hth
Ulf
Anzeige
Ein-/Ausblenden zu langsam
17.08.2023 13:52:52
daniel
du sollst den Autofilter ja auch von Hand manuell auf dem jeweilgen Blatt einrichten.
im Change-Event führst du dann nur noch aus
Application.EnableEvents = false

ActiveSheet.AutoFilter.ApplyFilter
application.EnableEvents = true

was dem Menübefehl - Erneut Anwenden entspricht.
mehr musst du nicht tun.
ich verstehe nicht, was daran kompliziert ist.
Gruß Daniel
Ein-/Ausblenden zu langsam
17.08.2023 14:48:42
Wolfgang
Hallo Daniel,

hiermit versuche ich den Filter aufzurufen:

Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
ActiveSheet.AutoFilter.ApplyFilter
Application.EnableEvents = True
End Sub

Der Runtime-Error war ein Tippfehler, dennoch bewirkt der Code keinerlei Veränderung hinsichtlich der aus- oder eingeblendeten Zellen. Den Filter habe ich per Hand auf 1 einblenden, 0 ausblenden gesetzt. Nach meinem Verständnis bewirkt der Code den gleichen Effekt, wie ich, wenn ich nach einer Änderungen der Zellwerte auf den Filter gehe und "ok" drücke, um die Ansicht zu aktualisieren. Ist aber wohl nicht so...

Viele Grüße
Wolfgang

Anzeige
Ein-/Ausblenden zu langsam
17.08.2023 16:29:50
daniel
du hast hier das Change-Event verwendet.
das spricht an, wenn du auf diesem Blatt einen Wert von Hand änderst.
es spricht nicht an, wenn wenn sich ein Formelberechnungsergebnis ändert und die Ursache für diese Neuberechnung in einem anderen Tabellenblatt liegt.
Könnte es daran liegen, dass es nicht funktionert?
AW: Ein-/Ausblenden zu langsam
17.08.2023 11:31:51
onur
Range("R2:R1024").EntireRow.Hidden= ......

Also nicht in Schleife, sondern AM STÜCK aus- und einblenden.
Ein-/Ausblenden zu langsam
17.08.2023 13:37:53
Wolfgang
Hallo Onur,
im Ergebnis macht es keinen Unterschied, ob ich das über die Schleife löse, oder über eine Range. Gefühlt ist die Schleife sogar etwas schneller.

Viele Grüße
Wolfgang
Anzeige
Ein-/Ausblenden zu langsam
17.08.2023 11:44:16
Der Steuerfuzzi
Hallo,

bei nur 1023 Zeilen kann das eigentlich nicht so lange dauern. Kann es sein, dass es in der Arbeitsmappe viele Berechnungen gibt, die sehr lange dauern?

Grüße
Michael
Ein-/Ausblenden zu langsam
17.08.2023 13:40:19
Wolfgang
Hallo Michael,

die Datei ist nicht so umfangreich und sehr viele Berechnungen werden auch nicht durchgeführt. Ich habe in einem anderen Tabellenblatt eine sehr ähnliche Formel zum Ausblenden leerer Zeilen, die kann aber die Ausführung in einem anderen Tabellenblatt eigentlich nicht beeinflussen, oder?

Viele Grüße
Wolfgang
Ein-/Ausblenden zu langsam
17.08.2023 13:55:16
Der Steuerfuzzi
Hm, ok. Du verwendest Worksheet_calculate. Bei jeder Berechnung wird der Code von Neuem gestartet. Wenn Du dann noch volatile Funktionen verwendest https://www.tabellenexperte.de/excel-im-schneckentempo-volatile-funktionen/ dann wird bei jeder Eingabe, egal wo auf dem Tabellenblatt) die Berechnung ausgelöst.

Allerdings dürfte das Ausblenden in einem Bereich von 1023 Zeilen nur wenige Sekunden dauern ... und nicht 2 Minuten. Ich habe das mal versucht nachzustellen und komme bei ca. 1200 Zeilen und ca. der Hälfte mit "0" auf maximal 3 Sekunden. Eine Dauerberechnung konnte ich (sogar trotz volatilen Funktionen in der Tabelle) nicht feststellen.

Irgendetwas scheint bei Dir wohl doch zur Verzögerung zu führen.

Es wäre hilfreich, wenn du hier eine Beispielmappe hochladen könntest, anhand der wir das mal nachvollziehen können.



Anzeige
Ein-/Ausblenden zu langsam
17.08.2023 11:45:46
daniel
Wenn Autofilter keine Option ist, kannst du das ganze so beschleunigen:
1. sorge dafür, dass die Formel zwei unterschiedliche Datentypen ausgibt, also beispielsweise die Zahl 1 für Zeilen, die angezeigt werden sollen und den Text "x" für Zeilen, die ausgeblendet werden sollen (beachte, dass das Formlelergebnis "1" auch ein Text ist)
2. dann reicht dieser Code, der deutlich schneller sein sollte:
With Range("R2:R1024")

.entirerow.hidden = false
.SpecialCells(xlcelltypeformulas, 2).EntireRow.Hidden = true
end with

im SpecialCells steht die 1 für alle Zellen mit Zahlen und die 2 für alle Zellen mit Text

Gruß Daniel
Anzeige
Ein-/Ausblenden zu langsam
17.08.2023 14:06:20
Wolfgang
Hallo Zusammen,
ich glaube, ich beginne zu verstehen, wo mein Problem liegt. Ich habe ein weiteres Tabellenblatt, in dem per VBA Code Zeilen ausgeblendet werden wenn in den besagten 6 Tabellenblättern eine Zelle den Wert 0 annimmt. Dieser Code prüft arbeitsblattübergreifend und genau in den Arbeitsblättern, in denen ich Zeilen ein- und ausblenden lassen möchte. Diese erste Formel finden die 0 und "nicht-0" zwar in einer anderen Spalte, aber ich vermute dennoch, dass die lange Zeitspanne zum Ein- und Ausblenden der Zeilen auf die Wechselwirkung dieser beiden Formeln zurückzuführen ist. Ich denke, das Ergebnis zur Lösung des Problems rechtfertigt nicht den Aufwand und ich löse das Problem wie in der Steinzeit, indem ich einfach händisch einen Filter setze.

Vielen Dank für Eure Unterstützung.

Viele Grüße
Wolfgang
Anzeige
Ein-/Ausblenden zu langsam
17.08.2023 17:34:51
daniel
"d ich löse das Problem wie in der Steinzeit, indem ich einfach händisch einen Filter setze."

das ist genau das, was dir in der ersten Antwort im ersten Satz vorgeschlagen wurde.
Ein-/Ausblenden zu langsam
17.08.2023 13:56:39
Wolfgang
Den Code bekomme ich gar nicht umgesetzt, aber ich glaube ich beginne zu verstehen..
Ein-/Ausblenden zu langsam
17.08.2023 14:01:54
daniel
das Specialcells entspricht dem Start - Suchen und Auswählen - Inhalte auswählen
dh du blendest erst alles ein und wählst dann in der Spalte die Zellen aus, die den Text enthalten und blendest diese aus.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige