Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1476to1480
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
Inhaltsverzeichnis

EntireRow.Delete zeigt fehler wenn leerzeile

EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 14:53:29
Gregy
Hallo liebe Excel-Experten,
in einer Liste möchte ich per VBA leere Zeilen löschen (eine Datenübertragung von der Kalkulation zu einer Art mitlaufenden Kalkulation. Es sollen nur Zeilen gelöscht werden, deren Zelle Cx leer sind (in den C-Zellen stehen die Stückzahlen drin).
Ich habe in meiner Kalkulation mehrere Datensätze rein geschrieben und dazwischen befinden sich ab un zu auch mal leere Zeilen, bzw. Zeilen, deren Zelle C leer ist. Eben diese möchte ich mit dem Befehl
Range("C2:C500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete löschen. Sofern ich keine leeren Zellen zwischendurch haben, sondern nur welche am Ende (in den unteren Zeilen) funktioniert das ganze einwandfrei. Andernfalls kommt die Fehlermeldung
Laufzeitfehler '1004':
Die Delete-Methode des Range-Oblektes konnte nicht ausgeführt werden.

Hier ist nochmal der gesamte Code:

Sub Datenübergabe_Kalku_zu_MIKA_Daten()
Application.ScreenUpdating = False
''Tabelle formatieren
Sheets("MIKA-Daten").Range("B1:M500").Select
Selection.ClearContents
Sheets("Liste").Select
Range("K1:V1").Select
Selection.Copy
Sheets("MIKA-Daten").Select
Range("B1").Select
ActiveSheet.Paste
Sheets("MIKA-Daten").Range("B1:M500").Select
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$M$500"), , xlYes).Name = _
"Tabelle2"
Range("Tabelle2[#All]").Select
ActiveSheet.ListObjects("Tabelle2").TableStyle = "TableStyleMedium16"
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
''Zahlenformatierung hinzufügen
Range("Tabelle2[Pos.]").Select
Selection.NumberFormat = "@"
Range("Tabelle2[Menge]").Select
Selection.NumberFormat = "0.00"
Range("Tabelle2[[EK-Einzelpreis]:[EK-Gesamtpreis Nachverhandelt]]").Select
Selection.NumberFormat = "#,##0.00 $"
Range("E2:E500,J2:M500").Select
Range("J500").Activate
Selection.NumberFormat = "@"
''Spaltenbreiten einfügen
Columns("B:B").Select
Selection.ColumnWidth = 10
Columns("C:C").Select
Selection.ColumnWidth = 10
Columns("D:D").Select
Selection.ColumnWidth = 10
Columns("F:I").Select
Selection.ColumnWidth = 15
Columns("J:M").Select
Selection.ColumnWidth = 35
''Daten kopieren und einfügen
Sheets("Kalkulation").Range("C4:C500").Copy
Sheets("MIKA-Daten").Range("B2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks _
:=False, Transpose:=False
Sheets("Kalkulation").Range("D4:F500").Copy
Sheets("MIKA-Daten").Range("C2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks _
:=False, Transpose:=False
Sheets("Kalkulation").Range("L4:L500").Copy
Sheets("MIKA-Daten").Range("F2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks _
:=False, Transpose:=False
Sheets("Kalkulation").Range("G4:J500").Copy
Sheets("MIKA-Daten").Range("J2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks _
:=False, Transpose:=False
''Formel zur Berechnung des Gesamtpreises einfügen
Range("G2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=[@[EK-Einzelpreis]]*[@Menge]"
Range("C2:C500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Ich danke Euch schon einmal vielmals im Voraus
Gruß Gregy

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:06:11
selli
hallo gregy,
schreibe direkt vor die betreffende zeile:
On Error Resume Next
ist zwar nicht schön.
ist aber aufgrund der tatsache, dass das löschen der zeilen der letzte befehl ist durchaus zu verkraften.
gruß
selli

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:13:05
Werner
Hallo,
gib mal das entsprechende Tabellenblatt mit an, wobei mir nicht klar ist, auf welchem Blatt du die Zeilen Löschen willst.
Sheets("Kalkulation").Range("C2:C500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Das Blatt an deine Bedürfnisse anpassen.
Gruß Werner

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:15:55
Werner
Sorry Selli,
versehentlich auf deinen Beitrag geantwortet.
Gruß Werner

Anzeige
makes nothing
29.02.2016 15:17:38
selli
hallo werner,
das passiert schon mal.
macht nix.
tut mir ja nicht weh.
gruß
selli

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:21:19
Gregy
Hallo,
vielen Dank schon mal!
@ Selli,
leider funktioniert das nicht. Er übergeht den Fehler, aber er löscht dann halt die Zeilen nicht :-(
@ Werner,
das habe ich auch schon versucht. Leider mit dem selben Ergebnis, als wenn ich es weg lasse
MfG

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:34:05
Gregy
Gibt es evtl. noch weitere Alternativen Zeilen per VBA zu löschen?

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:41:26
Daniel
Hi
dann sind die Zellen nicht leer.
für die SpecialCells(xlcelltypeblanks) ist die Zelle immer belegt, wenn sie eine Formel enthält.
sie ist auch dann belegt, wenn sie den Text Leerstring enthält.
auch eine leer aussehende Zelle kann den Text Leerstring enthalten.
das passiert dann, wenn in der Zelle eine Formel mit dem Ergebnis "" (Leerstring) war und diese Formel kopiert und die Werte eingefügt wurden.
ersetze in deinem Code diesen Teil:
Sheets("Kalkulation").Range("D4:F500").Copy
Sheets("MIKA-Daten").Range("C2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks _
:=False, Transpose:=False
durch das hier:
Sheets("MIKA-Daten").Range("C2:E498").Value = Sheets("Kalkulation").Range("D4:F500").Value

bei dieser Übertragungsart werden auch die Werte aus einem Zellbereich in den anderen übertragen, aber der Text Leerstring wird hierbei in eine echte Leerzelle gewandelt, die du mit .SpecialCells(xlcelltypeblanks) ansprechen kannst.
du musst hierbei nur beachten, dass auch für das Ziel den ganzen Zellbereich in gleicher Größe angeben musst (die linke obere Zelle ist nicht ausreichend)
Gruß Daniel

Anzeige
AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:51:36
Gregy
Hallo Daniel,
leider hat diese Änderung auch nicht das gewünschte Ergebnis gebracht... :-(
MfG

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:58:02
Daniel
Hi
nun ja, ich kenne jetzt weder deinen Code, noch deine Datei.
von daher kann ich dir mit den weinigen Informationen über deinen Code, die du uns gibst, nicht weiterhelfen.
eine andere Methode um die Zeilen zu löschen, die Spalte C leer sind wäre folgende:
With Range("X1:X500")
.FormulaR1C1 = "=IF(RC3="""",0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .column, xlno
.ClearContents
End With
für die Spalte X verwendest du bitte die erste freie Spalte am Tabellenende.
Gruß Daniel

Anzeige
AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:47:05
Rudi
Hallo,
verbundene Zellen im Bereich?
Gruß
Rudi

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 15:50:40
Gregy
Hallo Rudi,
nein, habe ich nicht
MfG

AW: EntireRow.Delete zeigt fehler wenn leerzeile
29.02.2016 16:49:18
Gregy
?

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige