Änderungen verhindern, wenn sie Fehler verursachen
Hallo Helfer,
wir arbeiten hier häufiger mit umfangreichen Dateien, mit vielen Tabellenblättern. Diese Dateien sollen auch weiterhin in ihren Strukturen veränderbar sein, ein Blattschutz kommt daher nicht in Frage.
Wenn aber jemand in einer Tabelle z.B. Zellen löscht, kann es vorkommen, das an ganz anderer Stelle in der Datei ein Bezug zerstört wird, ohne das der
Bearbeiter das merkt. Lässt sich evtl. ein Makro erstellen, das permanent die Datei auf Fehlermeldungen überwacht? Die verursachende Aktion unterbindet und dann vielleicht auch noch dem Bearbeiter eine per Messagebox? eine Meldung anzeigt?
Wäre super wenn sich das realisieren ließe.
Vielen Dank im voraus.
mfg
Wolfgang
Antwort schreiben
Antwort 1 von JFE vom 30.07.2022, 13:21 Options
Hallo,
eine perfekte Lösung habe ich nicht aber vielleicht würde es helfen zu wissen
- Wie viele Bearbeiter gibt es?
- Gibt es einen "Supervisor"? - Dann ließe sich evtl. etwas über "Änderungen nachverfolgen" regeln.
- Ist es notwendig Zellen zu löschen oder würde es reichen die Inhalte zu löschen?
- Wäre es machbar, dass jeder Bearbeiter vor dem Speichern des Dokuments nach der Bearbeitung eine Fehlerüberprüfung (Excelfunktion unter "Formeln" in 2007) durchführt?
Makrotechnisch kann ich leider ansonsten nicht weiterhelfen.
Gruß
Folkert
Antwort 2 von malSchauen vom 30.07.2022, 22:10 Options
Hi,
Einmal ein erster Denkansatz meinerseits:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim varItem As Variant
Dim booError As Boolean
If Sh.UsedRange.Count > 1 Then
For Each varItem In Sh.UsedRange.Value2
If VarType(varItem) = vbError Then booError = True: Exit For
Next varItem
Else
If VarType(Sh.UsedRange.Value2) = vbError Then booError = True
End If
If booError Then
MsgBox "Fehler in der Mappe nach letzter Änderung" & vbCrLf & _
"Änderung wird rückgängig gemacht"
Application.Undo
End If
End Sub
Abgefangen werden alle Fehler, welche durch Handeingabe enstehen. Bitte Brauchbarkeitsstest erstmal an einer Testmappe durchführen. So ganz "nebenwirkungsfrei" ist das nicht unter allen Umständen. Und wie perfomant das bei wirklich grossen Mappen ist, habe ich auch nicht getestet. Schau halt mal...
bye
malSchauen
Antwort 3 von woher vom 03.08.2022, 18:08 Options
Hallo,
Entschuldige, das ich mich erst jetzt wieder melde, ich hatte mein Wochenende verlängert.
Vielen Dank für die Mühe.
Leider funktioniert das Makro nicht. Wenn Fehler "produziert" werden erscheint das Folgende:
Laufzeitfehler 1004
Die Methode Undo für das Objekt _Applikation ist fehlgeschlagen
Weiteres Problem: das Normale "Rückgängig" (Strg + Z) funkioniert nicht mehr. Das scheint mir immer so zu sein, wenn eine Datei Makros enthält, die auf Änderungen in der Datei reagieren.
Ich habe jetzt per Formeln eine optische Warnung eingebaut.
Auf einem seperaten Tabellenblatt, habe ich mehrfach die Funktion "ISTFEHLER" jeweils mit Bezug zu den Endergebnissen in den einzelnen Tabellenblättern. Mit Hilfe der Funktion "ODER" wird geprüft ob eine dieser Prüfungen "WAHR" ergibt. Per "bedingter Formatierung" wird dann in allen Tabellenblättern die Zeile 1 ROT.
mfg
Wolfgang
Antwort 4 von malSchauen vom 03.08.2022, 20:42 Options
Hi,
Wie in A2 bereits erwähnt, war es ein Denkansatz. Wenngleich dieser Denkansatz mit einer minimalistischen TestDatei von mir auch ein klein wenig getestet war. Diese Testdatei war aber wahrlich nur sehr einfach aufgebaut.
Ein paar Tabellen mit nur einer Formel in einigen/einer Zelle (eine Division durch den Wert einer anderen Zelle). Wenn ich nun mittels "Zelle/Zeile/Spalte löschen", "Zellinhalt löschen", oder das Eintragen einer "0" einen Fehler provozierte (#Bezug!, #Div/0!) sprang das Makro entsprechend an und konnte diese Änderungen rückgängig machen. Das war so mein Ansatz.
Zu .Undo:
1.Diese Methode kann keine von Makros hervorgerufenen Änderungen an der Mappe zurücknehmen. (Hierfür sind eigene "Sicherungen" zu programmieren.)
2. Wenn die Undo-Methode durchlaufen worden ist, ist die Liste der davorliegenden Änderungen leer. (Makro hat Mappe geändert. (siehe 1.))
3. Ein gelöschtes Tabellenblatt kann mit der Undo-Methode nicht wiederhergestellt werden.
(Soweit einmal das was a: die Hilfe, b: Infos aus dem Netz und c: meine kleinen Erfahrungen unter XL2010 so hergeben.)
Welcher der Gründe bei Dir nun hinderlich ist, kann ich nicht sagen, da ich Deine Datei nicht kenne. Man könnte einen Laufzeitfehler beim Undo zwar abfangen, und eine entsprechende MsgBox herausgeben, und so versuchen die Sache etwas zu verfeinern und abzusichern, aber wenn Du mit der Formellösung eine für Dich und Deine Anwender praktikable Lösung gefunden hast, dann passt es ja, und man kann sich den Aufwand auch gern sparen.
bye
malSchauen
Antwort 5 von nighty vom 05.08.2022, 06:58 Options
hi all :-)
erhaltung der datenstruktur ist auch ein komplexes unterfangen und erfordert ein wenig(besser ein wenig mehr) vb kenntnisse
gruss nighty