VBA, Excel 2007, Bestand alleen via CMD-button opslaan

Status
Niet open voor verdere reacties.

jackfish

Gebruiker
Lid geworden
10 sep 2010
Berichten
297
Ik wil graag dat een Excel-bestand alleen via een CMD-button (die op het werkblad staat) opgeslagen kan worden. Via onderstaande code kan ik wel voorkomen dat 'Opslaan Als' wordt gebruikt maar gewoon Opslaan gaat dan nog wel.

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI = True Then
        Cancel = True
        MsgBox "Zo kunt u de tijdsregistratie niet opslaan. Gebruik de knop op het werkblad.", vbCritical
    End If
End Sub

Op welke manier werkt het ook voor Opslaan?
 
Zorg ervoor dat die knop een globale boolean variabele op True zet. In de functie hierboven controleer je dan of die variable True is. Zoniet dan geef je die melding en ga je terug zoals het nu wordt gedaan met Cancel = True. Zoja, dan zet je die waarde weer op False en sla je het document op.

Zoiets:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI = True Or SavedByButton = True Then
        Cancel = True
        MsgBox "Zo kunt u de tijdsregistratie niet opslaan. Gebruik de knop op het werkblad.", vbCritical
    End If
    SavedByButton = False
End Sub

Die SavedByButton is dan een globale variabele van het type Boolean.
 
Laatst bewerkt:
Zou dit niet genoeg zijn?
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 MsgBox "Ppslaan werkt niet"
 Cancel = True
End Sub
 
Nee, want zo kun je nooit het document opslaan.
 
Weet ik ;), maar met jouw variabele erin zonder 'SaveAsUI' ?
 
Dat kan inderdaad wel.
 
Ik doe nog iets niet goed denk ik omdat de uitkomsten gek genoeg wisselend zijn.

Wanneer ik eerst de SaveAs-knop indruk krijg ik de messagebox. Dat geldt daarna ook als ik daaropvolgend de Save-knop gebruik. Wanneer ik het bestand opstart en direct op de Save-knop druk, slaat het bestand zichzelf op en geeft het geen messagebox. Zojuist kreeg ik ook een messagebox toen ik de knop op het werkblad indrukte.

Misschien knullig, maar hoe zorg ik er correct voor dat de knop op het werkblad een globale boolean variabele op True zet. Nu heb ik:

Code:
Option Explicit
Public SavedByButton As Boolean

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI = True Or SavedByButton = True Then
        Cancel = True
        MsgBox "Zo kunt u de tijdsregistratie niet opslaan. Gebruik de knop op het werkblad.", vbCritical
    End If
    SavedByButton = False
End Sub
 
Dit moet in een module:
Public SavedByButton As Boolean

Maak de functie maar zo:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not SavedByButton Then
        Cancel = True
        MsgBox "Zo kunt u de tijdsregistratie niet opslaan. Gebruik de knop op het werkblad.", vbCritical
    End If
    SavedByButton = False
End Sub

En uiteraard dit in de knop waar de Save opdracht in staat:
SavedByButton = True
 
Laatst bewerkt:
You're welcome :D
 
Als je toch een opslaanknop hebt zou ik die gewoon aktiveren als het bestand wordt gesloten.
Ik zou me er niet druk over maken of de gebruiker hem nog ergens anders opslaat, als ie uiteindelijk ook maar opgeslagen wordt conform de code in de 'opslaan' knop.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheet1.knopslaan = True
End Sub
 

Bijlagen

  • __knopslaan.xlsb
    15 KB · Weergaven: 49
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan