• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

beveiliginswaarschuwing

Status
Niet open voor verdere reacties.

westra77

Gebruiker
Lid geworden
2 mrt 2007
Berichten
149
hallo

Onderstaande code laat alleen blad 2 en 3 zien als wordt gekozen voor macro's inschakelen.
indien wordt gekozen voor macro's uitschakelen wordt blad 1 weergegeven met een beveilingswaarschuwing. (zie bestand)
dit werkt juist, echter indien de gebruiker kiest voor bestand>sluiten dan volgt het scherm "wilt u de wijzigingen opslaan" ja, nee, annuleren.

blad 1 wordt dan zichtbaar, dit wil ik juist niet
indien de gebruiker kiest voor annuleren dan blijft enkel blad 1 geopend en kan de gerbuiker niet verder werken in blad 2 en 3
blad moet dus alleen zichtbaar worden indien macro's worden uitgeschakeld. Indien de macro's worden ingeschakeld moet de gebruiker blad 1 onder geen beding meer zien.
wie kan mij helpen?




Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
Blad3.Visible = xlSheetVisible
  Blad3.Activate
  HideAll


  End Sub
  
Private Sub Workbook_Open()
ActiveWindow.DisplayWorkbookTabs = False
    
    UnHideAll
    Blad1.Activate
      
  Blad3.Visible = xlSheetHidden
   
    
End Sub

    
  
  

Private Sub HideAll()
    'Blad3.Visible = xlSheetVisible
    Blad2.Visible = xlSheetHidden
    Blad1.Visible = xlSheetHidden
    
       
       
    
End Sub
Private Sub UnHideAll()
    
    'Blad3.Visible = xlSheetHidden
    Blad1.Visible = xlSheetVisible
    Blad2.Visible = xlSheetVisible
    
         
 
    
End Sub
 

Bijlagen

  • vb helpmij beveiliging.zip
    54 KB · Weergaven: 23
Excel ziet het verbergen en tonen van werkbladen terecht als een verandering.
Je voorkomt een melding door direct daarna het werkboek op te slaan.
De bewuste pagina blijft dan slechts kort in beeld.
zie voorbeeld
mvg leo
 

Bijlagen

  • Kopie van vb helpmij beveiliging.zip
    54,4 KB · Weergaven: 16
Tja, dit is een beetje het 'kip en het ei' verhaal... De gebruiker die dus bij het openen géén macro's accepteert, kan dus via de standaard functionaliteit in 'sluiten' je beveiliging omzeilen. Dan kan je er dus ook niet naderhand voor zorgen dat de code iets voor je gaat doen want die staat immers uitgeschakeld. Gevalletje 'helaas pindakaas' en terug naar de tekentafel.

Groet, Leo
 
Code:
De gebruiker die dus bij het openen géén macro's accepteert

Die ziet alleen de melding op blad1, kan verder niets en sluit het bestand weer.
Je hebt de macro's nodig om wat te kunnen met het werkboek.
Precies de bedoeling toch? (liefst dat hij dan de melding nog leest en uitvoert ook, maar je kunt niet alles hebben)
 
bij onderstaande code gebeuren nog steeds twee vreemde dingen!?:confused:
bij de keuze macro's niet inschakelen wordt blad 3 weergegeven, echter ook de bladtabs van blad 1 en 2. de bedoeling is dat blad 3 alleen zichtbaar wordt.
Indien macro's worden ingeschakeld worden alleen blad 1 en 2 weergegeven dit is wel juist. Als het werkblad word afgesloten verschijnt de messagebox. Indien er wordt gekozen voor; nee of annuleren werkt de macro juist. Indien er wordt gekozen voor "ja" dan verschijnt de messagebox nogmaals. Dit is niet nodig. Hoe kan ik deze twee problemen oplossen.
Alvast bedankt:thumb:


Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

     Dim Save As Boolean
     Application.ScreenUpdating = False

    Save = True
    
    If ThisWorkbook.Saved = False Then
        a = MsgBox("Wilt u de wijzigingen opslaan?", vbYesNoCancel, "gegevens opslaan?")
        If a = vbCancel Then Cancel = True
        If a = vbNo Then Save = False
    End If
    
    If Save = False Then
        ThisWorkbook.Saved = True
    End If
    
    If Cancel = False And Save = True Then
Blad3.Visible = xlSheetVisible
  Blad3.Visible = True
  HideAll
    ActiveWorkbook.Close Savechanges:=False
End If
  End Sub
  
Private Sub Workbook_Open()

    
    UnHideAll
    Blad1.Activate
      
  Blad3.Visible = xlSheetHidden
   
    
End Sub

    
  
  

Private Sub HideAll()
    'Blad3.Visible = xlSheetVisible
    Blad2.Visible = xlSheetHidden
    Blad1.Visible = xlSheetHidden
    
       
       
    
End Sub
Private Sub UnHideAll()
    
    'Blad3.Visible = xlSheetHidden
    Blad1.Visible = xlSheetVisible
    Blad2.Visible = xlSheetVisible
    
         
 
    
End Sub
 
hierbij de bijlage om een en ander te verduidelijken
 

Bijlagen

  • vb helpmij beveiliging.zip
    51,1 KB · Weergaven: 16
Van het werkboek moet standaard alleen blad 3 zichtbaar zijn.
Ingeschakelde macro's zorgen er dan voor dat de andere bladen zichtbaar worden en 3 verborgen

Allen dan kan er gewerkt worden en dat is wat je wil.

Nu zijn er drie situaties
1. er wordt niet geheel niet opgeslagen, het werkboek kan gesloten, met de bladen hoeft niets, het oorspronkelijk bestand is namelijk niet gewijzigd.
2. er moet worden opgeslagen, in dat geval moeten éérst de bladen gesloten en dan pas opgeslagen met
activeworkbook.save
3. de gebruiker heeft tussendoor opgeslagen en kiest nu voor niet opslaan.
In dat geval moet er ook worden opgeslagen, nadat de bladen zijn gesloten om te voorkomen dat deze zichtbaar zijn als er zonder ingeschakelde macro's wordt geopend.

Er moet dus worden bijgehouden of de gebruiker tussendoor heeft opgeslagen.
Dat doe je door een vlag te zetten (variabele true maken) bij het opslaan.
Dat moet dan een publieke variabele zijn (of een cel), om zichtbaar te blijven.
Een andere, minder mooie oplossing is, om standaard op te slaan (na het sluiten van de bladen.

De messagebox zie je twee keer omdat je met workbook.close weer de before_close aanroept.(en verberg je de bladen zonder opslaan, wat dus geen resultaat geeft)

Verder maak blad3 twee keer zichtbaar.
Ook is het niet aan te raden om save als variabele te gebruiken, daar dat al door vba wordt gebruikt.

Het is een wat lastig verhaal en ik hoop dat ik het een beetje duidelijk over heb gebracht.
Ik lees het wel als dat niet het geval is.

mvg leo
 
In de bijlage een kopietje met de luie oplossing, nl altijd opslaan, om de werking te verduidelijken.
(eerst opslaan)
 

Bijlagen

  • Kopie van vb helpmij beveiliging (2).zip
    53,2 KB · Weergaven: 15
Laatst bewerkt:
het lukt mij niet om de bijlage te openen,
Een andere, minder mooie oplossing is, om standaard op te slaan (na het sluiten van de bladen
juist de mooiere oplossing probeer ik voor elkaar te krijgen.
ik ben niet goed genoeg in vba om onderstaande toe te passen.
Er moet dus worden bijgehouden of de gebruiker tussendoor heeft opgeslagen.
Dat doe je door een vlag te zetten (variabele true maken) bij het opslaan.
Dat moet dan een publieke variabele zijn (of een cel), om zichtbaar te blijven.
ik heb nu zelf de volgende oplossing;
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

     Dim Save As Boolean
     Application.ScreenUpdating = False

    Save = True
    
    If ThisWorkbook.Saved = False Then
        a = MsgBox("Wilt u de wijzigingen opslaan?", vbYesNoCancel, "gegevens opslaan?")
        If a = vbCancel Then Cancel = True
        If a = vbNo Then Save = False
    End If
    
    If Save = False Then
        ThisWorkbook.Saved = True
    End If
    
    If Cancel = False And Save = True Then
Blad3.Visible = xlSheetVisible
  Blad3.Visible = True
  HideAll
    ThisWorkbook.Save
    
End If
  End Sub
  
Private Sub Workbook_Open()

    
    UnHideAll
    Blad1.Activate
      
  Blad3.Visible = xlSheetHidden
   
    
End Sub

    
  
  

Private Sub HideAll()
    'Blad3.Visible = xlSheetVisible
    Blad2.Visible = xlSheetHidden
    Blad1.Visible = xlSheetHidden
    
       
       
    
End Sub
Private Sub UnHideAll()
    
    'Blad3.Visible = xlSheetHidden
    Blad1.Visible = xlSheetVisible
    Blad2.Visible = xlSheetVisible
    
         
 
    
End Sub
deze werkt ook redelijk
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan