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

Meerdere macro's onder knoppen beveiligen tegen uitvoeren

Status
Niet open voor verdere reacties.

ErikdV

Gebruiker
Lid geworden
16 jun 2011
Berichten
81
Ik heb een werkmap in Excl 2010, die gebruikt wordt voor een testscript.
Het bestaat uit een voorblad met daarop een overzicht en een aantal tabbladen met een testscript waarin gebruikers hun testresultaten kunnen invullen.
Het voledige werkblad is in beheer bij een projectleider, die eventueel wijzigingen kan aanbrengen in de structuur en de inhoud van de afzonderlijke scripts.
Hiervoor heb ik 2 macro's die de beveiliging aan en uit kunnen zetten.
Daarnaast heb ik diverse andere macro's (ca. 20) die de aanpassingen automatisch kunnen uitvoeren.
Om deze macro's gemakkelijker voor de projectleiders beschikbaar te krijgen, heb ik ze allemaal onder een knop gebracht op het overzicht.
De testers kunnen echter ook op een van de knoppen klikken en de macro's uitvoeren.

Inmiddels weet ik 2 dingen:
1. In de VBA-code van de macro kan om een wachtwoord worden gevraagd, zodat een macro niet onbevoegd kan worden uitgevoerd.
2. Het VBA-project kan worden beveiligd, zodat de code allen kan worden ingezien/gewijzigd als de gebruiker beschikt over een wachtwoord.

Op zich zou dit moeten werken (heb ik nog niet uitgeprobeerd). Het is alleen erg omslachtig om in elke macro weer diezelfde code te zetten voor het wachtwoord.
De macro's zijn onderverdeeld in ca. 7 modules.
Is het mogelijk om 1 VBA-code te maken, die een wachtwoord vraagt, dat door elke macro wordt uitgevoerd voordat de macro zelf wordt uitgevoerd.
Alle routines zijn 'Public'.
 
Niet echt als je het per routine wil doen.

Wat je wel kan doen is een knop maken die de andere knoppen activeert / deactiveert. De knoppen doen dan niets totdat via de activatie knop die knoppen aangezet worden
 
Procedure wachtwoord

Ik heb zitten denken aan een procedure voor het wachtwoord, die ik inelke macro aanroep. Dan kan ik op 1 plek de wachtwoorden aanpassen.
Maar jouw optie om de knoppen te activeren, deactiveren is natuurlijk ook mogelijk.
Alleen...hoe doe ik dat?
 
gebruik de inlognaam van de gebruiker Environ(username) ipv wachtwoorden.
 
Ik bedacht na het herlezen van de vraag dat je ook een formulier kunt maken met de geavanceerde opties en het oproepen van het formulier beveiligen. Uiteindelijk komt dat op hetzelfde neer: niet tientallen routine's aanpassen om daar een beveiligingscode in te plaatsen.
 
gebruik de inlognaam van de gebruiker Environ(username) ipv wachtwoorden.
Het gebruik van gebruikersnamen is lastig.
Het testscript zal door de projectleiders worden gebruikt en eventuaal worden aangepast. (zij krijgen dus volledige rechten)
De projectleiders laten het vervolgens door gebruikers invullen.
Het kan per project en fase verschillen welke gebruikers dat zijn en ik heb daar geen inzicht in.
Voor projectleiders is het ook te lastig om telkens de rechten aan te passen.
 
Ik bedacht na het herlezen van de vraag dat je ook een formulier kunt maken met de geavanceerde opties en het oproepen van het formulier beveiligen. Uiteindelijk komt dat op hetzelfde neer: niet tientallen routine's aanpassen om daar een beveiligingscode in te plaatsen.

Ik heb al wat zitten experimenteren met een werkbladformulier met activex-knoppen, maar kom daar niet helemaal uit.
1. Ik kan niet vinden waar ik de beveiligen van de activex-knoppen componenten kan aanpassen. Volgens Microsoft is dat onder Bestand/.. maar ik zie daar geen oiptie voor ActiveX.
2. De belangrijkste reden is dat het aanzetten van ActiveX een extra beveiligingsrisico is, dat onze organisatie liever niet heeft, en waarschijnlijk ook centraal is uitgezet (vandaar dat ik het niet kan vinden).

Het uitzetten van de macrobeveiliging is weliswaar ook een risico, maar minimaal als we het zo beperkt mogelijk houden.
Ik heb daarom toch gekeken naar een VBA-code.
Deze wil ik graag opsplitsen in een hoofd en een subroutine (function of Run ).
De hoofdroutine roept de subroutine aan en krijgt de resultaatcodes voor leeg/correct en fout terug.
Aan de hand van de resultaatcode wordt de hoofdroutine verder uitgevoerd.

Ik heb geprobeerd om een function te maken, maar kom daar niet uit met het overdragen van de parameters.
Hoe doe ik dit?

Mijn hoofdroutine is waarschijnlijk ook niet erg efficient, maar ik heb nu ff geen tijd om hier verder naar te kijken. Suggesties zijn welkom.

Public Sub erik()
leeg = 0
correct = 0
While correct = 0 And leeg < 3 And fout = 0
resp = InputBox("Enter Password")
Select Case resp
Case "paard": MsgBox "correct wachtwoord: " & resp
correct = 1
Case "": leeg = leeg + 1
If leeg = 3 Then
MsgBox "U heeft 3x geen wachtwoord ingevoerd. U verlaat nu de macro"
Else: MsgBox "U heeft geen wachtwoord ingegeven. Probeer het nogmaals"
End If
Case Else: fout = 1
MsgBox "wachtwoord onjuist: " & resp & " U verlaat nu de macro"
End Select
Wend
If correct = 1 Then MsgBox "hier komt de rest van de macro"
If fout = 1 Then MsgBox "de macro zal niet worden uitgevoerd"
End Sub
 
Aanpassen hoeft niet. Iedereen die op basis van inlognaam geen projektleider is krijgt op grond daarvan andere rechten dan degene die wel als projketleider wordt herkend. Alleen de inlognamen van projektleiders hoeven daardoor bekend te zijn. Dat lijkt me veiliger dan het werken met wachtwoorden die gemakkelijk doorgegeven kunnen worden.


Het gebruik van gebruikersnamen is lastig.
Het testscript zal door de projectleiders worden gebruikt en eventuaal worden aangepast. (zij krijgen dus volledige rechten)
De projectleiders laten het vervolgens door gebruikers invullen.
Het kan per project en fase verschillen welke gebruikers dat zijn en ik heb daar geen inzicht in.
Voor projectleiders is het ook te lastig om telkens de rechten aan te passen.
 
Wampier:
Op zich ziet het er goed uit. Ik kan alleen bij mijn VBA-editor op geen enkele manier de besturingselementen toevoegen of wijzigen. Als ik het formulier open wordt ook alleen maar het formulier geopend en kan ik alleen de formuliereigenschappen wijzigen. Het lijkt erop alsof de gehele werkset voor besturingselementen niet aanwezig is. Is dit op de een of andere manier wel zichtbaar te krijgen of is het gewoon uitgeschakeld bij installatie door de beheerder?

Ik heb er toch voor gekozen om de beveiliging simpel te houden, met 1 subroutine waarin een wachtwoord wordt gevraagd.
Deze subroutine wordt door elke routine die achter en knop hangt met beperkte toegang aangeroepen en afhankelijk van het antwoord (true/false) wordt de routine wel of niet uitgevoerd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan