1.7k Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (926 Punkte)
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

5 Antworten

0 Punkte
Beantwortet von jfe Einsteiger_in (73 Punkte)
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
0 Punkte
Beantwortet von
Hi,

Einmal ein erster Denkansatz meinerseits:

[code]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
[/code]

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
0 Punkte
Beantwortet von Mitglied (926 Punkte)
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
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

erhaltung der datenstruktur ist auch ein komplexes unterfangen und erfordert ein wenig(besser ein wenig mehr) vb kenntnisse

gruss nighty
...