ich möchte ab Zeile 2 die Zeilen von A bis L ausschneiden und
in die nächste freie Zeile im Tabellenblatt Archiv einfügen.
Leider bekomme ich es nicht via Makro hin, geht das eventuell
via VBA?
LG
Sascha
Sub KopiereInsArchiv()
With Sheets("Archiv")
ActiveSheet.Range("A2:L2").Cut
.Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1).PasteSpecial
End With
End Sub
Anmerkung: Ich bin mir ZIEMLICH sicher, dass der Code tatsächlich nicht das macht, was du WILLST. Allerdings macht er genau das, wonach du GEFRAGT hast. Ich habe mich wörtlich an deine Aufgabe gehalten, da ich mit "Zeilen statt Spalten" schon genug Gedankenleserei betreiben musste.
Sub KopiereInsArchiv()
Const CheckCol = 11 'Spalte K = 11
Dim lRow As Long
Dim lRowArchiv As Long
Dim r As Range
With Sheets("Archiv")
'freie Zeile in Archiv feststellen
lRowArchiv = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With
With Sheets("Tabelle1")
lRow = .Cells(.Rows.Count, CheckCol).End(xlUp).Row
For Each r In .Range(.Cells(2, CheckCol), .Cells(lRow, CheckCol))
If r.Value = "" Then
'wenn leer, dann nix!
Else
'Spalte A-L der aktuellen Zeile AUSSCHNEIDEN und ins Archiv einfügen
.Range(.Cells(r.Row, 1), .Cells(r.Row, 12)).Cut _
Sheets("Archiv").Range("A" & lRowArchiv & ":L" & lRowArchiv)
lRowArchiv = lRowArchiv + 1
End If
Next r
End With
End Sub
Eine Merkregel für Zeilen und Spalten, weil man sich schmutzige Sachen einfach merken kann:
Sub Daten_Ins_Archiv()
Dim rngCut As Range, NextRow&
On Error Resume Next
Set rngCut = Tabelle1.Columns("K:K").SpecialCells(xlCellTypeFormulas, 1)
On Error GoTo 0
If Not rngCut Is Nothing Then
Application.EnableEvents = False
Set rngCut = rngCut.EntireRow
If MsgBox("Sollen die Daten ins Archiv?", vbYesNo) = vbYes Then
With Sheets("Archiv")
NextRow = FindLetzteZeile(Sheets(.Name))
For Each rngCut In rngCut.Areas
NextRow = NextRow + 1
'Ausschneiden und einfügen
rngCut.Cut .Cells(NextRow, 1)
'oder kopieren und Format und Werte Übertragen
rngCut.Copy
.Cells(NextRow, 1).PasteSpecial xlPasteValuesAndNumberFormats
rngCut.ClearContents
Next rngCut
End With
End If
Application.EnableEvents = True
End If
End Sub
Function FindLetzteZeile(mySH As Worksheet) As Long
Dim LRow As Long
With mySH.UsedRange
On Error Resume Next
'Finde Zeile
LRow = .Find("*", , xlValues, xlWhole, xlByRows, xlPrevious, False, False).Row
LRow = Application.Max(LRow, .Find("*", , xlFormulas, xlWhole, xlByRows, xlPrevious).Row)
If LRow = 0 Then LRow = 1
End With
FindLetzteZeile = LRow
End Function
Gruß Tino