opties van "protect worksheet" veranderen na uitvoeren macro.

Status
Niet open voor verdere reacties.

ExcelExcellence

Gebruiker
Lid geworden
3 sep 2020
Berichten
22
Hallo helpmij,

In een xls sheet doe ik over een maand aan tijdsregistratie voor 10 personeelsleden.
Dagelijks wordt start en eindtijd en pauze vastgelegd en nog wat andere dingen.

Zie screen shot #1. (heb'm geupload maar weet niet zeker of dat goed gaat.... maakt niet uit want is enkel ter visuele toelichting)


De sheet is protected en de 'witte' cellen met formules kunnen door de gebruiker niet benaderd worden.
Enkel 'blauwe' cellen zijn benaderbaar om data in te vullen.

Als ik de sheet 'protect' staan de volgende opties aangevinkt:
- select unlocked cells
- use autofilter
- use pivottable & pivotchart
- edit objects
- edit scenarios

Nadat een week beeindigd is wordt de data gecontroleerd door een manager en vervolgens wordt de week via een macro ook 'protected' en kunnen er geen veranderingen meer gemaakt worden.


Dit is de macro die ik daarvoor gebruik: (ik plak enkel de code van de 1ste week... de overige weken zijn identiek buiten de celverwijzing "Criteria1:=Range("V6").Value")


Code:
Sub BlockWk1()
'
' BlockWk1 Macro
'
' unprotect worksheet with a password
Sheets("hour registration QoR").Unprotect Password:="hour "
'   activate autofilter
    ActiveSheet.Range("$A$5:$T$316").AutoFilter Field:=1, Criteria1:=Range("V6").Value, _
        Operator:=xlOr, Criteria2:="=end"
'   unprotect cells
    Rows("6:6").Select
    Range("A6").Activate
    Range(Selection, Selection.End(xlDown)).Select
    Range("A6").Activate
    Selection.Locked = True
    Selection.FormulaHidden = False
    Range("A6").Select

'de-activate autofilter
    ActiveSheet.Range("$A$5:$T$316").AutoFilter Field:=1

' protect worksheet with a password
    ActiveSheet.protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFiltering:=True, AllowUsingPivotTables:=True
    Sheets("hour registration QoR").protect Password:="hour "

End Sub


Dat werk prima! :love:
Echter 1 probleempje:

#1
Als ik de macro draai en daarna 'unprotect' ik de sheet.... en vervolgens ga ik hem weer protecten zijn de onderste 4 opties 'uitgevinkt'?
Iemand een idee hoe dat kan en hoe ik dat kan voorkomen?


b.v.d.

grts Jo

ps: ja wil de sheet ook wel uploaden maar dat gaat tot nu toe altijd mis hier... en ben dus benieuwd of de 'screenshot' meegaat deze keer.... :confused:
 
Laatst bewerkt:
Als het actieve blad Sheets("hour registration QoR") is.

Je zal het vast en zeker overschrijven met:
Code:
.protect Password:="hour "


 
Dat unprotect en daarna opnieuw protect kun je gewoon vermijden door de optie 'protect userinterfaceonly' te gebruiken.
  • Gebruikers kunnen dan niets wijzigen dat je op locked hebt gezet
  • macro's wel
  • door dus in macro na einde van de periode gewoon de settings 'locked' aan te zetten kan je cellen die voordien open stonden gewoon sluiten voor de gebruiker.

En gedurende het ganse proces blijft je sheet altijd protected, althans vanuit de user interface.

Lees alle opties van protect hier maar eens door : https://exceloffthegrid.com/vba-code-worksheet-protection/
 
hmm...

Hallo Harry,

Volgens mij zet ik de opties toch aan voordat ik protection aanzet:

Code:
' protect worksheet with a password
[B]    ActiveSheet.protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFiltering:=True, AllowUsingPivotTables:=True
[/B]    Sheets("hour registration QoR").protect Password:="hour "
 
Als dit.....
Code:
Sheets("hour registration QoR")
de activesheet is, dan overschrijf je de beveiliging met

Code:
' protect worksheet with a password
    ActiveSheet.protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFiltering:=True, AllowUsingPivotTables:=True
[B]    Sheets("hour registration QoR").protect Password:="hour "[/B]

Waarom niet het wachtwoord in de bovenste regelcode toevoegen dan?
 
Dat unprotect en daarna opnieuw protect kun je gewoon vermijden door de optie 'protect userinterfaceonly' te gebruiken.
  • Gebruikers kunnen dan niets wijzigen dat je op locked hebt gezet
  • macro's wel
  • door dus in macro na einde van de periode gewoon de settings 'locked' aan te zetten kan je cellen die voordien open stonden gewoon sluiten voor de gebruiker.

En gedurende het ganse proces blijft je sheet altijd protected, althans vanuit de user interface.

Lees alle opties van protect hier maar eens door : https://exceloffthegrid.com/vba-code-worksheet-protection/
 
digicafee's oplossing

Hallo DigiCafee,

De code waar je het over had gebruikt:

Code:
Sub BlockWk1()
'
' BlockWk1 Macro
'
'Enable changes to worksheet by VBA code, even if protected
Sheets("hour registration QoR").protect Password:="hour ", _
    UserInterfaceOnly:=True
'reset filter
    Selection.AutoFilter
    Range("A5").Select
    Selection.AutoFilter
'   activate autofilter
    ActiveSheet.Range("$A$5:$T$316").AutoFilter Field:=1, Criteria1:=Range("V6").Value, _
        Operator:=xlOr, Criteria2:="=end"
'   unprotect cells
    Rows("6:6").Select
    Range("A6").Activate
    Range(Selection, Selection.End(xlDown)).Select
    Range("A6").Activate
    Selection.Locked = True
    Selection.FormulaHidden = False
    Range("A6").Select

'de-activate autofilter
    ActiveSheet.Range("$A$5:$T$316").AutoFilter Field:=1

End Sub


Werkt maar het 'originel probleem' blijft bestaan.
Als ik de protectie daarna handmatig aan en uitzet zijn de onderste 4 opties van de 'protectie vinkjes' weer uitgezet!?

Aldus helpt helaas niet....

grts Jo
 
alle zaken die je via protect kan bewerken : https://docs.microsoft.com/en-us/office/vba/api/Excel.Worksheet.Protect

Zoals hierboven reeds aangegeven, met userinterfaceonly kan je macros tabbladen laten bewerken zelfs in beveiligde toestan.
Belangrijk is wel dat je vooraf, sinds het openen van je bestand, dat even geactiveerd hebt.
Dus zet je dat best in thisworkbook in het Workbook_Open
Code:
Private Sub Workbook_Open()
   With Sheets("hour registration QoR")
      .Unprotect Password:="hour "
      .Protect "hour ", userinterfaceonly:=True, DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFiltering:=True, AllowUsingPivotTables:=True
   End With
End Sub
Wil je toch bepaalde zaken aangevinkt hebben, dan zet je die zaken daarachter, zoals ik nu deed in 1 zin, niet in 2 afzonderlijke zoals in #1 en HSV in #5.

Als je dat straks gedaan hebt, sla dan het bestand op, sluit af en heropen en probeer het nog een keer.

Als je handmatig de beveiliging er af haalt en er terug opzet en bepaalde opties niet aanvinkt, tja, daar is weinig kruit tegen opgewassen (anders bij een werkblad activate nog snel eens unprotect en protect, maar waarmee ben je dan bezig.)
Het is maar net de vraag waarom ze die beveiliging er wel weer moeten van af gooien.
 

Bijlagen

  • Aantekening 2020-10-02 114209.png
    Aantekening 2020-10-02 114209.png
    19,5 KB · Weergaven: 37
Laatst bewerkt:
opgelost!

Cow18,

Idd... door de code te plakken in 'Thisworkbook' en in de 'module' te verwijderen... werkt't als een trein!

Top!
Thx! :thumb::d
 
@cow18, als je mijn bericht goed leest hoef je mij niet te benoemen in de fouten.
 
@HSV, inderdaad mijn communicatie was niet goed. Je had wel degelijk de oplossing gegeven door alles in 1 commando te zetten en dat had ik ook zo willen meegeven, maar verkeerd verwoord. Sorry.
Wil je toch bepaalde zaken aangevinkt hebben, dan zet je die zaken daarachter, zoals ik nu deed in 1 zin, niet in 2 afzonderlijke zoals in #1 en HSV in #5.
had moeten zijn
Wil je toch bepaalde zaken aangevinkt hebben, dan zet je die zaken daarachter, zoals HSV (in #5) en ik nu doen in 1 zin, niet in 2 afzonderlijke zoals in #1.
 
Laatst bewerkt:
@cow18 (Bart), :cool:

Dank je.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan