Opgelost Rechten op basis van Application.Username

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

harrybrinkman

Gebruiker
Lid geworden
7 nov 2019
Berichten
111
Besturingssysteem
Windows 11 home
Office versie
Ms Office 365
LS,

Ik heb een excelbestand met daarin 5 werkbladen. Nu wil ik graag op basis van de application.username bepalen wat die persoon mag zien en wijzigen. Op werkblad "gebruikers" staat een lijstje met (fictieve) usernames en hun rol. Ik kom, als beginner in VBA, echter niet verder dan de controle of ik het zelf ben, of iemand anders. Ik zoek echter en oplossing die kijkt wie het bestand opent, en op basis van zijn/haar rol de rechten bepaald. Sta je niet in het lijstje dan mag je alleen maar raadplegen en absoluut niets wijzigen.
Ik zit klem en weet niks constructiefs te bedenken waarmee ik dat oplos. Wie weet raad?
bijgevoegd een fictief bestand omdat ik de echte niet mag/kan delen. De (supersimpele) code staat in de module "Inloggen"

Alvast bedankt voor het meedenken,
Harry Brinkman
 

Bijlagen

Zet de code in ThisWorkbook module.
Code:
Private Sub Workbook_Open()
.'....je code hier.
End Sub
 
En maak er dan zoiets van:
Code:
Private Sub Workbook_Open()
    Set Inlog_Username = Sheets("Gebruikers").Range("A:A").Find(Application.UserName, , , xlWhole, , False)
    If Not Inlog_Username Is Nothing Then
        Rol = Inlog_Username.Offset(, 1)
    Else
        Rol = "Raadpleger"
    End If
  
    Select Case LCase(Rol)
        Case "ontwikkelaar":    Inlog_Ontwikkelaar
        Case "gebruiker":       Inlog_Gebruiker
        Case Else:              Inlog_Raadpleger
    End Select
  
    Application.StatusBar = Application.UserName
End Sub
Uiteraard dan zelf even de Inlog_ subs maken zoals je het wilt hebben.
 
Edmoor & HSV,

Spijker op de kop! Dit is precies wat ik zocht. Hartelijk bedankt,

mvrgr,
Harry
 
Weet wel dat Application.username de gebruikersnaam in Office pakt en deze (meestal) zelf is aan te passen in bijvoorbeeld Excel. Als ik dus mijn eigen username vervang door Harry Brinkman, dan krijg ik dus ook overal toegang. Ik zou kiezen voor Environ("username").
 
Gebruik de ListObject methodes en eigenschappen ipv typfoutgevoelige omwegen.
Code:
Set naam = .ListObjects(1).ListColumns(1).Range.Find(t_1)
Code:
.ListObjects("Tabel2").ListRows.Add.Range.Resize(, 2) = Array(t_1, Date & " " & Time)
 
  • Leuk
Waarderingen: HSV
Indien er maar twee kolommen in het object zijn en je vult ze alle twee kan het iets korter.

Code:
 .ListObjects("Tabel2").ListRows.Add.Range = Array(t_1, Now)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan