Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
816to820
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
816to820
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Problem mit Schleife

Problem mit Schleife
10.11.2006 09:57:41
werner
hallo Excellenzen,
ich brauche eure Hilfe. Zuerst einmal muß ich "VBA gut" relativieren - bin über VBA nur mit Makrorecorder zwar deutlich hinaus, aber z.B. mein Verständnis für Schleifen ist doch noch sehr ausbaufähig.
Ich möchte in meiner Tabelle in jeder zweiten Spalte nach Leerzellen suchen, und den Inhalt der Zelle links davon löschen (steht zwar nicht immer was drin, aber macht ja nichts, glaube ich?).
Der Code bringt aber immer eine Fehlermeldung ("next ohne For"):

Sub test11()
Dim zelle As Range
Dim i As Integer
Dim lngz As Long
Dim s As Long
For i = 3 To lngz
For s = 2 To 14 Step 2
lngz = Cells(Rows.Count, 1).End(xlUp).Row
For Each zelle In Range(Cells(3, s), Cells(lngz, 14))
If zelle(Cells(i, s)).Value = "" Then
Range(Cells(i, s - 1)).ClearContents
Next s
Next i
Next zelle
End Sub

Inzwischen dröhnt mir der Kopf mehr von meinen vergeblichen Versuchen als von meiner Grippe - wäre für Hilfe (und ggf. etwas Nachhilfe) sehr dankbar.
Danke im voraus und Grüße aus München
Werner

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Schleife
10.11.2006 10:24:44
eres
Hallo Werner,
zunächst fällt auf, das »End If« fehlt.
War's das ?
Gruss
erwin
AW: Problem mit Schleife
10.11.2006 10:29:45
werner
hallo Erwin,
leider nicht - dann wird next s markiert und "ungültiger Verweis auf Next-Steuervariable" angezeigt.
Grüße
Werner
AW: Problem mit Schleife
10.11.2006 10:34:59
eres
Werner,
die Reihenfolge stimmt nicht:
Die Schleife For Each Zelle
muss mit Next Zelle beendet werden, bevor Next S kommmt.
Gruss
erwin
AW: Problem mit Schleife
10.11.2006 10:42:25
werner
Hallo Erwin,
hatte ich glaube schon versucht - nur läuft das Makro dann ab, ohne dass irgendwas passiert.
Gruß
Werner
AW: Problem mit Schleife
10.11.2006 10:59:19
eres
Werner,
lass das Makro mal im Debug-Mode laufen und schau Dir an, welche Schritte ausgeführt werden. Dann solltest Du sofort sehen, wieso nix passiert.
(Tipp: Schau Dir mal an, wann Du die Varialbe lngz initialisierst).
Gruss
erwin
Anzeige
AW: Problem mit Schleife
10.11.2006 11:22:29
ingUR
Hallo, Werner,
unschön ist, dass Du den Schleigenparameter lngz innerhalb der Schelife neu berechnen läßt, was aber nicht der Grund für die Fehlermeldung ist.
Weiter sprichts Du bereits mit der "Zählvariablen" zelle bereits das Objekt der Zelle an, die Du auf das Vorhandensein eines Testes prüfen möchtest.
Sodann entspricht Deine die Schleife-Um-Schleifen-Konstruktion nicht Deiner Aufgabenstellung, da zum einen eine mehrspaltiger Bereich in der inneren Schleife abgearbeitet wird, sodann auch noch einem eine aäußere Schleife über die einezelnen Zeilen läuft. Einzig die Spalten-Schleife ist aufgabengemäß so notwendig und richtig formuliert.
Hier ein Lösungsvorschlag (nicht getestet):
Sub test11()
Dim zelle As Range
Dim i As Integer
Dim lngz As Long
Dim s As Long
lngz = Cells(Rows.Count, 1).End(xlUp).Row
For s = 2 To 14 Step 2
For Each zelle In Range(Cells(3, s), Cells(lngz, s))
If zelle.Value = "" Then zelle.Offset(0, -1).ClearContents
next zelle
Next s
End Sub
Gruß,
Uwe

Anzeige
AW: Problem mit Schleife - Ergänzung
10.11.2006 11:36:45
ingUR
Ich hatte eben nicht die Möglichkeit bedacht, dass Du, Werner,
mögliherweise in jeder zu untersuchenden Spalte unterschiedlich viel Zeilen zu untersuchen hast. In diesem Fall wäre folgende abänderung notwendig:
Sub test11()
Dim zelle As Range
Dim i As Integer
Dim lngz As Long
Dim s As Long
For s = 2 To 14 Step 2
lngz = Cells(Rows.Count, s).End(xlUp).Row
For Each zelle In Range(Cells(3, s), Cells(lngz, s))
If zelle.Value = "" Then zelle.Offset(0, -1).ClearContents
next zelle
Next s
End Sub
Alternativ kann aber auch die Formel zur Emittlung der letzen gefüllten Zelle in der Spalte, Cells(Rows.Count, s).End(xlUp).Row direkt in die Rangebeschreibung eingesetzt werden:
For Each zelle In Range(Cells(3, s), Cells(Cells(Rows.Count, s).End(xlUp).Row, s))
Gruß,
Uwe
Anzeige
alles klar - vielen Dank! owT
10.11.2006 12:07:21
werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige