4 Möglichkeiten, was geschehen kann, ...
12.03.2015 02:17:34
Luc:-?
…Werner;
die Zeile/Spalte bzw ein Bereich kann auf 1× in Gänze…
1. mit anderen Werten überschrieben (aufkopieren, Paste),
2. gelöscht (Werte bzw alle Inhalte entfernen, Clean),
3. eingefügt (auch einkopieren, Insert) oder…
4. entfernt (Delete) wdn.
Target.Address zeigt in diesen Fällen stets die Adresse des ganzen Bereichs. Falls es sich dabei um eine oder mehrere ganze Zeilen/Spalten handelt, kann sich an dieser Angabe letztlich auch nicht zweifelsfrei feststellen lassen, was nun wirklich passiert ist, denn im 4.Fall wird zwar tatsächlich die Adresse des entfernten Bereichs gezeigt, aber der wird ja sofort wieder durch Nachrücken gefüllt. Da das schon vor Auslösung des Ereignisses passiert, kann auf dieser Basis kaum eine umfassende Kontrolle aufgebaut wdn.
Die einzige Möglichkeit, das mit _Change zu erreichen, ist wohl das Festlegen eines definierten Namens für den ganzen zu überwachenden Bereich (hier naRelBer ⇐ Test) blatt- bzw mappenbezogen (hier Letzteres) und die Vorgabe einer AdressKonstanten (hier adRelBer) für diesen, mit der er einerseits stets wiederhergestellt und andererseits seine aktuelle Adresse mit dieser vgln wdn kann, denn die ändert sich beim Entfernen einer ganzen Zeile oder Spalte des überwachten Bereichs automatisch. Wenn der Nutzer dabei aber keine ganze BlattSpalte bzw -Zeile entfernt oder anderenfalls die vormarkierte EntfernungsOption nicht wählt, ändert sich die Adresse dieses Bereichs nicht und das entfernende Löschen kann auf diese Weise auch nicht festgestellt wdn (es sei denn, das HauptPgm merkt sich zumindest auch noch alle Inhalte dieses Bereichs)!
Private Sub Worksheet_Change(ByVal Target As Range)
Const adRelBer$ = "$A$11:$D$13", naRelBer$ = "Test"
Dim relBer As Range, aWb As Workbook
If Not Intersect(Target, Me.Range(adRelBer)) Is Nothing Then
Set relBer = Range(naRelBer): Set aWb = Me.Parent
If relBer.Address adRelBer Then
MsgBox "Bereich " & Target.Address(0, 0) & " wurde entfernt!", _
vbExclamation, "Entfernendes Löschen"
aWb.Names(naRelBer).RefersTo = "=" & adRelBer
End If
Set relBer = Nothing: Set aWb = Nothing
End If
End Sub
Als einzige qualifiziertere Möglichkeit bliebe wohl nur die Änderungsnachverfolgung (in freigegebenen Mappen), aber wie du da evtl mit VBA herankommst, musst du wohl selbst herausfinden. Das ist mir jetzt zu langwierig aufwendig…
Gruß, Luc :-?
Besser informiert mit …