Supportnet / Forum / Tabellenkalkulation
Zeile löschen mit VBA
Frage
Langsam bin ich am verzweifeln :(
Ich will in einer Excel Tabelle Zeilen löschen, die in Spalte B keinen Inhalt haben. habe es mit folgendem Code probiert:
Range("B1:B200").Select
For Each cell In Selection
If cell.Value = "" Then cell.EntireRow.Delete
Next
Damit gibt es aber zwei Probleme:
Zum einen bekomme ich Excel in keinster weise beigebracht mit welchem Worksheet es das machen soll. Excel führt den Code auf dem Worksheet aus, auf dem der CommandButton gedrückt wurde. Ist mit dem Code ja auch ok, aber ich bekomme ihn nicht so ergänzt das Excel es auf einem anderen Sheet macht.
Und zum zweiten: Auf dem Sheet auf dem Excel den Code nun ausführt werden immer nur zwei Zeilen gelöscht, ganz egal wieviele Zeilen in Spalte B keinen Eintrag haben. Click ich nochmal auf den Button werden die nächsten beiden Zeilen gelöscht?!?
Wäre super wenn mir da einer helfen könnte.
Antwort 1 von Risatara2
Moin moin,
Funktioniert bei mir (Excel 2k) Wunderbar. Weiß auch nicht wie das bei dir kommt, dass er nur 2 Zellen löscht.
Risatara
Sub Schaltfläche2_BeiKlick()
Worksheets("Tabelle1").Select
Range("B1:B200").Select
For Each cell In Selection
If cell.Value = "" Then cell.EntireRow.Delete
Next
End Sub
Funktioniert bei mir (Excel 2k) Wunderbar. Weiß auch nicht wie das bei dir kommt, dass er nur 2 Zellen löscht.
Risatara
Antwort 2 von nighty
hi all :)
wie gewuenscht :))
und um einiges schneller :)))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
wie gewuenscht :))
und um einiges schneller :)))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
Antwort 3 von sTikKen
arg ;)
jetzt geht gar nix mehr bei mir.
Dachte grad noch es würde gehen, aber wenn ich eine Tabelle selecte auf der nicht der CommandButton ist sagt er mir:
"Laufzeitfehler ´1004´:
Die Select Methode des Range-Objekts ist fehlerhaft"
und kreidet mir
Range("B1:B200").Select
als falsch an. Wie gesagt, nur wenn ich auf eine andere Tabelle verweise. Selecte ich die auf der auch der CommandButton vorhanden ist macht er es(allerdings wie vorher, löscht nicht jede Zeile wo SpalteB leer ist. Allerdings war die Angabe 2 auch nicht ganz richtig, wenn in Spalte B abwechselnd in einer Zeile ein Wert steht, in der nächsten nicht usw. löscht er alle, aber wenn meherer leere Zeilen aufeinander folgen löscht er nur ein paar).
Benutze übrigens Excel 97.
jetzt geht gar nix mehr bei mir.
Dachte grad noch es würde gehen, aber wenn ich eine Tabelle selecte auf der nicht der CommandButton ist sagt er mir:
"Laufzeitfehler ´1004´:
Die Select Methode des Range-Objekts ist fehlerhaft"
und kreidet mir
Range("B1:B200").Select
als falsch an. Wie gesagt, nur wenn ich auf eine andere Tabelle verweise. Selecte ich die auf der auch der CommandButton vorhanden ist macht er es(allerdings wie vorher, löscht nicht jede Zeile wo SpalteB leer ist. Allerdings war die Angabe 2 auch nicht ganz richtig, wenn in Spalte B abwechselnd in einer Zeile ein Wert steht, in der nächsten nicht usw. löscht er alle, aber wenn meherer leere Zeilen aufeinander folgen löscht er nur ein paar).
Benutze übrigens Excel 97.
Antwort 4 von nighty
hi all :)
innerhalb eines solchen elementes sollte nur der aufruf eines codes stattfinden wenn es die abfragen erlauben sollten,wie zum beispiel call DeinMakro oder probier es ohne selektionen :))
gruss nighty
innerhalb eines solchen elementes sollte nur der aufruf eines codes stattfinden wenn es die abfragen erlauben sollten,wie zum beispiel call DeinMakro oder probier es ohne selektionen :))
gruss nighty
Antwort 5 von sTikKen
jetzt hab ich meinen eigenen Artikel schlecht bewertet :D
wollt ihn doch eigentlich editieren.
@nighty leider funktioniert das auch nicht
"Die SpecialCells Eigenschaft des Range-Objekts kann nicht zugeordnet werden"
Dank euch aber dennoch für die schnellen Antworten :-)
wollt ihn doch eigentlich editieren.
@nighty leider funktioniert das auch nicht
"Die SpecialCells Eigenschaft des Range-Objekts kann nicht zugeordnet werden"
Dank euch aber dennoch für die schnellen Antworten :-)
Antwort 6 von nighty
hi all :)
was natürlich nicht vergessen werden sollte sind geschützte bereiche oder gar verbundene zellen :))
gruss nighty
was natürlich nicht vergessen werden sollte sind geschützte bereiche oder gar verbundene zellen :))
gruss nighty

