Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Zeile nach Aktion in ein anderes Blatt verschieben

Forumthread: Zeile nach Aktion in ein anderes Blatt verschieben

Zeile nach Aktion in ein anderes Blatt verschieben
10.03.2025 15:34:08
VBA_NixChecker
Hallo zusammen,

ich habe folgendes Problem - vor Jahren habe ich eine Excel mit Makros erstellt, diese wollte ich unter O365 anpassen.
Das klappt leider nicht wie gewünscht.

In Blatt "Angemeldet" werden zur Abholung angemeldete Aufträge erfasst.
Nach der Eintragung "Abgeholt" in Spalte F soll die Zeile in das Blatt "Abgeholt" in die nächste freie Zeile (ab Zeile 4) verschoben werden.

Mein Makro verschiebt die Zeile aber immer nur in Zeile 2.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Row > 3 Then
If Target.Value = "Abgeholt" Then
Target.EntireRow.Copy Worksheets("Abgeholt").Cells(Rows.Count, 8).End(xlUp).Offset(1, -7)
Target.EntireRow.Delete
End If
End If
End If
End Sub

Kann mir hier jemand weiterhelfen?

Danke!

Grüße Bea
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile nach Aktion in ein anderes Blatt verschieben
10.03.2025 16:39:50
Onur
Es gibt keinen Grund, ein Makro für Excel365 anzupassen. Es läuft genauso, wie es vorher glaufen ist (oder nicht gelaufen ist).
Target.EntireRow.Copy Worksheets("Abgeholt").Cells(Rows.Count, 8).End(xlUp).Offset(1, -7) ist falsch, denn letzte Zeile muss lauten
Worksheets("Abgeholt").Cells(Worksheets("Abgeholt").Rows.Count, 8).End(xlUp)
Anzeige
AW: Zeile nach Aktion in ein anderes Blatt verschieben
11.03.2025 08:40:45
VBA_NixChecker
Hallo Onur,
im kopierten Excel funktioniert das Makro ohne Probleme - es wird immer die nächste freie Zeile gesucht und die "abgeholte" Zeile unten dran eingefügt.
Daher wollte ich das übernehmen und nur die Spalten anpassen.
Da es in der Vorgänger-Excel erstellt wurde, dachte ich, dass es ggf. mit dem Excel-Versionswechsel kollidieren könnte und habe mit meinen VBA-Kenntnissen versucht, den Fehler zu finden - leider ohne Erfolg :-(
Der Vorschlag von dir, die letzte Zeile zu tauschen, bringt folgende Fehlermeldung:
Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.

Grüße Bea
Anzeige
AW: Zeile nach Aktion in ein anderes Blatt verschieben
10.03.2025 20:23:43
Yal
Hallo Bea,

Diese Zeile
Target.EntireRow.Copy Worksheets("Abgeholt").Cells(Rows.Count, 8).End(xlUp).Offset(1, -7)
bedeutet in seine rechte Seite, dass in der 8te Spalte ("H") die letzte befüllte Zelle gesucht wird. Wenn diese Spalte leer ist, dann wird in A2 kopiert.

Alternativ 1: Du suchst welche Spalte immer befüllt ist.
Alternativ 2: Du prüfst alle Spalten nach dem letzten Eintrag

Alternativ 2 würde so aussehen:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim C As Range
Dim M As Long
Set Target = Target.Cells(1) 'immer nur die erste Zelle bestrachten
If Target.Value = "Abgeholt" Then
With Worksheets("Abgeholt")
For Each C In .UsedRange.Columns
M = Application.Max(M, C.Cells(Rows.Count).End(xlUp))
Next
Target.EntireRow.Copy .Cells(M + 1, 1)
Target.EntireRow.Delete
End If
End Sub


Zur Erklärung von Onurs Beanstandung:
Worksheets("Abgeholt").Cells(Worksheets("Abgeholt").Rows.Count, 8).End(xlUp)
ja, im Prinzip richtig. Aber mit Rows.Count holt man nur den Zeilennummer der letzten Zeile auf dem Blatt. Also 1048576 in Excel 365. Es ist egal auf welchem Blatt diese Zahl ermittelt wird. 99999 würde in 99,99% der Fälle genügen. Man könnte dann Range("A99999").End(xlUp) schreiben.

VG
Yal
Anzeige
AW: Zeile nach Aktion in ein anderes Blatt verschieben
11.03.2025 08:35:41
VBA_NixChecker
Hallo Yal,

danke - ich habe das ins Excel übernommen und versucht - aber es kommt die Fehler-Meldung: Fehler beim Kompilieren: End If ohne If-Block.

Was passt noch nicht?

Danke!

Grüße Bea


AW: Zeile nach Aktion in ein anderes Blatt verschieben
11.03.2025 09:11:16
hary
Moin
Der Yal hatte end with vergessen.
Private Sub Worksheet_Change(ByVal Target As Range)

Dim C As Range
Dim M As Long
Set Target = Target.Cells(1) 'immer nur die erste Zelle bestrachten
If Target.Value = "Abgeholt" Then
With Worksheets("Abgeholt")
For Each C In .UsedRange.Columns
M = Application.Max(4, C.Cells(Rows.Count).End(xlUp).Row)'---die 4 geaendert und Row zugesetzt
Next
Target.EntireRow.Copy .Cells(M + 1, 1)
Target.EntireRow.Delete
End With
End If
End Sub


Du kannst auch Probieren:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim C As Range
Dim M As Long
Set Target = Target.Cells(1) 'immer nur die erste Zelle bestrachten
If Target.Value = "Abgeholt" Then
With Worksheets("Abgeholt")
M = Application.Max(4, .Cells(Rows.Count, 6).End(xlUp).Row)
Target.EntireRow.Copy .Cells(M + 1, 1)
Target.EntireRow.Delete
End With
End If
End Sub

gruss hary
Anzeige
AW: Zeile nach Aktion in ein anderes Blatt verschieben
11.03.2025 09:42:22
VBA_NixChecker
Hallo Harry,

die erste Version überschreibt immer die Zeile, das klappt leider nicht.
Bei der zweiten Version von dir funktioniert es super - genau so hatte ich mir das gedacht - vielen Dank!!!

Grüße Bea

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige