Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1836to1840
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
Zeilen ausblenden via VBA
17.07.2021 11:41:48
Thomas
Liebe Excel-Gemeinde,
muss heute wieder einmal Euer Wissen anzapfen.
Ich habe einen VBA Code, durch den in einem bestimmten Bereich alle Zeilen dann ausgeblendet werden, wenn in den Zellen entweder ein bestimmter Text steht oder die Zellen eine bestimmt Farbe haben.
Das ganze mit dem Ziel nur die Zeilen anzuzeigen, in denen Zellen mit Grau (RGB 217, 217, 217) eingefärb sind.
Wenn der Bereich groß wird, dauer die Ausführung schon mal eine bis ein-einhalb Minuten.
Frage, hat jemand eine Idee wie das schneller gehen könnte?
Hier der VBA Code:

Sub hide_rows_WOT()
Dim xRg As Range
Application.ScreenUpdating = False
For Each xRg In Range("d83:d292") '268'292' 456
If IsError(xRg.Value) Then
xRg.EntireRow.Hidden = True
ElseIf xRg.Value = "" Then
xRg.EntireRow.Hidden = True
ElseIf xRg.Value = 0 Then
xRg.EntireRow.Hidden = True
ElseIf xRg.Value = "Ds [mm]" Then
xRg.EntireRow.Hidden = True
ElseIf xRg.Value = "ks [mm]" Then
xRg.EntireRow.Hidden = True
ElseIf xRg.DisplayFormat.Interior.Color = RGB(226, 239, 218) Then 'grüne Markierung
xRg.EntireRow.Hidden = True
ElseIf xRg.DisplayFormat.Interior.Color = RGB(252, 228, 214) Then 'rote Markierung
xRg.EntireRow.Hidden = True
ElseIf xRg.DisplayFormat.Interior.Color = RGB(255, 230, 153) Then 'goldene Markierung f der LS
xRg.EntireRow.Hidden = True
Else
xRg.EntireRow.Hidden = False
End If
Next xRg
Application.ScreenUpdating = True
End Sub
Tausend Dank im Voraus.
Gruß
Thomas W aus W

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen ausblenden via VBA
17.07.2021 11:50:28
ralf_b
du könntest, anstatt jede Zeile einzeln auszublenden, die Adressen erstmal in einem Bereich sammeln z.b. mit union(Range1, Range 2) und sie zum Schluss gemeinsam ausblenden. Auch das Ausschalten der automatischen Berechnung Application.Calculation = xlCalculationManual könnte einen Geschwindigkeitsvorteil bewirken.
AW: Zeilen ausblenden via VBA
17.07.2021 11:57:18
Thomas
Hallo ralf_B,
tausend Dank.
nun bin ich leider noch nicht der VBA-Experte und ganz froh, dass ich den aktuellen Stand nach langem Versuchen geschafft habe.
Dein erster Vorschlag gefällt mir.
Kannst Du mir etwas auf die Spünge Helfen, wie man dei Adressen in einem Bereich sammelt und anschließend ausblendet?
Oder wo kann ich nach schauen?
Danke und Gruß
Anzeige
AW: Zeilen ausblenden via VBA
17.07.2021 12:18:51
Daniel
Hi
Statt die Zeile sofort auszublenden (xRg.EntireRow.Hidden = True ) schreibst du die Zelle zunächst in eine weitere Variable von Typ Range und erweiterst diese dabei immer um die neu hinzugefügte Zelle:

if BereichRg is nothing then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End if
Am Schluss dann nach der Schleife blendest du diesen Bereich aus:

if not BereichRg is nothing then BereichRg.EntireRow.hidden = true
Gruß Daniel
AW: Zeilen ausblenden via VBA
17.07.2021 12:41:55
Thomas
Hallo Daniel
zunächst Tausend Dank.
Ich versteh das Ziel, aber leider noch nicht wo ich das bei mir einbauen soll?
Irgendwei erhalte ich immer Fehlermeldungen, weil ich das Ding mit der Schleife noch nicht gerafft habe.
Gruß
Thomas
Anzeige
AW: Zeilen ausblenden via VBA
17.07.2021 12:59:31
Daniel
Was hast du mit der Schleife nicht gerafft?
Wie sieht dein Code aus?
Welche Fehlermeldung erhälst du, in welcher Programmzeile tritt sie auf?
Was ist daran so schwer, die Programmzeile "xRg.EntireRow.Hidden = True" in deinem Code durch den von mir gezeigten IF-Block auszutauschen?
Und die zweite gezeigte Programmzeile nach der Schleife (also nach dem Next) hinzuzufügen sollte auch nicht so schwer sein.
Gruß Daniel
AW: Zeilen ausblenden via VBA
17.07.2021 13:10:05
Oberschlumpf

Was hast du mit der Schleife nicht gerafft?
Wie sieht dein Code aus?
Welche Fehlermeldung erhälst du, in welcher Programmzeile tritt sie auf?

Reiß dich mal zusammen, Daniel. Vor allem, was die 1., zitierte Zeile betrifft.
Als DU mit Programmierung angefangen hast, wusstest DU soooo schnell, wie du es von Thomas erwartest, wann wo warum welcher Code hingehört?
Also komma wieda runta!
Anzeige
AW: Zeilen ausblenden via VBA
17.07.2021 13:14:32
Thomas
Jungs,....
Alles gut, keinen Stress!
Ich nehme hier niemanden etwas krumm.
Ihr meint es alle gut und helft mir sehr.
Werde das gleich mal ausprobieren und melde mich wieder.
Danke und Gruß.
Thomas W aus W.
P.S. schwerer als der Versuch zu programmieren ist es manchmal meine Frau zu verstehen:)
AW: Zeilen ausblenden via VBA
17.07.2021 13:48:32
Thomas
Sorry mein Fehler!
BereichRg nicht dimensioniert
Ergänzung:
"Dim BereichRg As Range"
funktioniert und ist wesentlich schneller.
Danke und Gruß Ihr seid die Besten.
Gruß Thomas der manchmal auf dem Schlauch steht:)
AW: Zeilen ausblenden via VBA
17.07.2021 15:51:36
Daniel
Woran störst du dich?
Am "gerafft"?
Die Formulierung ist von Thomas selbst und da ich mich direkt auf seine Aussage beziehe, habe ich auch seine Formulierung übernommen. Von daher sehe ich kein Problem darin
Ansonsten halte ich es eigentlich für eine Selbstverständlichkeit, dass man einem Helfer nicht nur die Brocken mit einen " da mach mal" hinwirft, sondern schon so viele Informationen wie möglich weitergibt. Dass man bei einer Fehlermeldung einem Helfer auch den Text der Meldung und die markierte Zeile weitergibt weil das wichtige Informationen zur Ursachenfindung sein können sollte eigentlich logisch sein und keine extra Nachfrage erfordern.
Die Anweisung "ersetze Text A durch Text B" sollte jeder umsetzten können, der Lesen und Schreiben kann. Da braucht man keine Programmiererfahrung für.
Und ganz so am Anfang kann Thomas nicht stehen, denn sonst hätte er den zu Beginn gezeigten Code nicht schreiben können.
Und Sachen, die der Fragesteller offensichtlich schon kann, muss ich ja nicht nochmal erklären.
Gruß Daniel
Anzeige
AW: Zeilen ausblenden via VBA
17.07.2021 15:56:55
Oberschlumpf
ja, ich störte mich an deinem "gerafft" - für mich war das arrogant (du hast ne andere Interpretation, ich weiß)
wieso nicht zu Beginn der "Karriere" einen Code schreiben, wie anfangs gezeigt? - nach lesen von 100 Internetseiten, immer + immer wieder zum Thema For/Next/Range kann so etwas durchaus rauskommen - auch wenn der, der per Copy/Paste das "zusammenbastelt", nicht unbedingt versteht, was funktioniert...
na ja...egal...du hast recht....
AW: Zeilen ausblenden via VBA
17.07.2021 18:22:40
Daniel
Danke, dass du dich meiner Argumentation anschließt.
AW: Zeilen ausblenden via VBA
18.07.2021 02:38:39
Oberschlumpf
(du recht)..ich meine Ruhe - ich war schneller auf prüfen/absenden als mit Schreiben zu ende
Anzeige
AW: Zeilen ausblenden via VBA
18.07.2021 20:51:42
Daniel
Nur so als Tipp von mir, wenn du deine Ruhe willst, dann denke schon einen Beitrag früher drüber nach, ob du diesen auch wirklich abschicken willst.
Gruß Daniel
AW: Zeilen ausblenden via VBA
17.07.2021 13:41:51
Thomas
Der Code sieht jetzt so aus.
Fehler tauch bei der Pfeilmarkierung auf.
?

Sub hide_rows_WOT()
Dim xRg As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each xRg In Range("d83:d292") '268'292' 456
If IsError(xRg.Value) Then
xRg.EntireRow.Hidden = True
ElseIf xRg.Value = "" Then
-->           If BereichRg Is Nothing Then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End If
ElseIf xRg.Value = 0 Then
If BereichRg Is Nothing Then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End If
ElseIf xRg.Value = "Ds [mm]" Then
If BereichRg Is Nothing Then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End If
ElseIf xRg.Value = "ks [mm]" Then
If BereichRg Is Nothing Then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End If
ElseIf xRg.DisplayFormat.Interior.Color = RGB(226, 239, 218) Then 'grüne Markierung
If BereichRg Is Nothing Then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End If
ElseIf xRg.DisplayFormat.Interior.Color = RGB(252, 228, 214) Then 'rote Markierung
If BereichRg Is Nothing Then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End If
ElseIf xRg.DisplayFormat.Interior.Color = RGB(255, 230, 153) Then 'goldene Markierung f der LS
If BereichRg Is Nothing Then
Set BereichRg = xRg
Else
Set BereichRg = Union(BereichRg, xRg)
End If
Else
xRg.EntireRow.Hidden = False
End If
Next xRg
If Not BereichRg Is Nothing Then BereichRg.EntireRow.Hidden = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Zeilen ausblenden via VBA
17.07.2021 16:03:59
Daniel
Ja passt doch.
So wars gemeint.
Die fehlende Variablendeklaration hast du ja selbst gefunden.
Hast du das erste IF iserror bei der Überarbeitung über sehen?
Da steht noch der alte Code drin.
Damit der Code etwas kürzer wird, könntest du ähnlich Abfragen zusammenfassen:

ElseIf xRg.Value = 0 OR xRg.Value = "" OR xRg.Value =  "Ds [mm]" OR xRg.Value = "ks [mm]" Then  
Das reduziert die Anzahl der Blöcke.
Die Abfrage If IsError sollte du aber so wie sie ist alleine am Anfang stehen lassen, um Abbrüche zu Vermeiden falls in den Zellen ein Fehlerwert steht.
Gruß Daniel
Anzeige
AW: Zeilen ausblenden via VBA
17.07.2021 16:41:16
Thomas
Tausend Dank.
Freut mich auch, dass Ihr Euch mit didaktische und pädagogische Fragen aus einandersetzt.
Mach das Formum gleich noch besser! :)
Gruß
Thomas W aus W

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige