Hallo Detlef,
ich sehe das wie volti. Ein Deaktivieren der Schaltflächen ist nice to have aber nicht unbedingt nötig, da zu umständlich. Außerdem wäre dann immer noch der Weg Über Shortcut z.B. STRG+S oder F12 möglich, den du sicher auch deaktivieren willst. Einfacher ist es also das Speichern direkt abzufangen und nur zuzulassen, wenn es durch das Makro ausgelöst wurde. Dafür brauchst du einen Schalter "Makrosaving" den du erst bauen musst.
Angenommen dein Makro steht in Modul1 und sieht so aus:
Public MakroSaving As Boolean
Sub EchtesSpeichern()
MakroSaving = True
'Beispiel für dein Makro
ThisWorkbook.Save
MsgBox "Datei wurde gespeichert"
MakroSaving = False
End Sub
Dieses von dir geschriebene Makro löst du z.B. durch Klick auf einen Button im Arbeitsblatt aus. Dann musst du nur noch die Variable Makrosaving im BeforeSave Event abfragen. Dieser Code gehört in das Modul "DieseArbeitsmappe":
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If MakroSaving = False Then
Cancel = True
MsgBox "Das normale Speichern ist für diese Arbeitsmappe deaktiviert, bitte benutzen Sie " _
& "den Button ""Speichern"" im Arbeitsblatt", vbExclamation
End If
End Sub
Jetzt wird Speichern nur dann zugelassen wenn Makrosaving = true ist. Die Variable wird durch dein Makro auf True oder False gesetzt. Wichtig: Die Variable muss im Modulkopf (also vor der ersten Sub) als Public deklariert werden. Siehe Beispiel.
Gruß Mr. K.
|