Vanuit knop in module 1: terug naar workbook open

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Beste mensen ik wil een macro hebben die als ik in mijn bestand de knop opslaan en afsluiten, eerst een msgbox geeft.

In deze msgbox krijg je de keuze. Afsluiten, Vergrendelen, Annuleren

Code:
Sub Afsluiten_Opslaan()
'Knop
     Select Case MsgBox("Wilt u het bestand Afsluiten of Vergrendelen?", vbYesNo + vbInformation)

        Case vbVergrendelen
            Call Workbook_Open
            ThisWorkbook.Saved = False

        Case vbAfsluiten
            ThisWorkbook.Saved = True
            Application.Quit

        Case vbAnnuleren
            Exit Sub
End Select

End Sub


Call workbook_open werkt alleen in ThisWorkbook en dan wel in Workbook.close en heb bovenstaand ook verder niet gecontroleerd. Werkt toch niet. Dat zie je zo al.

Om de gewenste knoppen te verkrijgen zal ik wel iets van 2 keer een defaultknop moeten hebben en 1 keer Cancel.. ofwel vbDefault1Default2Cancel.

Bij Cancel moet uit de sub komen en door kunnen gaan. Ik meen uit mijn hoofd dan: Exit Sub

Wie kan mij helpen.
 
Laatst bewerkt:
Het maken van het formulier lukt mij wel. Alleen het formulier zichtbaar maken op het moment van aanspreken en het weer weg laten vallen dat weet ik niet.

Zover ben ik nog niet.
 
Toch gelukt om een formulier te maken en het werkt.

Ik heb alleen 1 probleem die ik eerst opgelost wil hebben voordat ik hier het project plaats zodat jullie deze kunnen nalopen en eventueel kunnen bij schaven.

Met onderstaande macro's ondervind ik nog een probleem.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.DisplayFullScreen = False
    ActiveWindow.DisplayWorkbookTabs = True
    Application.Quit
    ThisWorkbook.Saved = True
End Sub

En met:

Code:
Private Sub Afsluiten_Click()
    
    Application.DisplayFullScreen = False
    ActiveWindow.DisplayWorkbookTabs = True
    Application.Quit
    ThisWorkbook.Saved = True
                
End Sub

Het probleem is dat het bestand voordat deze afsluit eerst alles moet opslaan en dan pas moet afsluiten. De vraag van Excel of ik de wijzigingen wil opslaan, wil ik niet hebben. Ik heb het vermoeden dat de code: ThisWorkbook.Saved = True, niet werkt in Exel 2007. Dit omdat het bestand wel wordt afgesloten, maar niet wordt opgeslagen.

Is er tevens een manier om het rode afsluitkruis rechtsboven in het scherm van excel te blokkeren via: ThisWorkbook.

Kunnen jullie mij hier helpen?
 
Laatst bewerkt:
Thisworkbook.saved moet voor application.quit natuurlijk. Bovendien voorkomt het inderdaad alleen de dialoog, maar saved niets.

Code:
thisworkbook.save

slaat wel de informatie eerst op
 
Oke Thisworkbook.save

Ga ik uitproberen.

Volgens mij werkt het.

Toch nog even 2 vragen.

ApplicationWorkbook.Close savechanges:=True (of False) Wat doet deze dan. Wat is hier het verschil in met Thisworkbook.save .

Als ik in ThisWorkbook het volgend stukje opneem.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.DisplayFullScreen = False
    ActiveWindow.DisplayWorkbookTabs = True
    ThisWorkbook.Save
    Application.Quit
    
End Sub

Volsta ik hier dan mee over het hele bestand. Dit omdat ik ook nog in andere stukjes of formulieren het laatste stukje heb opgenomen, maar bij bijvoorbeeld de knop: Einde hoeft het bestand deze niet op te slaan. Deze knop staat in het wachtwoordformulier zodra ik het bestand open. Einde aanklikken is gewoon bestand alsnog afbreken. Immers er is dan toch niets veranderd. Zodra ik op de knop Afsluiten en opslaan klik in het hoofdmenu, dan komt er eerst nog een extra forimulier. Deze vraagt dan of ik het bestand wil Vergrendelen of Afsluiten. Zodra ik klik: Afsluiten dan moet het de applicatie worden gestopt en het geheel worden opgeslagen.

Omdat er een stukje workbook before close is opgenomen, vraag ik mij af dit stukje sowieso wordt langsgelopen of dat je dit stukje overslaat met application.quit.

Voor de zekerheid plaasts ik die stukjes code nog even. Dan kun je misschien makkelijker zien wat k bedoel.

In formulier Afsluiten:

Code:
Private Sub UserForm_Click()

End Sub
Private Sub Afsluiten_Click()
    
    Application.DisplayFullScreen = False
    ActiveWindow.DisplayWorkbookTabs = True
    ThisWorkbook.Save
    Application.Quit
 
                
End Sub

Private Sub Vergrendelen_Click()
    Unload frm_Afsluiten
    frm_Wachtwoord.Show

End Sub

Private Sub Annuleren_Click()
    Unload frm_Afsluiten

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then Cancel = True
    
End Sub

Voor formulier wachtwoord:

Voor de knop Einde

Code:
Private Sub Einde_Click()
'Knop
    ThisWorkbook.Saved = True
    Application.Quit
End Sub

en het laatste gedeelte van het formulier: Wachtwoord voor als het wachtwoord 3 keer verkeerd is ingevoerd:

Code:
     Application.DisplayFullScreen = False
            ActiveWindow.DisplayWorkbookTabs = True
            ThisWorkbook.Saved = True
            Application.Quit
        Else
 
Laatst bewerkt:
Je hebt meerdere niveau's. "Application" is excel zelf. workbook is een specifieke file die open is. Alles wat je loslaat op workbook is dus voor een bepaalde file.

Code:
Workbook.Close savechanges:=True
slaat inderdaad eerst op en sluit daarna af. workbook.save slaat op maar kun je eventueel nog verder werken. In principe kun je met deze ene statement beide gevallen afhandelen
 
Het is voor mij de bedoeling dat alles gewoon met 1 druk op de knop Afsluiten in het formulier: Afsluiten, het volledig bestand wordt opgeslagen en Excel 2007 wordt afgesloten.

Bij Einde of annuleren hoeft er niets te worden opgeslagen. Annuleren spreekt voor zich. Einde is gewoon Einde zonder opslaan. Deze knop in het formulier wachtwoord is zeg maar om het bestand direct te kunnen opslaan. Anders als je het per ongeluk opent, dan moet je eerst het wachtwoord etc uitvoeren om af te kunnen sluiten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan