PDA

Vollständige Version anzeigen : Speichern-Schaltfläche deaktivieren


Patri
06.05.2009, 09:40
Hallo!

Ist es eigentlich möglich in Excel den Speichern Button, also den mit der Diskette, zu deaktivieren???
Ich möchte den nämlich, wenn eine bestimmte Mappe offen ist, deaktivieren, damit man nicht versehentlich speichert!

Gruß Patri

hary
06.05.2009, 09:48
Hi Patri
Ins Workbook open
<pre>
Application.CommandBars("Worksheet Menu Bar").Controls("Datei").Controls("Speichern").Enabled = False
</pre>
nicht vergessen beim schliessen wieder auf True setzen
Gruss Hary

IngGi
06.05.2009, 09:54
Hallo zusammen,

oder auch so:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Workbook_BeforeSave(<span class="TOKEN">ByVal</span> SaveAsUI <span class="TOKEN">As</span> Boolean, Cancel <span class="TOKEN">As</span> <span class="TOKEN">Boolean</span>)
Cancel = <span class="TOKEN">True</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Vorteil: Auch Speichern mit Ctrl+C ist nicht mehr möglich.
Nachteil: Auch Speichern unter anderem Namen ist nicht mehr möglich.

Gruß Ingolf

NoNet
06.05.2009, 10:27
Hallo Patri,

nur das Diskettensymbol zu "sperren" genügt ja wohl nicht, denn es gibt ja noch zahlreiche andere "Speicherbefehle" ! Sollen die auch gesperrt werden ?

Z.B. mit folgendem Code, der die Standard-Speichern-Möglichkeiten sperrt :
Sub SpeichernButtonsSperren()
'06.05.2009, NoNet
Dim btnSave As CommandBarControl

'Symbol "Speichern" sperren :
Set btnSave = Application.CommandBars.FindControl(ID:=3)
If Not btnSave Is Nothing Then btnSave.Enabled = False

'Menü "Datei - Speichern" sperren :
Set btnSave = Application.CommandBars.ActiveMenuBar.FindControl(ID:=3, recursive:=True)
If Not btnSave Is Nothing Then btnSave.Enabled = False

'Menü "Datei - Speichern unter..." sperren :
Set btnSave = Application.CommandBars.ActiveMenuBar.FindControl(ID:=748, recursive:=True)
If Not btnSave Is Nothing Then btnSave.Enabled = False

Application.OnKey "^s", "" 'Sperrt Strg+S
Application.OnKey "{F12}", "" 'Sperrt F12-Taste
End Sub
Mit diesem Code werden diese Möglichkeiten wieder aktiviert :
Sub SpeichernButtonsAktivieren()
'06.05.2009, NoNet
Dim btnSave As CommandBarControl

'Symbol "Speichern" entsperren :
Set btnSave = Application.CommandBars.FindControl(ID:=3)
If Not btnSave Is Nothing Then btnSave.Enabled = True

'Menü "Datei - Speichern" entsperren :
Set btnSave = Application.CommandBars.ActiveMenuBar.FindControl(ID:=3, recursive:=True)
If Not btnSave Is Nothing Then btnSave.Enabled = True

'Menü "Datei - Speichern unter..." entsperren :
Set btnSave = Application.CommandBars.ActiveMenuBar.FindControl(ID:=748, recursive:=True)
If Not btnSave Is Nothing Then btnSave.Enabled = True

Application.OnKey "^s" 'Entsperrt Strg+S
Application.OnKey "{F12}" 'Entsperrt F12-Taste
End Sub

Praktikabler ist es jedoch, auf das Speichern an sich zu reagieren und nicht die einzelnen Buttons zu sperren :

Diesen Code in das Klassenmodul "DieseArbeitsmappe" kopieren :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Speichern nur möglich, wenn Variable zuvor auf TRUE gesetzt wurde :
If Not blnEigenerSave Then Cancel = True
End Sub

Diesen Code in ein allgemeines Modul (z.B. "Modul1") kopieren :
Public blnEigenerSave As Boolean

Sub EigenesSpeichernMakro()
'Speichern der Mappe ist nur mit diesem Makro möglich !

'Tu dies
'und das

'setze die Variable auf TRUE :
blnEigenerSave = True

'und speichere die Mappe dann :
ActiveWorkbook.Save

'und setze die Variable danach wieder auf FALSE :
blnEigenerSave = False
End Sub

Patri
06.05.2009, 10:30
Supi, danke!
Funktioniert!

carleh
06.12.2010, 17:47
Hi Zusammen

Ich bin auf der Lösungssuche des gleichen Problems und möchte alles speichern sperren ausser mein Makro.

Nur funktioniert der Code bei mir nicht.
Frage 1: Ist der code für excel 2007?
Frage 2: In dem Beispielcode wird mit ID's gearbeitet, Beispiel: ID:=748. Könnte es sein, dass die ID's bei mir andere sind? Wie kann man die ID für einen button herausfinden.

Besten Dank im Voraus für hilfreiche Antworten ;-)

IngGi
06.12.2010, 22:28
Hallo carleh,

nimm einfach die beiden letzten Makros aus NoNets Beitrag, die taugen auch für Excel2007. Das mit den CommandButtons ist ab Excel2007 komplett anders geregelt. Also alles, was in NoNets Beitrag nach "Praktikabler ist es jedoch, ..." kommt.

Gruß Ingolf

mumpel
07.12.2010, 10:14
Hallo!


Ist der code für excel 2007?


In Excel 2007 und 2010 musst Du die Schaltflächen per RibbonX sperren. In Excel 2010 wird dabei sogar der Speichern-Befehl direkt gesperrt, Du müsstest dann die Tastenkombination nicht mehr extra umlenken. Allerdings funktioniert das nur in den neuen Dateiformaten(xlsx, xlsm etc.). Im Excel 97-2003-Format (xls, xla etc.) funktioniert das nicht, da in den alten Dateiformaten kein XML-Code gespeichert werden kann.


Programmiert wird per RibbonX mit Hilfe des CustomUI-Editors. Allerdings musst Du zweimal programmieren (es müssen dann zwei RibbonX-Anpassungsdateien in der Datei gespeichert werden), da das Officemenü in 2007 und das Backstage-View in 2010 unterschiedlich programmiert werden. Einen Link zu meinem RibbonX-Tutorial darf ich an dieser Stelle leider nicht setzen.

Gruß, René