Supportnet / Forum / Tabellenkalkulation
Zeile kopieren und anschließend löschen
Frage
Hallo,
ich habe ein Poblem in einem Aktionsplan der Instandhaltungsarbeiten verwalten soll.
Wenn in der Spalte H in einer beliebigen Zeile
"Erl" eingetragen wird, kopiert sich die gesamte Zeile
in ein neues Tabellenblatt, in diesem Fall mit Namen Erledigt
der Code dazu sieht so aus und funktioniert auch.
*****
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RaBereich As Range, RaZelle As Range
Dim LoLetzte As Long
Set RaBereich = Range("H:H")
For Each RaZelle In Range(Target.Address)
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
If RaZelle = "erl" Then
With Worksheets("Erledigt")
LoLetzte = .UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & RaZelle.Row & ":J" & RaZelle.Row).Copy .Cells(LoLetzte, 1)
End With
End If
End If
Next RaZelle
Set RaBereich = Nothing
End Sub
***
ich möchte aber erreichen, dass sich die Zeile auch automatisch aus der Ursprungstabelle löscht.
hat jemand einen Tipp für mich ??
Antwort 1 von Beverly
Hi,
versuche es mit diesem Code
Bis später,
Karin
versuche es mit diesem Code
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LoLetzte As Long
If Target.Column <> 8 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target = "Erledigt" Then
LoLetzte = Worksheets("Erledigt").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Erledigt").Cells(LoLetzte, 1)
Target.EntireRow.Delete
End If
End Sub
Bis später,
Karin
Antwort 2 von fedjo
Hallo opurnaut ,
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RaBereich As Range, RaZelle As Range
Dim LoLetzte As Long
Set RaBereich = Range("H:H")
For Each RaZelle In Range(Target.Address)
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
If RaZelle = "erl" Then
With Worksheets("Erledigt")
Selection.Delete Shift:=xlUp
LoLetzte = .UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & RaZelle.Row & ":J" & RaZelle.Row).Copy .Cells(LoLetzte, 1)
Target.EntireRow.Delete
End With
End If
End If
Next RaZelle
Set RaBereich = Nothing
End Sub
Gruß
fedjo
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RaBereich As Range, RaZelle As Range
Dim LoLetzte As Long
Set RaBereich = Range("H:H")
For Each RaZelle In Range(Target.Address)
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
If RaZelle = "erl" Then
With Worksheets("Erledigt")
Selection.Delete Shift:=xlUp
LoLetzte = .UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & RaZelle.Row & ":J" & RaZelle.Row).Copy .Cells(LoLetzte, 1)
Target.EntireRow.Delete
End With
End If
End If
Next RaZelle
Set RaBereich = Nothing
End Sub
Gruß
fedjo
Antwort 3 von Beverly
Hi Fedlo,
im Worksheet_Change Ereignis hast du den Vorteil, dass Target als Range dimensioniert ist und somit die Eingabezelle direkt angesprochen werden kann, genau wie du es mit der Suchvariablen RaZelle machst, nur mit dem Unterschied, dass sie nicht erst gesucht werden muss.
Bis später,
Karin
im Worksheet_Change Ereignis hast du den Vorteil, dass Target als Range dimensioniert ist und somit die Eingabezelle direkt angesprochen werden kann, genau wie du es mit der Suchvariablen RaZelle machst, nur mit dem Unterschied, dass sie nicht erst gesucht werden muss.
Bis später,
Karin
Antwort 4 von Opurnaut
das hat super funktioniert
vielen Dank !!
ich hab allerdings noch eine Frage
wie müsste der Code aussehen wenn nicht nur
eine Variable " Erledigt " gesucht und verschoben werden soll, sondern z.B. vier verschiedene
( Müller, Meier, Schulz,Frank)
in gleichnahmige Tabellenblätter verschoben werden sollten.
???
vorab schonmal Danke an die Pros ;-)
vielen Dank !!
ich hab allerdings noch eine Frage
wie müsste der Code aussehen wenn nicht nur
eine Variable " Erledigt " gesucht und verschoben werden soll, sondern z.B. vier verschiedene
( Müller, Meier, Schulz,Frank)
in gleichnahmige Tabellenblätter verschoben werden sollten.
???
vorab schonmal Danke an die Pros ;-)
Antwort 5 von Beverly
Hi,
deine Fragestellung ist nicht ganz klar. Ich nehme jedoch an, dass in Spalte H "erl" eingetragen werden soll und in Abhängigkeit davon, welcher Name in einer anderen Spalte steht, soll die Zeile in die entsprechende Tabelle verschoben werden. Ich weiß leider nicht, wo diese Namen stehen und bin deshalb einfach mal davon ausgegangen, dass sie in Spalte A stehen
Bis später,
Karin
deine Fragestellung ist nicht ganz klar. Ich nehme jedoch an, dass in Spalte H "erl" eingetragen werden soll und in Abhängigkeit davon, welcher Name in einer anderen Spalte steht, soll die Zeile in die entsprechende Tabelle verschoben werden. Ich weiß leider nicht, wo diese Namen stehen und bin deshalb einfach mal davon ausgegangen, dass sie in Spalte A stehen
Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLetzte As Long
If Target.Column <> 8 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target = "erl" Then
Select Case Target.Offset(0, -7)
Case "Müller"
loLetzte = Worksheets("Müller").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Müller").Cells(loLetzte, 1)
Target.EntireRow.Delete
Case "Meier"
loLetzte = Worksheets("Meier").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Meier").Cells(loLetzte, 1)
Target.EntireRow.Delete
Case "Schulz"
loLetzte = Worksheets("Schulz").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Schulz").Cells(loLetzte, 1)
Target.EntireRow.Delete
Case "Frank"
loLetzte = Worksheets("Frank").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Frank").Cells(loLetzte, 1)
Target.EntireRow.Delete
End Select
End If
End Sub
Bis später,
Karin
Antwort 6 von opurnaut
Hi,
Danke für die schnelle Antwort,
Es ist eigentlich etwas einfacher
ich benötige keine abhängigkeit von der Spalte H
ich möchte einfach in Zeile F einen von vier verschiedenen Namen eingeben können und darauf soll sich die komplette Zeile in ein gleichnahmiges
Tabellenblatt verschieben.
Thx nochmal fürs helfen..
Danke für die schnelle Antwort,
Es ist eigentlich etwas einfacher
ich benötige keine abhängigkeit von der Spalte H
ich möchte einfach in Zeile F einen von vier verschiedenen Namen eingeben können und darauf soll sich die komplette Zeile in ein gleichnahmiges
Tabellenblatt verschieben.
Thx nochmal fürs helfen..
Antwort 7 von Beverly
Hi,
wenn in Spalte H "Erledigt" eingetragen wird, wird der Bereich A:J in die Tabelle "Erledigt" verschoben, wenn in Spalte F die Namen eingetragen werden, wird der Bereich A:J in die Tabelle des entsprechenden Namen verschoben. Die Zeilen in der Ausgangstabelle werden jeweils gelöscht
Bis später,
Karin
wenn in Spalte H "Erledigt" eingetragen wird, wird der Bereich A:J in die Tabelle "Erledigt" verschoben, wenn in Spalte F die Namen eingetragen werden, wird der Bereich A:J in die Tabelle des entsprechenden Namen verschoben. Die Zeilen in der Ausgangstabelle werden jeweils gelöscht
Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLetzte As Long
If Target.Column <> 8 Or Target.Column <> 6 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Column = 6 Then
Select Case Target
Case "Müller"
loLetzte = Worksheets("Müller").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Müller").Cells(loLetzte, 1)
Target.EntireRow.Delete
Case "Meier"
loLetzte = Worksheets("Meier").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Meier").Cells(loLetzte, 1)
Target.EntireRow.Delete
Case "Schulz"
loLetzte = Worksheets("Schulz").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Schulz").Cells(loLetzte, 1)
Target.EntireRow.Delete
Case "Frank"
loLetzte = Worksheets("Frank").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Frank").Cells(loLetzte, 1)
Target.EntireRow.Delete
End Select
Else
If Target = "Erledigt" Then
loLetzte = Worksheets("Erledigt").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Range("A" & Target.Row & ":J" & Target.Row).Copy Worksheets("Erledigt").Cells(loLetzte, 1)
Target.EntireRow.Delete
End If
End If
End SubBis später,
Karin

