Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
688to692
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
688to692
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehlerbehebung in Schleife

Fehlerbehebung in Schleife
31.10.2005 11:23:19
Lian
Hallo Forum,
ich lasse mir die Datensätze iner Tabelle übersichtlich anzeigen, indem ich sie nach bestimmten Kriterien selektiere.
So habe ich eine Funktion um alle Datensätze anzuzeigen, die in Spalte C keinen Eintrag aufweisen. Das funktioniert super, doch leider nur beim 1. Mal. Beim 2. Mal werden wieder alle Einträge angezeigt und beim 3. Mal wieder die gewünschten Datensätze (synonym zum 1. Mal).
Ich weis nicht, ob ich mich nur so dumm anstelle aber es gelingt mir einfach nicht, die Rows.Hidden=False anders einzubinden, so dass das Script adeuerhaft seiner Funktion gerecht wird und zudem auch ohne Fehler abläuft.
Für eine Hilfe wäre ich sehr dankbar.

Sub ZeigeLeere()
Const SuchSpalte = 3 ''für Spalte C
Dim lz As Long, i As Long
lz = Cells(Rows.Count, SuchSpalte).End(xlUp).Row
Rows.Hidden = False
For i = 7 To lz ''ab Zeile 7
Rows(i).Hidden = Cells(i, SuchSpalte) <> ""
Next i
End Sub

Am Rande noch eine andere Frage. Ist dem wirklich so, dass die von mir benutzte "For i" Schleife länger benötigt als eine "For Each"-Schleife?

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

Betreff
Datum
Anwender
Anzeige
AW: Fehlerbehebung in Schleife
31.10.2005 11:36:19
IngGi
Hallo Lian,
zur Ermittlung des letzten Datensatzes in lz musst du eine andere Spalte verwenden. Wenn du dir alle Datensätze mit leerer Spalte C anzeigen lässt, ist lz beim nächsten Makrodurchlauf = 1 (die Spalte ist ja komplett leer - es zählen nur die angezeigten Datensätze!). Dadurch werden mit Rows.Hidden = False alle Datensätze wieder eingeblendet, die anschließende For...Next-Schleife wird aber nicht durchlaufen, denn lz=1 und somit kleiner 7.
Gruß Ingolf
AW: Fehlerbehebung in Schleife
31.10.2005 13:17:03
Lian
Hallo IngGi,
danke für deine Mühe & den vermurlichen Lösungsansatz.
Zur Ermittlung des letzten Datensatzes soll ich also eine andere Spalte verwenden.
Jetzt steh ich wirklich etwas auf dem Schlauch.
Dann müsst ich dem zur Folge die Scriptzeile lz=... mit einer Abfrage versehen?
Ist mir jetzt ganz schön unangenehm, dass ich mich so anstelle.
Aber ich denke, dass ich mein aktuelles Wissenslevel mit "VBA kaum" recht gut getroffen habe. :-/
Anzeige
AW: Fehlerbehebung in Schleife
31.10.2005 13:37:34
schauan
Hallo Lian,
Du brauchst nur Dein einblenden etwas höher schieben:

Sub ZeigeLeere()
Const SuchSpalte = 1 ''für Spalte C
Dim lz As Long, i As Long
Rows.Hidden = False
lz = Cells(Rows.Count, SuchSpalte).End(xlUp).Row
For i = 7 To Cells(Rows.Count, SuchSpalte).End(xlUp).Row ''ab Zeile 7
Rows(i).Hidden = Cells(i, SuchSpalte) <> ""
Next i
End Sub

Zur anderen Frage: Das soll so sein. Test:

Sub tst5()
Cells(1, 3) = Time
For Each zellen In Range("A1:IV60000") 'ca 7s auf celeron2400
Next
Cells(2, 3) = Time
ende = 60000 * 256
Cells(3, 3) = Time
For i = 1 To ende 'ca 1s auf celeron2400
Next
Cells(4, 3) = Time
End Sub

Anzeige
AW: Fehlerbehebung in Schleife
31.10.2005 15:12:53
Lian
Hey, das war ja einfach und funktioniert auch super!
Danke!
Nun hab ich auch noch versucht die schnellere ForEach Variante daraus zu machen aber da hab ich nun gleich wieder einen großen Fehler gemacht, der das Script einfach nicht laufen lässt. Ich poste den Quelltext einfach mal in der Hoffnung, dass mir jmd. den Fehler aufzeigt. Falls man das Ganze noch weiter optimieren kann, bin freue ich mich auch über weitere Vorschläge.
Vielen Dank für eure Mühe!

Sub ZeigeLeere()
Const SuchSpalte = 3 ''für Spalte C
Dim lz As Long, Zelle As Range
Rows.Hidden = False
lz = Cells(Rows.Count, SuchSpalte).End(xlUp).Row
For Each Zelle In Range(Cells(7, SuchSpalte), Cells(7, lz))
Rows(i).Hidden = Cells(i, SuchSpalte) <> ""
Next Zelle
'Application.ScreenUpdating = True
End Sub

Anzeige
AW: Fehlerbehebung in Schleife
31.10.2005 15:53:05
Fred
For Each Zelle In Range(Cells(7, SuchSpalte), Cells(lz, suchspalte))
mfg Fred
AW: Fehlerbehebung in Schleife
31.10.2005 16:29:40
Lian
Danke für die Fehlersuche & den Vorschlag - jetzt klappts wunderbar!
Wobei die For each Schleife auch nicht schneller als die for i- Schleife arbeitet aber sie ist auch nicht langsamer, weshalb ich sie dann beibehalte!
Danke nochmal an alle fleißigen Helfer!
AW: Fehlerbehebung in Schleife
31.10.2005 18:08:08
schauan
Hallo Lian,
Du hast das Beispiel nicht richtig gelesen.
For Each braucht 7s, For i nur eine. Der Satz Das soll so sein bezog sich auf den test und nicht auf die Frage.
Grüße,Andre
AW: Fehlerbehebung in Schleife
31.10.2005 11:38:03
Susanne
Hallo Lian,
warum arbeitest du an der Stelle nicht mit dem Autofilter?
Gruß
Susanne
Anzeige
AW: Fehlerbehebung in Schleife
31.10.2005 13:16:43
Lian
Hallo Susanne,
ein Autofilter ist in diesem Falle recht unpraktisch, weshalb ich mich auch gleich anfangs für eine VBA-Variante entschied. Dennoch Danke für den Ansatz!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige