Delete empty row, ab zeile 8

Liebe/-r Experte/-in,

Mein Problem ist ein ganz simples und ich denke auch dass meine Loesung nicht ganz verkehrt ist, trotzdem bekomme ich immer einen Run-time error 1004: cannot use that command on overlapping sections.

Kannst du den fehler finden?

Es geht darum bei Antwort Yes in der Combobox zellen in ein anderes Worksheet zu kopieren und dannach zu pruefen ob dabei leerzeilen im neuen worksheet auftreten(dabei soll immer der ganze bereich geprueft werden). diese sollen dann geloescht werden, aber erst ab Zeile 8.

Wie kann man das schreiben, dass erst ab Zeile 8 bis Zeile 40 geprueft wird auf leerzeilen und dann gggf. geloescht wird???

Mein Code soweit:

Private Sub ComboBox1\_Change()
 Select Case ComboBox1.Value
 Case "Yes"

 Sheets("Template2").Select
 Range("D21:I21").Select
 Selection.Font.ColorIndex = 0
 Selection.Copy
'if YES: selects the Doc&Actions, copies and formats to black

 Application.Goto Worksheets("Changeplan").Range("C8")
 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks \_
 :=False, Transpose:=True
'goes to Worksheet CHangeplan and pastes the selection



 ThisWorkbook.Worksheets("Changeplan").Range("A8:H200").Select
 Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'deletes all empty rows in Changeplan

end sub

Danke schon im vorraus fuer die Muehe.

Lg, Antonia

Hallo Antonia - Ich hoffe du meinst sowas hier
kopiere deinen Abschnitt in dein neues Arbeistblatt und lass dann diese prozedure drüberlaufen. Die sollte dir alle leeren Zeilen ab Zeile 8 entfernen.

Sub DelEmptyRow()
Dim i, x, AnzahlZeilen, AnzahlSpalten As Integer
Dim istLeer As Boolean

'Anzahl Zeilen im Tabelleblatt ermitteln
AnzahlZeilen = Cells(Rows.Count, 1).End(xlUp).Row

'Ab Zeile 8 prüfen
For i = 8 To AnzahlZeilen
istLeer = True

'letzte gefüllte Spalte in zeile ermitteln
AnzahlSpalten = Sheets(1).Cells(i, 256).End(xlToLeft).Column

'Erste Spalte in Zeile aktivieren
Range(Cells(i, 1), Cells(i, 1)).Select

'Für jede zelle in Zeile prüfen ob Inhalt enthalten - Leerzeichen werden ignoriert (Trim)
For Each c In Range(Cells(i, 1), Cells(i, AnzahlSpalten))
If Trim(c.Value) „“ Then
istLeer = False
Exit For
End If
Next c

If istLeer = True Then
'aktive Zeile Löschen und Anzahl der Gesamtzeilen um 1 zurücksetzen
Selection.EntireRow.Delete
AnzahlZeilen = AnzahlZeilen - 1
End If

Next i

End Sub

Hallo Antonia,

als nicht so der wirkliche EXCEL Experte gebe ich mal meine Vermutungen zu diesem Problem ab:

Es besteht eine logische Kollision zwischen der Auswahl und dem Loeschen-Befehl.
Ich nehme mal an, das du nicht herum kommst Zeilenweise zu pruefen ob in einer Zeile Werte enthalten sind und dann zu loeschen.

Sorry, nur eine Vermutung, da ich mich mit EXCEL noch nie so wirklich beschaeftigen wollte kann ich dir leider nicht wirklich weiterhelfen.

tschau
Peter

Hallo Antonia,

du müsstest die Aktionen zum Kopieren und Löschen in eine for next Schleife einbauen. Dazu müsstest du zunächst eine long integer Variable deklariern (z.B. „Public i as long“ im Bereich „Option Explicit“)

Danach durchläuft die For Next Schleife jede Zeile, d.h. jede Zeilenangabe in einer Zellenadresse muss dann mit „i“ ersetzt werden, damit die Zeilen entsprechend hochgezählt werden. Die Zellenadressen bei der Rangefunktionen solltest du dann vorher in einer extra Variable zusammen setzen. Damit alles dann ab 8 beginnt einfach die for next Schleife mit for 8 = 1 to 9999 starten. Die Variable i für die Zeilennummer beginnt somit mit 8.

Das ganze lässt sich hier nicht ganz so einfach erklären. Du kannst dich gerne auch per Email an mich wenden asfast-edv"at"t-online.de (das at mit @ ersetzen)

Ich hoffe aber du kommst mit den Hinweisen die ich dir genannt habe doch ein Stückchen weiter.

Vielen Dank, dass du dich an mich über wer-weiss-was gewendet hast.

Viele Grüße
Andreas Fastner
asfast-edv.de

Ach ja
Wenn du nur die zeilen von 8 bis 40 prüfen willst, dann setze doch einfach die variable anzahlzeilen auf 40. Also: for i = 8 to 40

Ups - kleiner Fehler
anstatt
AnzahlZeilen = Cells(Rows.Count, 1).End(xlUp).Row

muss es heissen

AnzahlZeilen = Sheets(„Changeplan“).UsedRange.SpecialCells(xlCellTypeLastCell).Row

da ja alle zeilen im Tabellenblatt gezählt werden sollen und nicht nur die zeilen die einen Wert in der ersten Spalte haben

Hallo Ulli,
erstmal danke fuer das makro. ich bin blutiger anfaenger, deshalb etwas auf hilfe angewiesen.
es funktoniert nur noch nicht richtig.

Beim durchlaufen bekomme ich in der Zeile

Range(Cells(i, 1), Cells(i, 1)).Select

den Fehler ‚selected method of range class failed‘.
und bekomme manchmal angeboten as range nachzustellen. Ich verstehe die Fehlermeldung nicht.
Lief das makro bei dir?

Ist c eigentlich richtig definiert worden?
Bekomme aplication-defined or object-defind error wenn ich es aus den editor heraus starten will.

Hier nochmal der code den ich jetzt verwendet habe.

Sub DelEmptyRow()
Dim i, x, AnzahlZeilen, AnzahlSpalten As Integer
Dim c
Dim istLeer As Boolean

'Anzahl Zeilen im Tabelleblatt ermitteln
AnzahlZeilen = Sheets("Changeplan").UsedRange.SpecialCells(xlCellTypeLastCell).Row

'Ab Zeile 8 pruefen
For i = 8 To 50
'AnzahlZeilen waere Alternative zu 40
istLeer = True

'letzte gefuellte Spalte in zeile ermitteln
AnzahlSpalten = Sheets(1).Cells(i, 256).End(xlToLeft).Column

'Erste Spalte in Zeile aktivieren
Range(Cells(i, 1), Cells(i, 1)).Select


'Fuer jede zelle in Zeile pruefen ob Inhalt enthalten - Leerzeichen werden ignoriert (Trim)
For Each c In Range(Cells(i, 1), Cells(i, AnzahlSpalten))
If Trim(c.Value) "" Then
istLeer = False
Exit For
End If
Next c

If istLeer = True Then
'aktive Zeile Loeschen und Anzahl der Gesamtzeilen um 1 zuruecksetzen
Selection.EntireRow.Delete
AnzahlZeilen = AnzahlZeilen - 1
End If

Next i

End Sub

versuche:

Sheets(„Template2“).Select
Sheets(„Template2“).Activate ’

Hi Antonia,
ich bin nicht so der Excel-VBA Mensch.
Vl.versuchst Du mal „Offset“.
Sorry, dass ich Dir nichjt wirklich eine Hilfe bin.

Gruß
Erwin aus Bw