Ich baue eine ToDo-Liste und möchte durch ein BeforeDoubleClick-Makro mir einige Dinge erleichtern.
Meine Beispielmappe hat 4 Arbeitsblätter.
Jedes Arbeitsblatt besitzt eine Tabelle von Spalte A bis M mit Kopfzeile (in Zeile 1).
Arbeitsblatt A ist ein Übersichtsblatt
Die Zeilen aus Arbeitsblatt A werden auf Arbeitsblatt B, C und D verteilt.
Dies geschieht durch Doppelklick in Arbeitsblatt A auf eine Zelle in Spalte J.
Es wird durch eine If-Funktion geprüft, in welches Arbeitsblatt eingefügt werden soll. Die zugehörige Zeile wird kopiert, in das durch die If-Prüfung ausgewählte Arbeitsblatt B, C oder D am Ende der Tabelle eingefügt und aus Arbeitsblatt A gelöscht.
Das funktioniert mit folgendem Code auch ziemlich gut.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim lngZiel As Long
If Target.Column = 10 Then
If Target = "B" Then
Cancel = True
With Worksheets("B")
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count) + 1
Target.EntireRow.Copy .Cells(lngZiel, 1)
End With
Rows(Target.Row).Delete
ElseIf Target = "C" Then
Cancel = True
With Worksheets("C")
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count) + 1
Target.EntireRow.Copy .Cells(lngZiel, 1)
End With
Rows(Target.Row).Delete
ElseIf Target = "D" Then
Cancel = True
With Worksheets("D")
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count) + 1
Target.EntireRow.Copy .Cells(lngZiel, 1)
End With
Rows(Target.Row).Delete
End If
End If
End Sub
Leider wird die Tabelle in Arbeitsblatt B, C und D nicht durch eine Zeile erweitert. Dadurch ist die eingefügte Zeile nicht in der Tabelle inbegriffen.
Wie kann ich also die Zeile so einfügen, dass meine Tabelle die eingefügte Zeile umschließt?
(Der Code ist aus verschiedenen Foren-Einträgen zusammenkopiert und mit ein wenig kontextuellem Verständnis angepasst worden. Bin auch offen für Verbesserungsvorschäge)