3.3k Aufrufe
Gefragt in Tabellenkalkulation von rheym Einsteiger_in (91 Punkte)
Hallo,

ich würde gerne verhindern, dass ein bestimmtes Arbeitsblatt in welcher auch immer gearteten Form abgespeichert werden kann (auch nicht als Kopie von). Ich habe ein Makro gefunden, dass dies auch verhindert und das sieht so aus:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Saved = True
ThisWorkbook.Close
End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
End Sub

funktioniert auch toll aber wenn ich noch andere Arbeitsblätter geöffnet habe, speichert er die auch nicht ab. Liegt das vielleicht am Befehl "ActiveWorkbook"? Kann ich das auf eine bestimmte Datei begrenzen?

vielen Dank

Richard

5 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Richard,

man könnte die aktuelle Tabelle abfragen, aber das speichern kannst Du nicht verhindern.
z.B. Tabelle1 soll nicht gespeichert werden. Es werden Änderungen vorgenommen und dann auf Tabelle2 gewechselt und gespeichert, damit auch Tabelle1.
Warum soll nicht gespeichert werden? Vielleicht reicht schon Schutz?

Gruß Hajo
0 Punkte
Beantwortet von rheym Einsteiger_in (91 Punkte)
Hallo Hajo

sorry, ich habe immer Probleme mit den Definitionen. Ich meinte natürlich eine ganze Arbeitsmappe, die als Datei.xls gespeichert wird.
Ich hab die Eingaben von den Auswertungen getrennt. Das heisst, man kann in einer Arbeitsmappe alle erforderlichen Daten eingeben und abspeichern. Dann öffnet man eine Auswertungsdatei, die mit der Eingabedatei verknüpft wird und kann unterschiedliche Auswertungen durchführen. Die Auswertungsdatei soll aber weder gespeichert werden (das ginge mit Schreibschutz), noch sollen andere Benutzer eine Kopie abspeichern können, was sie aber andauernd tun, weil sie Angst haben, Daten zu verlieren. Dann ist mein ganzer Ordner mit "Kopie von... usw vollgemüllt und ich muss ständig aufräumen. Deshalb wollte ich das Abspeichern in der Auswertungsdatei verhindern, aber eben nur dort.

viele Grüße

Richard
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Richard,

Dein geposteter Code macht das doch?

ich hätte nur noch false ergänzt
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Saved = True
ThisWorkbook.Close false
End Sub

Gruß Hajo
0 Punkte
Beantwortet von
Hi,

Nur mal so zwischengefragt, ohne entsprechende Auswirkungen getestet zu haben: Wo steht dieser Code? Doch nicht etwa in der Personal.xls? Wenn Ja, dann gehört er dort sicher nicht hin.

Der Code gehört ins Project "Diese Arbeitsmappe" von eben der Datei, welche Du "schützen" möchtest, und würde bei mir nach einem kurzen Test aussehen wie folgt:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("Mappe wird nicht gespeichert!" & vbCrLf & _
"Mappe dennoch schliessen?", vbYesNo, "Rückfrage") _
= vbNo Then Cancel = True

ThisWorkbook.Saved = True
'ThisWorkbook.Close 'überflüssig, da das Schliessen der Mappe schon läuft
End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "Speichern nicht moeglich"
Cancel = True
End Sub


Wie zu sehen, würde ich als Anwender dabei gern benachrichtigt werden, gerade beim "BeforeSave". Das wird Dir als Entwickler auch helfen... Nicht, dass Du die Mappe ein, zwei Stunden weiterentwickelst, brav auf Speichern klickst (mit ausgeschaltetem Entwurfsmodus), und beim nächsten Öffnen stehst Du wieder am Anfang. ;-)
btw: Kopien auf Dateiebene (z.B. im Explorer) wirst Du aber so nicht verhindern können.

bye
malSchauen
0 Punkte
Beantwortet von rheym Einsteiger_in (91 Punkte)
Hallo Malschauen, Hallo Hajo,

das Problemmit dem ersten Makro war, dass wenn mehrere Arbeitsblätter offen waren nichts gespeichert wurde, ausserdem hat sich excel plötzlich andauernd aufgehängt.
das Makro von malschauen hat funktioniert. Ich habs in "diese Arbeitsmappe" gelegt unter "BeforeClose"

Tausend Dank!

Richard
...