Hallo Erich,
so müsste es gehen:
EDIT: CODE WAR DOPPELT EINGEFÜGT
Wenn die Zielzellen bis Spalte P gefüllt sind, erscheint eine Meldung und es wird nicht übertragen.
Wenn Du das nicht haben möchtest, dann folgende Zeilen im Code löschen:
oder Du ersetzt die Zeilen mit folgenden:
Dann wird der Zielbereich geleert und es wird wieder am Anfang eingefügt.
so müsste es gehen:
Code:
Sub übertragen()
Dim i As Long
Dim lngS As Long
Dim lngZ As Long
Dim lngA As Long
Dim feld
lngS = Application.Max(9, Cells(7, Columns.Count).End(xlToLeft).Column)
lngZ = Application.Max(7, Cells(Rows.Count, "C").End(xlUp).Row)
lngA = Application.CountIf(Range(Cells(7, "F"), Cells(lngZ, "F")), "x")
feld = Range(Cells(7, "C"), Cells(lngZ, "F"))
If lngS = 16 Then
MsgBox "Übertragfelder voll!"
Exit Sub
End If
If lngA > 0 Then
For i = 1 To lngZ - 6
If feld(i, 4) <> "x" Then
feld(i, 1) = 0
End If
Next i
Range(Cells(7, lngS + 1), Cells(lngZ, lngS + 1)) = feld
End If
End Sub
Wenn die Zielzellen bis Spalte P gefüllt sind, erscheint eine Meldung und es wird nicht übertragen.
Wenn Du das nicht haben möchtest, dann folgende Zeilen im Code löschen:
Code:
If lngS = 16 Then
MsgBox "Übertragfelder voll!"
Exit Sub
End If
Code:
If lngS = 16 Then
If MsgBox("Übertragfelder voll!" & vbLf & vbLf & "Soll der Bereich geleert werden, um wieder am Anfang einzufügen?", _
vbYesNo, "FRAGE") = vbYes Then
Range(Cells(7, 10), Cells(lngZ, lngS)).ClearContents
lngS = 9
Else
Exit Sub
End If
End If
Dann wird der Zielbereich geleert und es wird wieder am Anfang eingefügt.
Gruß Atilla