ich habe einen Code geschrieben der wunderbar funktioniert, aber auch extrem gefährlich werden kann und ich brauche eure Hilfe, diesen so zu optimieren, dass kein Risiko von Datenverlust entsteht.
Ich habe eine Arbeitsmappe mit 2 Blättern. Viele Einträge müssen auf beiden stehen und wenn Daten auf dem 1. Blatt verändert werden oder eingetragen, sollen sie im 2. Blatt automatisch aktualisiert werden. Mein Code überprüft quasi meine Spalte A auf Tabellenblatt 1 und wenn in Tabellenblatt 2 in Spalte C derselbe Eintrag steht, überträgt er mir einige Zellen von Tabellenblatt 1 auf 2 auf. Ich habe folgenden Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not (Intersect(Target, Range("C40:C400")) Is Nothing) Then 'Wenn Spalte C aktiviert dann
Dim A As Long
With Sheets("Tabelle1")
For A = .Cells(65536, 1).End(xlUp).Row To 1 Step -1
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 4).Value = .Cells(A, 3)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 5).Value = .Cells(A, 7)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 6).Value = .Cells(A, 9)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 8).Value = .Cells(A, 66)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 9).Value = .Cells(A, 65)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 10).Value = .Cells(A, 71)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 11).Value = .Cells(A, 70)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 12).Value = .Cells(A, 67)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 13).Value = .Cells(A, 68)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 14).Value = .Cells(A, 74)
If .Cells(A, 1).Value = Worksheets("Tabelle2").Cells(ActiveCell.Row, 3) Then Worksheets("Tabelle2").Cells(ActiveCell.Row, 15).Value = .Cells(A, 69)
Next A
End With
End If
End Sub
Mein Problem ist nun, dass dieser Code sich auf feste Spalten bezieht. Sollte ein Mitarbeiter irgendwo eine Spalte einfügen, merkt der Code das nicht und überschreibt plötzlich falsche Daten. Im normalen Excel setzt man das ja mit $-Zeichen um, wie könnte ich das hier in meinen VBA Code integrieren? Ich habe versucht mit dem Namensmanager zu arbeiten und anstelle der Spalten versucht Namen anzusprechen, das habe ich leider nicht zum Funktionieren bekommen.Ich bin über jede Hilfe dankbar!
Viele Grüße, Andre