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

Zeile ausschneiden und in anderes Tabellenblatt einfügen

Zeile ausschneiden und in anderes Tabellenblatt einfügen
09.02.2024 08:35:33
Günther
Hallo VBA'ler,

es ist zwar früh am Morgen, aber mein Hirn bekommt es nicht auf die Reihe.

Ich möchte in einem Tabellenblatt eine Zeile ausschneiden und in einem anderen Tabellenblatt am Ende wieder einfügen. Irgendwie funzt das nicht. Wo ist mein Denkfehler?
Hoffe, jemand hat mir eine Lösung zu diesem kleinen Problem.


Sub KundenLoeschen()

'Abfrage ob Kunde wirklich gelöscht werden soll
Dim Antwort

Antwort = MsgBox("Soll der Eintrag wirklich gelöscht werden?", vbYesNo + vbQuestion, "Eintrag wirklich löschen?")
If Antwort = vbYes Then ActiveCell.EntireRow.Cut

'Hier wird die letzte Zeile ermittelt
'Egal in welcher Spalte sich die letzte Zeile befindet
'Es werden alle Spalten geprüft und die letzte Zeile ausgegeben

Sheets("gekündigte Verträge").Select
Range("A1").Select
letztezeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveSheet.Cells(letztezeile, 1).Select
ActiveSheet.Cells(letztezeile, 1).Paste

End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Zeile ausschneiden und in anderes Tabellenblatt einfügen
09.02.2024 11:33:01
Oppawinni
"Irgendwie funzt das nicht" ist keine wirkliche Fehlerbeschreibung.
Du hast wohl irgendwoher :) code kopiert, die Kommentare stehen lassen und es dann doch anders gemacht.
Das Original dürfte so ausgesehen haben:
'Hier wird die letzte Zeile ermittelt

'Egal in welcher Spalte sich die letzte Zeile befindet
'Es werden alle Spalten geprüft und die letzte Zeile ausgegeben
letztezeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row


in deinem Fall hätte das dann wohl
letztezeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

heissen müssen, das wäre dann aber die letzte benutzte Zeile. Benutzt heisst halt leider nicht unbedingt, dass da Werte stehen.
Bei dir ist "letztezeile" aber eigentlich die Zeile NACH der letzten belegten Zelle in SPALTE 1
Mit
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
wird von der letzten vorhandenen Zeile Rows.Count in Spalte 1 nach oben End(xlUp) zur nächsten belegten Zelle gesprungen.
Da du dann zur entsprechenden .row 1 addierst ist da in Spalte 1 eine leere Zelle.

Du musst im Übrigen natürlich bei deiner Messagebox auch den Fall No - Fall berücksichtigen. Z.B.
If Antwort = vbYes Then 

ActiveCell.EntireRow.Cut
else
exit sub
end if


Mit einer Beispieldatei wäre es leichter, dir zu helfen.

Anzeige
AW: Zeile ausschneiden und in anderes Tabellenblatt einfügen
09.02.2024 11:52:46
Günther
Hallo OppaWinni,

da muss ich Dir recht geben. Sorry. Als Anhang eine Beispiel Datei

Ich möchte den Namen markieren und diese Zeile ausschneiden und in der Tabelle "gekündigte Verträge" wieder einfügen. Und wenn möglich, die ausgeschnitte Zeile natürlich löschen, damit keine Leerzeilen vorhanden sind.

https://www.herber.de/bbs/user/166936.xlsm

Grüße
Günther
AW: Zeile ausschneiden und in anderes Tabellenblatt einfügen
09.02.2024 15:42:33
Oppawinni
Das sollte nicht so schwierig sein, nur muss man doch so einiges prüfen bevor irgend ein Quatsch passiert
Ich denk mal, etwa so:


Option Explicit
Sub KundenLoeschen()

Dim rngToDelete As Range
Dim rngToMoveTo As Range
Dim lngAntwort As Long

If ActiveCell.Worksheet.Name > Tabelle1.Name Then
MsgBox "Falsches Arbeitsblatt für diese Aktion"
Exit Sub
End If
If Intersect(ActiveCell, Tabelle1.UsedRange) Is Nothing Then
MsgBox "Bitte zuerst einen Kundeneintrag auswählen"
Exit Sub
Else
If Cells(ActiveCell.Row, 1).Value = "" Or ActiveCell.Row = 1 Then
MsgBox "Bitte zuerst einen Kundeneintrag auswählen"
Exit Sub
Else
lngAntwort = MsgBox("Soll der Kunde " & Cells(ActiveCell.Row, 1) & " wirklich gelöscht werden?", _
vbYesNo + vbQuestion, "Eintrag wirklich löschen?")
If lngAntwort = vbNo Then
Exit Sub
End If
End If
End If

'jetzt erst wirklich etwas tun

Set rngToDelete = ActiveCell.EntireRow
Set rngToMoveTo = Tabelle2.Cells(Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).EntireRow

rngToDelete.Cut rngToMoveTo
rngToDelete(1).Delete

End Sub
Anzeige
AW: Zeile ausschneiden und in anderes Tabellenblatt einfügen
09.02.2024 15:52:15
Günther
Hallo OppaWinni,

puh, da kann ich noch viel lernen. Sie aber irgendwie gut aus. Ich teste es gleich nächste Woche und melde mich....muss jetzt leider in den wohlverdienten Feierabend.
Besten Dank für Deine Hilfe und noch ein schönes Wochenende.

Grüße
Günther
Korrektur
09.02.2024 16:56:09
Oppawinni
keine Ahnung, was dieses .cut da treibt, jedenfalls hab ich beim testen gemerkt, dass er mir da ranges verändert.
So sollte es aber jetzt mal funktionieren:
Option Explicit

Sub KundenLoeschen()

Dim rngToDelete As Range
Dim rngToMoveTo As Range
Dim lngAntwort As Long
Dim lngRow As Long

If ActiveCell.Worksheet.Name > Tabelle1.Name Then
MsgBox "Falsches Arbeitsblatt für diese Aktion"
Exit Sub
End If
If Cells(ActiveCell.Row, 1).Value = "" Or ActiveCell.Row = 1 Then
MsgBox "Bitte zuerst einen Kundeneintrag auswählen"
Exit Sub
Else
lngAntwort = MsgBox("Soll der Kunde " & Cells(ActiveCell.Row, 1) & " wirklich gelöscht werden?", _
vbYesNo + vbQuestion, "Eintrag wirklich löschen?")
If lngAntwort = vbNo Then
Exit Sub
End If
End If

lngRow = ActiveCell.Row
Set rngToDelete = ActiveCell.EntireRow
Set rngToMoveTo = Tabelle2.Cells(Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).EntireRow

rngToDelete.Cut rngToMoveTo
'mit dem Verschieben ändert sich die Adresse von rngToDelete
Tabelle1.Rows(lngRow).EntireRow.Delete

End Sub
Anzeige
kleine Modifikation und Kommentare
09.02.2024 20:10:36
Oppawinni
Jetzt hab ich aber genug herumgespielt :)

Option Explicit

Sub KundenLoeschen()

Dim wksKunde As Worksheet
Dim wksExKunde As Worksheet
Dim rngToDelete As Range
Dim rngToMoveTo As Range
Dim lngAntwort As Long
Dim lngRow As Long

'Hier die Workbooks als Variablen zur einfachern Anpassung des Codes
Set wksKunde = ThisWorkbook.Worksheets("Gesamtuebersicht") ' alternativ den Code Namen z.B.: Tabelle1
Set wksExKunde = ThisWorkbook.Worksheets("gekündigte Verträge") ' alternativ den Code Namen z.B.: Tabelle2

' Zeile der aktiven Zelle
lngRow = ActiveCell.Row

If Not ActiveCell.Worksheet Is wksKunde Then
'Die aktive Zelle liegt nicht auf dem richtigen Worksheet
'debug.print activeCell.Worksheet.Name
MsgBox "Falsches Arbeitsblatt für diese Aktion"
Exit Sub
End If
If IsEmpty(wksKunde.Cells(lngRow, 1)) Or lngRow = 1 Then
'entweder ist bei der aktiven Zelle die erste Spalte leer, oder sie liegt in der Titelzeile (Zeile 1)
MsgBox "Bitte zuerst einen Kundeneintrag auswählen"
Exit Sub
Else
'alles scheint ok, jetzt noch den Anwender fragen, ob er die Zeile löschen will
lngAntwort = MsgBox("Soll der Kunde " & wksKunde.Cells(lngRow, 1) & " wirklich gelöscht werden?", _
vbYesNo + vbQuestion, "Eintrag wirklich löschen?")
If lngAntwort = vbNo Then
Exit Sub
End If
End If
'Das folgende wird nur ausgeführt wenn kein Fehler erkannt wurde und der Anwender dem Löschen zugestimmt hat

Set rngToDelete = ActiveCell.EntireRow
Set rngToMoveTo = wksExKunde.Cells(wksExKunde.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).EntireRow

rngToDelete.Cut rngToMoveTo
'rngtoDelete nochmals setzen, da rngToDelete.Cut die Addresse von rngToDelete ändert
Set rngToDelete = ActiveCell.EntireRow
rngToDelete.Delete

End Sub

Anzeige
AW: kleine Modifikation und Kommentare
12.02.2024 07:33:59
Günther
Guten Tag OppaWinni,
das ist ja Super. Ich Danke Dir recht herzlich. Es funktioniert genauso wie es soll.
Wie gesagt, man lernt nie aus.

Danke

Grüße
Günther

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige