• 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.

Hoe verhinderen dat een gebruiker een paswoord kan ingeven voor de protectie?

Status
Niet open voor verdere reacties.

reneemettrie

Terugkerende gebruiker
Lid geworden
1 aug 2006
Berichten
1.233
Vraag die ik vandaag kreeg, maar heb geen oplossing

Bij het openen van een bestand wordt elk blad beveiligd met een paswoord.
Elke gebruiker heeft maar schrijfrechten op één blad en kent het betreffende paswoord. Dus die geeft een unprotect commando en voert de wijzigingen in.
Maar nu gebeurt het dat gebruiker op het einde zelf een protect opdracht doet, en daarbij het passwoord wijzigt.

Bij het open event wordt het oorspronkelijke paswoord door de programmeur gekozen niet geaccepteerd.

Hoe kan er verhinderd worden dat die gebruiker zelf een paswoord ingeeft?
 
Kun je niet een centraal verzamel xlsx maken die je zelf beheert en beschermt en de gebruikers krijgen ieder een eigne xlsx, geen tab dus.
Dat bestand kun je dan op gebruikersniveau beveiligen zonder dat je de tab bescherming eraf hoeft te laten halen.
Vervolgens laat je de centrale xlsx de gebruikers info uit alle individuele xlsx-en halen.
Heb het zelf nog nooit gedaan, het is meer een conceptmatig voorstel.
 
Hoewel de beveiliging in excel niets voorstelt kan je beter met een Userform werken die de invoer regelt. Dan hoeft er niemand in het werkblad zelf te werken.

Nb.
Zowel paswoord als passwoord zijn in deze context niet bestaande woorden. Password of wachtwoord lijkt mij beter.
 
Route99, dat zou misschien een mogelijkheid zijn.
VenA, het is niet mijn bestand, ik hoopte op een eenvoudiger oplossing. Ter info: in België spreken we zowel van paswoord als van wachtwoord. En passwoord is gewoon een tikfout.
 
Als iedere gebruiker met het eigen Windowsaccount inlogt dan kan je daar toch wat mee doen? Alle tabjes verbergen behalve die van de gebruiker. Heb je ook niets met de krakkemikkige beveiliging vandoen.
 
Denk dat ik een oplossing heb.
Kan eleganter, met windows wachtwoord, met array, sub met argumenten maar niet zeker of ik tijd ga hebben om dat uit te leggen. Maar dit is het idee:

Code:
Option Explicit
Dim WS As Worksheet


Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each WS In ActiveWorkbook.Worksheets
    WS.Unprotect
Next
End Sub

Private Sub Workbook_Open()
'Suppose the password for sheet A = "A", for sheet B = "B"
Dim PW As String
PW = InputBox("Geef uw wachtwoord")
Select Case PW
Case "A"
For Each WS In ActiveWorkbook.Worksheets
    If Not WS.Name = "A" Then WS.Protect
Next
Case "B"
For Each WS In ActiveWorkbook.Worksheets
    If Not WS.Name = "B" Then WS.Protect
Next
Case Else
ActiveWorkbook.Close


End Select


End Sub
 
Zet hem eens als xlsx neer .. kijken hoe snel iet te hacken valt.. ;)
Of... hoe kijk je daar tegen aan....
 
Zet hem eens als xlsx neer .. kijken hoe snel iet te hacken valt.. ;)
Of... hoe kijk je daar tegen aan....

Als je met hacken bedoelt : openen met Shift heb je gelijk. Weet wel dat er code bestaat om dat te omzeilen, maar nooit geprobeerd. Zo ver zal het wel niet gaan. Maar ben benieuwd of je het op een andere manier kunt hacken. Is wel xlsm want bevat de macro's
 

Bijlagen

  • protect2.xlsm
    16,7 KB · Weergaven: 36
Je eigen code in het document:
Code:
Private Sub Workbook_Open()
[COLOR="#008000"]'Suppose the password for sheet A = "A", for sheet B = "B"[/COLOR]
Dim PW As String
PW = InputBox("Paswword?")
Select Case PW
Case "A"
For Each WS In ActiveWorkbook.Worksheets
    If Not WS.Name = "A" Then WS.Protect
Next
Case "B"
For Each WS In ActiveWorkbook.Worksheets
    If Not WS.Name = "B" Then WS.Protect
Next
Case Else
ActiveWorkbook.Close


End Select


End Sub
 
Laatst bewerkt:
Edmoor, snap niet wat je bedoelt?
Maar het is zeker beter alle sheets via code te beschermen, en die bescherming er naargelang de gebruiker op 1 sheet af te halen.
Maar dan kunnen ze nog altijd beschermen met een paswoord dat de verantwoordelijke niet kan achterhalen. Vandaar mijn andere vraag in dit forum: hoe kan je de knop "protect" op disabled zetten? Met xml denk ik, niet echt eenvoudig?

Vraag werd gesteld in een VBA opleiding van 3 dagen, waarin deelnemers zitten die nog nooit hebben geprogrammeerd.
 
Dat is als reactie op #8.
Document zonder probleem "gekraakt" dus ;)

Een simpele gebruiker zal dat niet zomaar lukken.
Je moet die protecties dan ook niet zien als een echte beveiliging maar als een middel om een gebruiker alleen z'n eigen zaken te presenteren.
Wat al eerder is gezegd, doe dat door gebruik te maken van de login naam van de gebruiker en een verborgen administratie werkblad.
 
Laatst bewerkt:
Edmoor, het gaat hier om simpele gebruikers :), niet om hackers. Die wel het commando protect kennen. En niet luisteren naar de programmeur die vraagt af te blijven van die protect. Als ze dan zelf een paswoord ingeven kent de maker van de macro die bij sluiten de protectie erop zet dat paswoord niet. Maar ik snap niet hoe het gebruiken van environ("username"), denk toch dat je dat bedoelt, kan verhinderen dat ze zelf naar het protect commando gaan?
 
Als een gebruiker alleen zijn eigen wachtwoord kent heeft het gebruik van Unprotect geen nut als je het wachtwoord van de andere werkbladen niet weet.
Uiteraard zet je dan als ontwikkelaar van het document tevens een wachtwoord op het VBA project.
 
Als een gebruiker alleen zijn eigen wachtwoord kent heeft het gebruik van Unprotect geen nut als je het wachtwoord van de andere werkbladen niet weet.
Uiteraard zet je dan als ontwikkelaar van het document tevens een wachtwoord op het VBA project.

Heb me denk ik niet duidelijk uitgedrukt. De gebruiker kent zijn wachtwoord en gaat op zijn sheet naar unprotect. So far so good. Maar op het einde gaan sommigen dan naar protect en beveiligen hun blad met een paswoord dat de ontwikkelaar niet kent.

Maar denk nu dat het volgende werkt:

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
Set ws = ActiveSheet 'of de betreffende sheet, is maar een voorbeeld
'MsgBox ws.ProtectContents
If ws.ProtectContents Then
    MsgBox "Unprotect the sheet, otherwise you can't close"
    Cancel = True
Else
    ws.Protect Password:="PaswordOfTheProgrammer"
End If
End Sub
 
Ik zal een simpel voorbeeldje voor je maken met wat ik bedoel.
Even geduld aub :)
 
Kijk eens naar dit documentje:
Bekijk bijlage Rene.xlsm

Er zijn 6 gebruikers met wachtwoord:
Code:
Jan	 123Jan321
Kees	 123Kees321
Rene	 123Rene321
Piet	 123Piet321
Klaas	 123Klaas321

Deze liggen vast in het verborgen werkblad met de naam Gebruikers.

Bij het openen van het document geef je gebruikersnaam en wachtwoord op en zal je alleen het voor die gebruiker bedoelde werkblad kunnen gebruiken.
Dit staat helemaal los van Protect en UnProtect.
Werkbladen zijn verborgen met xlVeryHidden.

Het wachtwoord is hoofdletter gevoelig.
Het VBA project heb ik met opzet nu even niet beveiligd.

Merk ook op dat het wachtwoord bij het intypen niet zichtbaar is.
Uiteraard kan het geheel nog veel geavanceerder ;)
Dit is slechts een simpel voorbeeldje van wat ik bedoel.
 
Laatst bewerkt:
Kijk eens naar dit documentje:
Bekijk bijlage 340914

Er zijn 6 gebruikers met wachtwoord:
Code:
Jan	 123Jan321
Kees	 123Kees321
Rene	 123Rene321
Piet	 123Piet321
Klaas	 123Klaas321

Deze liggen vast in het verborgen werkblad met de naam Gebruikers.

Bij het openen van het document geef je gebruikersnaam en wachtwoord op en zal je alleen het voor die gebruiker bedoelde werkblad kunnen gebruiken.
Dit staat helemaal los van Protect en UnProtect.
Werkbladen zijn verborgen met xlVeryHidden.

Het wachtwoord is hoofdletter gevoelig.
Het VBA project heb ik met opzet nu even niet beveiligd.

Merk ook op dat het wachtwoord bij het intypen niet zichtbaar is.
Uiteraard kan het geheel nog veel geavanceerder ;)
Dit is slechts een simpel voorbeeldje van wat ik bedoel.

Interessant, aan een formulier met password char had ik ook al gedacht. Maar in dit geval moeten alle sheets moeten zichtbaar zijn voor iedereen. Voor elke gebruiker enkel één sheet schrijf rechten. Ik heb eens iets dergelijks gedaan in Access, waarbij de paswoorden worden bijgehouden in een txt bestand en wijzigingen daar ook worden weggeschreven en zichtbaar zijn voor de verantwoordelijke.

Denk nu dat de beste oplossing is: bij close event controleren of voor een bepaalde sheet de inhoud beschermd is (zie mijn code in de vorige mail), indien dat zo is cancel = true, en bij openen (dus niet bij close zoals in mijn vorige mail) de protectie erop voor elk blad behalve de betreffende gebruiker.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan