VBA-Code: Leerzeile suchen - evtl. löschen

Bild

Betrifft: VBA-Code: Leerzeile suchen - evtl. löschen von: Markus M
Geschrieben am: 24.02.2005 15:11:39

Noch ein kleines Problem, und ich glaub muß mich doch langsam mal mit VBA beschäftigen
Es wäre nett, wenn mir noch einmal jemand helfen könnte.
Ich benötige einen VBA-Code, der eine Leerzeile zuerst sucht und dann löscht, jedoch nur, wenn in der Zeile obendran (also Leerzeile -1) in Spalte B ein Inhalt existiert.
Bekommt das jemand hin?

Hier hab ich mal so einen ähnlichen Code, mit dem man Leerzeilen sucht und löscht, so dass lediglich eine von mehreren hintereinander folgenden Leerzeilen stehen bleibt.
Vielleicht hilft der etwas weiter:
Dim z As Long
For z = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Application.CountA(Rows(z - 1 & ":" & z)) = 0 Then
Rows(z).Delete
End If
Next
End Sub

Schon jetzt vielen vielen Dank

Gruß
Markus

Bild


Betrifft: AW: VBA-Code: Leerzeile suchen - evtl. löschen von: Jan
Geschrieben am: 24.02.2005 15:26:12

Hi Markus,

Den Code hab ich mal angepaßt:

Sub löschen()
Dim z As Long
For z = 1 To Cells(65356, 2).End(xlUp).Row
If Worksheets("Tabelle1").Cells(z, 2) = "" And Worksheets("Tabelle1").Cells(z - 1, 2) <> "" Then
    Rows(z).Delete
End If
Next
End Sub


Jan


Bild


Betrifft: leider ohne Erfolg von: Markus
Geschrieben am: 24.02.2005 15:51:16

Hi,
danke erstmal - funktioniert aber leider nicht!

Es bleibt an der Zeile "If Worksheets ...", obwohl ich die "Tabelle1" mit "TATU1" (so heißt mein Arbeitsblatt) ersetzt habe.
Woran kann das liegen?

Noch was, so weit ich das sehe fehlt der Bezug auf die Zelle in Spalte B (also Leerzeile -1). Der ist unbedingt notwendig, da ich auch "normale Leerzeilen" im Formular hab, die ich beibehalten möchte - bei denen steht jedoch in Leezeile -1 in Zelle von Spalte B kein Inhalt.
Bei denen, welche ich löschen will jedoch schon (also ein Inhalt in Zelle von Spalte B)

Gruß
Markus


Bild


Betrifft: AW: leider ohne Erfolg von: Dominic
Geschrieben am: 24.02.2005 16:28:41

Der Code war fast richtig!

Sub löschen()
Dim z As Long
For z = Cells(65356, 2).End(xlUp).Row To 1 Step -1
If Worksheets("TATU1").Cells(z, 2) = "" And Worksheets("TATU1").Cells(z - 1, 2) <> "" Then Rows(z).Delete
Next
End Sub


Cells(z , 2)'= Zeile z und Spalte "B"

Gruß
Dominic


Bild


Betrifft: (fast) super - danke von: Makus
Geschrieben am: 24.02.2005 17:00:03

Danke,
funktioniert zu gut – es löscht sogar mehr Zeilen als ich will.
Dies liegt aber an mir, hatten nen Denkfehler.
Ich hatte nicht dran gedacht, dass die Summenspalten in der Zelle in Spalte B auch keinen Inhalt besitzen. Diese werden folglich auch gelöscht.
Ich muß jetzt nur noch zusätzlich prüfen, ob in der darauf folgenden Zeile (also Leerzeile +1) in der Zelle in Spalte B etwas steht.
Dann darf die Leerzeile erst gelöscht werden.
Mal schauen, ob ich das alleine hin bekomme – ansonsten meld ich mich noch mal

Also nochmals besten Dank

Gruß
Markus


Bild


Betrifft: Danke fürs Rückmeldung! von: Dominic
Geschrieben am: 24.02.2005 17:15:19

Wenn man selber was ausprobiert dann lernt man am meisten! Wird nicht schwer sein!

Gruß
Dominic


Bild


Betrifft: brauche doch noch mal Hilfe!!! von: Markus
Geschrieben am: 25.02.2005 02:31:46

Hallo,
benötige doch noch mal Eure Hilfe!

Die entsprechenden Leerzeilen werden ja wie gewollt gelöscht, nur bringt der Code danach dann eine Fehlermeldung und der Bereich “If Worksheets … bis „Bezeichnung“ wird im VBA-Fenster gelb markiert.
Warum das? Was könnte hier falsch sein?

Sub löschen()
'Dim z As Long
For z = Cells(65356, 2).End(xlUp).Row To 1 Step -1
If Worksheets("TATU1").Cells(z, 2) = "" And Worksheets("TATU1").Cells(z - 1, 2) <> "" _
And Worksheets("TATU1").Cells(z + 1, 2) <> "" And Worksheets("TATU1").Cells(z - 1, 2) <> _
"Bezeichnung" Then Rows(z).Delete
Next

Ich hab auch schon versucht, dies zu unterdrücken, indem ich diese Befehlszeile vorangestellt habe:
„On Error Resume Next“
Hier läuft das Makro dann durch
Das Ergebnis ist aber dann aber, dass immer die 1. Zeile des Formulars gelöscht wird, obwohl sie eigentlich nach der Bedingung nicht gelöscht werden darf.
Muß wohl mit dem „Step-1“ zusammenhängen.

Kann mir da jemand einen Tip geben?
Schon jetzt vielen Dank

Gruß
Markus


Bild


Betrifft: AW: brauche doch noch mal Hilfe!!! von: Dominic
Geschrieben am: 25.02.2005 11:09:48

Hallo Markus,

nach Cells immer .value schreiben. Dann sollte es klappen!
Der Makro macht folgendes:

Sub löschen()
Dim z As Long 'Variable erstellen
For z = Cells(65356, 2).End(xlUp).Row To 1 Step -1 'Ermittlung des letzten Zeile und Schleife bis 1 (wenn umgekehrt dann wird dein Makro endlos laufen)
If Worksheets("TATU1").Cells(z, 2).value = "" And Worksheets("TATU1").Cells(z - 1, 2).value <> "" _
And Worksheets("TATU1").Cells(z + 1, 2).value <> "" And Worksheets("TATU1").Cells(z - 1, 2).value <> _
"Bezeichnung" Then Rows(z).Delete 'Prüfung und löschen
Next
End Sub


Gruß
Dominic


Bild


Betrifft: danke - aber leide immer noch nicht ganz von: Markus
Geschrieben am: 25.02.2005 12:02:58

Hi,

@Dominic - Vielen vielen Dank erstmal.
jetzt wird das Makro zwar ausgeführt und löscht auch die entsprechenden Leerzeilen, jedoch erscheint danach eine Fehlermeldung mit Kopf „Microsoft Visual Basic“ und Inhalt „400“ – eine Hilfe hierzu wird nicht erzeugt.
Ich hab eine solche Beispieldatei angehängt, damit Dir die Fehlermeldung mal selbst anschauen kannst.
https://www.herber.de/bbs/user/18749.xls

Vielleicht erklärt sichs dann von selbst.
Ich selbst komm hier leider nicht mehr weiter.

Hintergrund der ganzen Sache:
Durch die Übernahme von Daten wird jeweils pro Seite ein Seitenkopf erzeugt. Diesen hab ich auch per Makro schon gelöscht. Lediglich eine Leerzeile bleibt je nach Seitenumbruch im Bereich um Zeile 58, um Zeile 113, … stehen. Diese sollen jedoch weg.
Mein Makro geht dann auch noch weiter, aber das ist ja egal
Zur Verdeutlichung hab ich noch in Zeile 10, 18, noch zusätzlich eine solche Leerzeile eingefügt und farblich hinterlegt .

Also, vielleicht schaust mal danach, wär Dir / Euch eccht super dankbar.

Gruß
Markus


Bild


Betrifft: AW: danke - aber leide immer noch nicht ganz von: Dominic
Geschrieben am: 25.02.2005 12:17:06

Hallo Markus,

die Lösung ist einfach!
Fehler in der Zeile:
For z = Cells(65356, 2).End(xlUp).Row To 1 Step -1 'Sollte To 2 sein. Wieso?

Du prüfst ja auch eine Zelle in der vorherigen Zeile, also bei Zeile 1 auch Zeile 0, was nicht gibt!

Gruß
Dominic


Bild


Betrifft: Genial!!! von: Markus
Geschrieben am: 25.02.2005 13:22:31

Super - danke nochmals für Deine Bemühungen
Funktioniert jetzt wunderbar!!!
Echt genial von Dir


Bild


Betrifft: Danke fürs Rückmeldung! o.T. von: Dominic
Geschrieben am: 25.02.2005 13:47:17

Gruß
Dominic


 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA-Code: Leerzeile suchen - evtl. löschen"