Hidden niet goed in combinatie met beveiliging werkblad

Status
Niet open voor verdere reacties.

Wim van Dijk

Gebruiker
Lid geworden
13 sep 2008
Berichten
16
Ik zit met het volgende,

Ik heb diverse procedures geschreven waarin de eigenschap entirerow.hidden of entirecolumn.hidden wordt gebruikt op een beveiligd werkblad.

Dat werkblad is beveiligd met de volgende code:

Code:
Private Sub Workbook_Open()

Dim wSheet As Worksheet

'Beveiliging inschakelen maar voor macro's uitschakelen
For Each wSheet In Worksheets
   wSheet.Protect Password:="Secret", UserInterfaceOnly:=True, AllowFiltering:=True
Next wSheet

End Sub

Punt is dat het verbergen van kolommen door macro's die werken op het eigen werkblad (dus die worden aangeroepen door Activesheet) geen problemen geven. Alleen de besturingselementen die opgenomen zijn in een ander werkblad zorgen voor problemen. Een voorbeeld is deze code:

Code:
Private Sub ZM_Risico_Click()

    If ZM_Risico.Value = False Then
      Worksheets("RMmaatregelen").Columns("C").EntireColumn.Hidden = True
    Else
      Worksheets("RMmaatregelen").Columns("C").EntireColumn.Hidden = False
    End If
    
End Sub

Zodra ik de beveiliging eraf haal gaat het goed, maar anders gaat het fout. Het merkwaardige is dat deze opdrachten in eerste instantie goed werkten, maar later niet meer, terwijl er geen letter code is veranderd. Nu ik het berichtje typ kan ik het niet laten om toch nog wat te proberen. Nu zie ik dat de eigenschap EntireRow en EntireColumn overbodig zijn. Die haal ik er al uit. Een snelle test laat zien dat helaas hiermee nog niets is opgelost.
 
Excel Amateur,

Bedankt voor je suggestie. De beveiliging had ik al geregeld via de sub Workbook Open. Ik krijg ook een andere foutmelding. Nl. dat de eigenschap Hidden niet werkt. Bij "Buis" uit jouw link kreeg je al direct een melding dat de opdracht niet kon vanwege niet correcte beveiligingsinstellingen.
 
Nog wat verder zoekend heb ik ook een probleem geconstateerd met de methode Showalldata die werkt ook niet. NB terwijl ik al expliciet had aangegeven dat filteren gewoon mocht. Met de hand het actieve filter ongedaan maken is geen probleem. Ik snap hier niets van.
 
Na nog wat verder gezocht en geprobeerd te hebben, merk ik dat er wel een oplossing is door eerst het werkblad waarop gefilterd, rijen of kolommen verborgen/getoond werden te activeren het wel mogelijk is. Eerlijk gezegd had ik dat ook staan, maar het leek mij sterk vertragend werken door eerst elke keer het werkblad te activeren en weer terug. ALs er geen betere oplossing is dan ga ik dit toch maar (weer)toepassen. Ik houd mij dus wel aanbevolen voor de gouden tip. Daarom houd ik de vraag nog als onbeantwoord.
 
Laatst bewerkt:
Code:
Private Sub ZM_Risico_Click()
    With Worksheets("RMmaatregelen")
        .Unprotect "Secret"
        .Columns(3).Hidden = Not ZM_Risico
        .Protect "Secret"
    End With
End Sub
 
Warme Bakkertje,

Bedankt voor je aanvulling, vooral het voorkomen van de IF THEN constructie vind ik waardevol. Het uit- en inschakelen van de beveiliging zou een optie kunnen zijn. Punt is dat in een aantal gevallen met één besturingselement in meerdere bladen acties worden uitgezet. Daarnaast vind ik het persoonlijk niet fraai de beveiliging even uit te zetten. Ik houd het daarom op een zilveren tip, met speciale aantekening voor de vereenvoudiging van mijn code.
 
Code:
Private Sub Workbook_Open()

Dim wSheet As Worksheet

'Beveiliging inschakelen maar voor macro's uitschakelen
For Each wSheet In Worksheets
   wSheet.Protect Password:="Secret", UserInterfaceOnly:=True, [COLOR="red"]AllowFormattingColumns:=True[/COLOR], AllowFiltering:=True
Next wSheet

End Sub
Code:
Private Sub ZM_Risico_Click()
    Worksheets("RMmaatregelen").Columns(3).Hidden = Not ZM_Risico
End Sub
 
Laatst bewerkt:
Warme bakkertje,

Het werkt, ook de methode ShowAllData gaat goed. Ik snap er overigens niets van, want ik zou verwachten dat met userinterfaceonly de zaak voor de macro al had moeten werken. In ieder heel hartelijk dank. Toch de gouden tip gekregen. :thumb:
 
Gisteren toch nog te vroeg gejuicht. De methode ShowAllData werkt niet!. Deze had ik achter een If constructie staan, hierdoor kwam VBA op dat moment niet eens toe aan het uitvoeren van de methode. Ik heb op Internet nog wat verder gegoogled. Daaruit blijkt dat diverse personen problemen heeft met de userinterfaceonly optie. Deze werkt niet betrouwbaar.Zie bijvoorbeeld:

http://www.mrexcel.com/forum/showthread.php?t=343337

Of ergens anders:
I have to confess though that in my tests, it seems to be extremely buggy as to whether it works or not (sometimes it does, sometimes not) so I'd recommend you unprotect, add the validation and reprotect instead, to be honest.

Het lijkt erop dat userinterfaceonly niet zonder problemen is. De problemen worden vooral gemeld bij grotere Excel-projecten. De beste oplossing lijkt dan toch om eerst het werkblad van de beveiliging eraf te halen en later er weer op te zetten.

Voor mij betekent dat een dag strafwerk om overal de code aan te passen:(.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan