Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1460to1464
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

Löschen nochmal :D

Löschen nochmal :D
09.12.2015 17:05:27
John
Hi Forum,
ich habe mir ein Makro gebastelt welches soweit erst mal funktioniert *glücklich*
Public Sub Alle_Rechnungen()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
On Error Resume Next
With Worksheets("Rechnungen")
.Visible = xlSheetVisible
Sheets("RechnungenDruck").Delete
Sheets("Rechnungen").Select
Sheets("Rechnungen").Copy After:=Sheets(1)
Sheets("Rechnungen (2)").Select
Sheets("Rechnungen (2)").Name = "RechnungenDruck"
.Visible = xlSheetHidden
End With
With Worksheets("RechnungenDruck")
.Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' funktioniert nicht
.Rows("1").Delete ' funktioniert
.Columns("A:A").Delete  'funktioniert nicht
.Columns("1").Delete  'funktioniert nicht
End With
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

In der Spalte B wo die leeren Zeilen die gelöscht werden soll ist lediglich eine Formel

=WENNFEHLER(WENN(ISTLEER(INDIREKT(A58&"!E14"));0;INDIREKT(A58&"!E14"));0)

und die Spalte ist mit

TT.MM.JJJJ;;;
formatiert!
Verhindert das in der konstelation, das die leeren Zeilen in Spalte B gelöscht werden?
Dort wird ein Datum angezeigt und wenn keins ist, soll die Zeile gelöscht werden!
Nach dem durchlauf soll dann A komplet entfernt werden X)

.Columns("A:A").Delete
löscht mir jedoch eigentlich alles bis auf die erste Zeile!? *cry*
grüsse john

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Löschen nochmal :D
09.12.2015 17:32:47
Matthias
Hallo John,
ja eine Formel zählt für die Funktion 'Istleer()' als nicht leer. Damit wird die Zeile dann auch nicht gelöscht. Oder du löschst händig die Formeln aus den betroffenen Zeilen, was ja nicht im Sinne des Erfinders ist.
Das Makro müsste also alle Formeln in der Spalte durchgehen und deren Wert anschauen. Dann entscheiden, ob die Zeile gelöscht werden muss oder nicht. Hier desshalb der geänderte Absatz, so wie er bei dir reinkopiert werden müsste:
Dim rZelle As Range
With Worksheets("RechnungenDruck")
'Für jede Zelle deren Formel den Wert Null ausspuckt, lösche die Formel
On Error GoTo Fehler: 'Wenn es keine Formeln in der Spalte gibt
For Each rZelle In .Range("B:B").SpecialCells(xlCellTypeFormulas)
If rZelle = 0 Then rZelle.ClearContents
Next rZelle
On Error GoTo 0
Fehler:
.Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' funktioniert jetzt
.Rows("1").Delete ' funktioniert
.Columns("A:A").Delete
End With
Was du mit Spalte A meinst, ist mir schleierhaft.
       .Columns("A:A").Delete  'funktioniert nicht
.Columns("1").Delete  'funktioniert nicht
Dein Befehl ist soweit richtig, auch wenn es unnötig ist "A:A" zu schreiben, wenn man den Befehl Columns verwendet. Ein einfaches "A" würde auch reichen. "A:A" wäre richtig wenn du den Range-Befehl verwenden würdest.
Genauso funktioniert der Befehl auch mit einer Zahl, die man dann nicht in Anführungszeichen stecken braucht, aber Excel ist ja nicht dumm und erkennt es trotzdem. Von daher müssten beide Versionen so wie du sie stehn hast klappen (und das tun sie auch im Test).
lg Matthias

Anzeige
AW: Löschen nochmal :D
09.12.2015 17:50:56
John
Danke Matthias für die erklärung,
ich denke ich habe das auch mit nur A versucht anstatt dem Range A:A genauso wie 1 und "1" aber nun bin ich ja schon wider schlauer, exel ist doch irgendwie? einfach? lol...
Deinen vorschlag kann ich leider erst morgen testen!
Danke nochmals!
gruss john

AW: Löschen nochmal :D
09.12.2015 19:13:02
John
Also sobald .Columns("A:A").Delete ins spiel kommt egal in welcher form, hab ich gerade gesehn ist das .sheet zwar leer, die erste spalte als A wurde entfernt und die formeln sind noch alle drin!?
WTF?
greetz john

AW: Löschen nochmal :D
09.12.2015 19:56:33
Matthias
Hallo John,
ja klar sind noch einige Formeln drinn, und zwar genau die die bei Beginn des Makros einen Wert enthalten haben und daher nicht gelöscht werden sollten. Die Formel verweist jedoch auf die gelöschte Spalte A, was jetzt den Fehler '#BEZUG!' hervorruft. Und was besagt deine Funktion 'Istfehler()'? Genau! Bei Fehler gebe den Wert Null zurück, damit enthält die ehemalige Spalte B ausschließlich Nullen.
Fazit, das Makro tut was es soll.
lg Matthias

Anzeige
AW: Löschen nochmal :D
10.12.2015 15:13:35
John
Danke Matthias,
dann kann ich davon ausgehen, das wenn ich beim kopieren die inhalte der Tabelen kopiere anstatt die Formeln auch mit zu nehmen, dann hab ich ja erreicht was ich möchte, jedoch bin ich einfach zu blöde diesen block
  .PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats

zu migrieren!
grüsse John

AW: Löschen nochmal :D
10.12.2015 19:30:04
Matthias
Hallo John,
für diese Befehle brauchst du einen Copy-Befehl vorher, aber so wie du es in dem anderen Post geschrieben hast, macht das wenig Sinn. PasteSpecial funktioniert in diesem Fall nur mit Zellen und ihren Werten/Formatierungen. Du hast zuvor aber ein Tabellenblatt kopiert, da klappt das natürlich nicht.
Du möchtest also die Werte der Formeln festsetzen, verstehe ich das richtig? Dazu kannst du statt dem was ich in meinem vorherigen Beitrag geschrieben habe einfach folgendes für Spalte B machen:
    With Worksheets("RechnungenDruck")
.Range("B:B").Value = .Range("B:B").Value
.Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' funktioniert jetzt
.Rows("1").Delete ' funktioniert
.Columns("A:A").Delete
End With
Zusätzlich muss deine Formel statt Null einen Leerstring ausspucken, also musst du sie wie folgt ändern:
=WENNFEHLER(WENN(ISTLEER(INDIREKT(A1&"!E14"));"";INDIREKT(A1&"!E14"));"")
Die Sache mit dem PasteSpecial xlPasteValues funktioniert an dieser Stelle leider nicht, da er dann den Leerstring ("") trotzdem als 'nicht leer' ansieht.
lg Matthias

Anzeige
AW: Löschen nochmal :D
11.12.2015 06:20:21
John
Hallo Matthias,
also das ändern der Formel
=WENNFEHLER(WENN(ISTLEER(INDIREKT(A1&"!E14"));"";INDIREKT(A1&"!E14"));"")

ist überflüssig... :D ich habe den bereich um
    With Worksheets("RechnungenDruck")
.Range("B:B").Value = .Range("B:B").Value

.Range("C:C").Value = .Range("C:C").Value
.Range("D:D").Value = .Range("D:D").Value
.Range("E:E").Value = .Range("E:E").Value
.Range("F:F").Value = .Range("F:F").Value
.Range("G:G").Value = .Range("G:G").Value

.Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' funktioniert jetzt
.Rows("1").Delete ' funktioniert
.Columns("A:A").Delete
End With

erweitert, und siehe da es werden die Spalten mit den Werten und nicht den Formeln übernommen!
Wie sagt man immer der Fisch fängt das Faulen an vom Kopf, vieleicht sollte ich den start meines Makros nochmal überdenken und gleich beim Kopieren des sheets das ganze berücksichtigen... aber erst mal weiter ;)
so nun die Daten sortieren und automatisch Drucken, aber keine sorge Forum das ist kein Problem, habe ja dazu gelert die letzten Wochen ;)
Und DANKE MATTHIAS!!! Schönes WE...
grüsse John

Anzeige
AW: Löschen nochmal :D
09.12.2015 18:40:43
John
Hi Matthias,
hab es dann doch noch gerade irgendwie geschaft es heute noch zu testen...
Public Sub Alle_Rechnungen()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
On Error Resume Next
With Worksheets("Rechnungen")
.Visible = xlSheetVisible
Sheets("RechnungenDruck").Delete
Sheets("Rechnungen").Select
Sheets("Rechnungen").Copy After:=Sheets(1)
Sheets("Rechnungen (2)").Select
Sheets("Rechnungen (2)").Name = "RechnungenDruck"
.Visible = xlSheetHidden
End With
Dim rZelle As Range
With Worksheets("RechnungenDruck")
'Für jede Zelle deren Formel den Wert Null ausspuckt, lösche die Formel
On Error GoTo Fehler
For Each rZelle In .Range("B:B").SpecialCells(xlCellTypeFormulas)
If rZelle = 0 Then rZelle.ClearContents
Next rZelle
On Error GoTo 0
.Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' funktioniert jetzt
.Rows("1").Delete ' funktioniert
.Columns("A:A").Delete
End With
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Ich bekomme ein komplett leeres blatt, und

On Error GoTo Fehler

gibt sprungmarke nicht definiert!
grüsse john

Anzeige
AW: Löschen nochmal :D
09.12.2015 19:39:12
John
Forum,
entschuldigt bitte das ich so viel Rede, aber mein Vater war damals Aleinunterhalter X)
wie bekomme ich
  .PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats

in diesem block...
    With Worksheets("Rechnungen")
.Visible = xlSheetVisible
Sheets("RechnungenDruck").Delete
Sheets("Rechnungen").Select
Sheets("Rechnungen").Copy After:=Sheets(1)
Sheets("Rechnungen (2)").Select
Sheets("Rechnungen (2)").Name = "RechnungenDruck"
.Visible = xlSheetHidden
End With
ans laufen?
grüsse john
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige