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

Letzte Zeile mit Bedingung löschen

Letzte Zeile mit Bedingung löschen
03.10.2017 13:38:42
Guesa
Hallo Forum
Bastele immer noch an meiner Auftragsverwaltung herum. Folgendes Problem hat sich jetzt noch ergeben. Kurze Erklärung: In Tb Einträge lege ich die komplett-Aufträge an. Für den Produktionsstatus brauche ich daraus die ganze Zeile, für die Einträge in die Laufkarte nur bestimmte Einträge. Wenn jetzt in der Letzten Zeile eine Fehleingabe getätigt worden ist und diese gebucht worden ist, möchte ich, dass die letzte Buchung (Letzte Zeile) aus Tb Produktionsstatus und Eintr-Laufkarte gelöscht werden. Ich habe zwar einen Code der die letzte Zeile löscht, aber mit einem nervösen Zeigefinger meiner Kollegen :-) werden dann eventuell mehrere Zeilen gelöscht. Daher sollten die Zeilen nur gelöscht werden, wenn die Best. Nr. identisch ist. Zum besseren Verständnis lade ich mal eine Beispiel-Datei hoch.
Für Eure Hilfe schon mal ein herzliches Danke schön.
https://www.herber.de/bbs/user/116717.xlsm
Gruß, Guesa

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Letzte Zeile mit Bedingung löschen
03.10.2017 14:47:31
Werner
Hallo,
lade das mal als .xlsx hoch, kann im Moment keine .xlsm runterladen. Dann schau ich es mir mal an.
Gruß Werner
AW: Letzte Zeile mit Bedingung löschen
03.10.2017 15:48:04
Werner
Hallo,
teste mal:
Public Sub Fehleintrag_raus()
Dim loWertE As Long 'Wert Einträge
Dim loWertP As Long 'Wert Produktionsstatus
Dim loWertL As Long 'Wert Eintr-Laufzettel
If IsNumeric(Worksheets("Einträge").Cells(Rows.Count, 3).End(xlUp)) Then
loWertE = Worksheets("Einträge").Cells(Rows.Count, 3).End(xlUp)
End If
If IsNumeric(Worksheets("Produktionsstatus").Cells(Rows.Count, 3).End(xlUp)) Then
loWertP = Worksheets("Produktionsstatus").Cells(Rows.Count, 3).End(xlUp)
End If
If IsNumeric(Worksheets("Eintr-Laufkarte").Cells(Rows.Count, 3).End(xlUp)) Then
loWertL = Worksheets("Eintr-Laufkarte").Cells(Rows.Count, 3).End(xlUp)
End If
If loWertE = loWertP And loWertE = loWertL Then
Worksheets("Produktionsstatus").Cells(Rows.Count, 3).End(xlUp).EntireRow.Delete
Worksheets("Eintr-Laufkarte").Cells(Rows.Count, 3).End(xlUp).EntireRow.Delete
Else
MsgBox "Löschen nicht möglich, da es sich" & vbLf _
& "unterschiedliche Bestellnummern handelt."
End If
End Sub
Gruß Werner
Anzeige
AW: Letzte Zeile mit Bedingung löschen
03.10.2017 17:30:33
Guesa
Hallo Werner
Erstmal Danke für die schnelle Antwort. Dein Code macht genau das was ich geschrieben habe. Jetzt stelle ich allerdings fest, dass ich das ganze total falsch erklärt habe. Ist etwas kompliziert zu erklären. Wenn du mal in Produkst.. reinguckst stehen da beide Einträge, in Eintr-Laufkarte nur der Eintrag mit der laufenden Nr. Das Makro löscht mir jetzt korrekt den letzten Eintrag aus Produktionsstatus aber auch den letzten in Laufd. Nr. Das ist zwar die letzte Zeile aber nicht der letzte Eintrag. Im Grunde muss noch eine Prüfung rein. Wenn Einträge LaufendeNr und Best.Nr gleich dann lösche in Produktionsstatus und Eintr-Laufende Nr. Wenn Einträge LaufendeNr Nichts und Best.Nr. gleich dann lösche nur aus Produktionsstatus. Ich hoffe das ich das jetzt einigermaßen verständlich ausgedrückt habe. Vielleicht noch zum besseren Verständnis der Code (ist sogar von Dir) wie ich kopiere.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
If Target.Column  7 Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Dim eRow As Long, eRowL As Long
eRow = Target.Row
With Worksheets("Produktionsstatus")
If IsEmpty(.Range("A1")) Then
eRowL = 1
Else
eRowL = .Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
Range(Cells(eRow, 1), Cells(eRow, 7)).Copy
.Cells(eRowL, 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
'.Columns.AutoFit
End With
If Target.Column  7 Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Dim iRow As Long, iRowL As Long
iRow = Target.Row
With Worksheets("Eintr-Laufkarte")
If IsEmpty(.Range("B1")) Then
iRowL = 1
Else
iRowL = .Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
If Cells(iRow, 2).Value > "" Then
Range(Cells(iRow, 8), Cells(iRow, 11)).Copy
.Cells(iRowL, 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
'.Columns.AutoFit
End If
End With
Application.ScreenUpdating = True
End Sub
Total auf dem Schlauch stehend Gruß, Guesa
Anzeige
AW: Letzte Zeile mit Bedingung löschen
04.10.2017 06:20:45
Werner
Hallo,
teste:
Public Sub Fehleintrag_raus()
Dim loWertE As Long 'Best.Nr. Einträge
Dim loWertP As Long 'Best.Nr. Produktionsstatus
Dim loWertL As Long 'Best.Nr. Eintr-Laufzettel
Dim loWertENr As Long 'lfd. Nummer Einträge
Dim loWertLNr As Long 'lfd. Nummer Eintr-Laufzettel
If IsNumeric(Worksheets("Einträge").Cells(Rows.Count, 3).End(xlUp)) Then
loWertE = Worksheets("Einträge").Cells(Rows.Count, 3).End(xlUp)
loWertENr = Worksheets("Einträge").Cells(Rows.Count, 3).End(xlUp).Offset(, -1)
Else
Exit Sub
End If
If IsNumeric(Worksheets("Produktionsstatus").Cells(Rows.Count, 3).End(xlUp)) Then
loWertP = Worksheets("Produktionsstatus").Cells(Rows.Count, 3).End(xlUp)
End If
If IsNumeric(Worksheets("Eintr-Laufkarte").Cells(Rows.Count, 3).End(xlUp)) Then
loWertL = Worksheets("Eintr-Laufkarte").Cells(Rows.Count, 3).End(xlUp)
loWertLNr = Worksheets("Eintr-Laufkarte").Cells(Rows.Count, 3).End(xlUp).Offset(, -2)
End If
If MsgBox("Letzten Eintrag tatsächlich löschen?", vbYesNo, "Sicherheitsabfrage") = vbNo Then  _
Exit Sub
If loWertE = loWertP And loWertE = loWertL And loWertENr > 0 And loWertENr = loWertLNr Then
Worksheets("Produktionsstatus").Cells(Rows.Count, 3).End(xlUp).EntireRow.Delete
Worksheets("Eintr-Laufkarte").Cells(Rows.Count, 3).End(xlUp).EntireRow.Delete
Worksheets("Einträge").Cells(Rows.Count, 3).End(xlUp) = "Fehleintrag"
ElseIf loWertE = loWertP Then
Worksheets("Produktionsstatus").Cells(Rows.Count, 3).End(xlUp).EntireRow.Delete
Worksheets("Einträge").Cells(Rows.Count, 3).End(xlUp) = "Neu erfassen"
Else
MsgBox "Keine identischen Bestellnummern."
End If
End Sub
Da ist jetzt vor dem Löschen der Daten noch eine Sicherheitsabfrage drin.
Zudem setze ich den letzten Wert Spalte C im Blatt "Einträge" auf "Neu erfassen".
Das hat folgenden Grund:
Wenn dein "User" den letzten Eintrag aufgrund Fehlerfassung löscht und dann das Makro erneut ausführt, dann würde der jetzt letzte Eintrag bei Übereinstimmung der Bestellnummer ebenfalls gelöscht. In deiner Beispieldatei würde das zutreffen, somit wären dann beide Einträge weg (Kennwort "Nervöse Finger").
Gruß Werner
Anzeige
AW: Letzte Zeile mit Bedingung löschen
04.10.2017 19:15:48
Guesa
Hallo Werner
Habe ich gerade bei mir getestet, echt Super. Großen Dank für Deine Mühe.
Werde ich morgen am Arbeitsrechner testen.
Gruß, Guesa
AW: Letzte Zeile mit Bedingung löschen
04.10.2017 23:21:29
Werner
Hallo,
na dann hoffen wir mal, dass es in deiner Arbeitsdatei auch funktioniert.
Kleiner Tip noch zum vermeiden von verbundenen Zellen.
Schreib mal in Zelle A1 "hier sind die verbundenen Zellen."
Jetzt Zelle A1 bis Zelle D1 markieren - Zellen formatieren - Ausrichtung - horizontal - über Auswahl zentrieren
Gleiches Ergebnis wie bei verbundenen Zellen, ohne die Nachteile derselben.
Gruß Werner

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige