Brugernavn og adgangskode
I et regneark findes tre kolonner. I den første (A) står fornavne. I den
anden (B) står efternavne. I den tredje (C) står Ja, Nej eller den er tom. Vi
vil nu gerne have genereret et brugernavn og en adgangskode. Brugernavnet skal
bestå af de to første bogstaver i fornavnet, de to første bogstaver i
efternavnet og et løbenummer, som er fortløbende for identiske brugernavne,
altså fx får den første bruger med bestemte initialer et 1-tal, mens den næste
bruger med samme initialer får et 2-tal og så fremdeles. Desuden skal der genereres en tilfældig
adgangskode af en nærmere bestemt længde.
Selve genereringen af
initialerne kan gøres med:
Sub
FindInitialer()
For Each c In Selection.Cells
If UCase(c.Offset(0, -1).Value) =
"JA" Then
c.Value =
LCase(Mid(c.Offset(0, -3), 1, 2) & Mid(c.Offset(0, -2), 1, 2))
End If
c.Value = Replace(c.Value, "æ", "z")
c.Value = Replace(c.Value, "ø", "q")
c.Value = Replace(c.Value, "å", "x")
Next c
End Sub
Da ikke mange systemer kan lide
brugernavne, der indeholder æ, ø eller å, erstattes disse med henholdsvis z, q
og x.
Generering af løbenummer,
vender jeg tilbage til nedenfor. Adgangskoden skal nu genereres. Det har jewg
valgt at gøre via en Function, som senere bliver kaldt af en Sub.
Kommentarlinjerne skulle forhåbentlig forklarer koden
Function
OpretPW(lngd As Long) As String
Dim dTilf As Double
Dim sPW As String
Dim bStreng As Boolean
'Udvælg tilfældige, tilfældige tal
Randomize
'Udvælg karakterer til adgangskoden
While Len(sPW) < lngd 'Gentag udvælgelse til den ønskede
længde er nået.
dTilf = Int(Rnd * 75) + 48
'Vælg et tilfældigt heltal
mellem 48 og 123.
bStreng = False
'Sæt værdien af en given
karakter til Falsk
Select Case dTilf
Case 48 To 57
' Værdier mellem48 og
57 repræsenterer numeriske værdier
bStreng = True
'Karakteren sættes til Sand
Case 65 To 90
'Værdier mellem 65 og
90 repræsenterer store bogstaver
bStreng = True
'Karakteren sættes til Sand
Case 97 To
122 'Værdier mellem 97
og 122 repræsenterer små bogstaver
bStreng = True
'Karakteren sættes til Sand
Case Else
'De andre tal er
ugyldige
bStreng = False
'Karakteren sættes til Falsk
End Select
If bStreng Then
'Hvis værdien er sand,
karakteren gyldig, føjes den til adgangskoden
sPW = sPW &
Chr(dTilf)
'Dette gentages til den
ønskede længde af adgangskoden er nået
If (Len(sPW)
= lngd - 1) And (Asc(Left$(sPW, 1)) < 65) Then
sPW = Right$(sPW, Len(sPW) - 1)
End If
End If
Wend
'Til
sidst oprettes adgangskoden
OpretPW = sPW
End Function
Nu skal længden af adgangskoden
kunne vælges af brugeren. Skrives der ingen længde i inputboksen, vil der blive
vist en fejlmeddelelse, og der genereres ingen adgangskode. Der skal kun skrives
en adgangskode, hvis der står Ja i C-kolonnen, og E-kolonnen ikke allerede
indeholder én. Ellers vil de bestående adgangskoder blive overskrevet, og det er
ikke meningen.
Sub
Adgang()
Dim lgd As Long
On Error GoTo fejl
lgd = InputBox("Indtast den krævde længde på adgangskoden og
klik OK")
For Each c In Selection.Cells
If UCase(c.Offset(0, -1).Value)
= "JA" And c.Offset(0, 1) = "" Then
c.Offset(0, 1).Value = OpretPW(lgd)
End If
Next c
fejl:
If Err.Number = 13 Then
MsgBox "Der kunne ikke oprettes en
adgangskode, da der ikke blev opgivet en længde.", _
vbOKOnly +
vbExclamation
Exit Sub
End If
End Sub
Ovenstående kode viser en
inputboks, hvor brugeren kan indtaste længden på adgangskoden. når der klikkes
OK i inputboksen, generes adgangskoden.
Til sidst skal det hele "pakkes
sammen" i en enkelt makro. Ud over at oprette brugernavn og adgangskode, skal
denne også sikre, at der tilføjes en løbenumre til initialerne, så brugernavnene
bliver sikre. Endeligt skal den sikre, at såfremt. der kun markeres et enkelt
eller få ny brugernavne, bliver adgangskoden ikke ændret, for de brugernavne,
der allerede er oprettede. Igen lader jeg kommentarerne "tale" som forklaring.
Sub
Brugernavn_Adgangskode()
'Erklæring af variable
Dim EndRowA As Long
Dim EndRowD As Long
Dim lgd As Long
Application.Screenupdating = False ' Vi gider ikke se hele skærmopdateringen
'Først indsættes en hjælpekolonne til venstre for adgangskodekolonnen (som ny D)
Columns("D:D").Select
Selection.Insert Shift:=xlToRight
'Så
markeres et område i hjælpekolonnen, der passer til området med fornavne i
A-kolonnen
EndRowA = Range("a65536").End(xlUp).Row
Range("d2:D" & EndRowA).Select
'Det
oprettes brugernavne uden tæller i hjælpekolonnen ved et kald til Sub
OpretBruger
OpretBruger
'Så
tilføjes tælleren i E-kolonnen ved hjælp en formel, der sammensætter
'Initialerne fra hjælpekolonnen med en TÆL.HVIS() der tæller
de enkelte
'forekomster af hvert initialsæt
Range("e2:e" & EndRowA).Select
' Her vælges E-kolonnen
For Each c In Selection.Cells
c.Formula = "=IF(RC[-1]="""","""",RC[-1]&(COUNTIF(R2C4:RC[-1],RC[-1])))"
'Her indsættes formlen
Next c
'Nu kopieres indholdet
af E-kolonnen og indsættes samme sted, men som værdier, ikke formler
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues ' Indsæt som
værdier
'Der
er nu fortløbende nummerering på identiske initialer i E-kolonnen
'og hjælpekolonnen (D) slettes igen
Columns("D:D").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
'Brugernavn i form af initialer og løbenummer står nu i D-kolonnen
'Sidste celle i denne findes
EndRowD = Range("d65536").End(xlUp).Row
'Adgangskode oprettes i de celler, i E-kolonnen, hvor der ikke allerede står
noget, men hvor
'der står Ja i C-kolonnen
Range("D1:D" & EndRowD).Select
Adgang
'Overskriften i D-kolonnen "spises" måske,
'så den sætter vi igen for en sikkerheds skyld
Range("D1").Value = "Brugernavn"
'Til sidst aktiveres A1 - klar til næste omgang.
Range("A1").Select
Application.Screenupdating = True ' Nu må skærmen gerne
begynde at opdatere igen
End Sub
Det var temmelig meget kode til
en forholdsvis simpel opgave og muligvis kan det gøres meget enklere. Det har
jeg endnu ikke haft tid til at se på, men det kommer måske en dag :-)
Til sidst lidt om, hvordan
makroerne bruges. Som udgangspunkt har vi følgende data:
Fornavn |
Efternavn |
Adgang |
Brugernavn |
Adgangskode |
Palle |
Alene |
Ja |
|
|
John |
Sømod |
JA |
|
|
Finn |
Steen |
JA |
|
|
Ella |
Stick |
ja |
|
|
Else |
Stickelberg |
Nej |
|
|
Johannes |
Sørensen |
Ja |
|
|
Børge |
Bruun |
nej |
|
|
Niels |
Nielsen |
nej |
|
|
Jonas |
Søborg |
Ja |
|
|
Findur |
Stensson |
Ja |
|
|
Albert |
Jespersen |
Nej |
|
|
Paul |
Albertsen |
Ja |
|
|
Elsa |
Stikestad |
ja |
|
|
Erik |
Nielsen |
Ja |
|
|
For at bruge funktionen
markeres nu den tomme kolonne med brugernavne. (Vist med gul farve). Derefter
afspilles makroen og denne dialogbox vises:
Når der skrives et tal i
dialogboksen (her tallet 8), genereres brugernavne og adgangskoder.
Fornavn |
Efternavn |
Adgang |
Brugernavn |
Adgangskode |
Palle |
Alene |
Ja |
paal1 |
KvHlPVoh |
John |
Sømod |
JA |
josq1 |
uSrrClrO |
Finn |
Steen |
JA |
fist1 |
wOqKfmzE |
Ella |
Stick |
ja |
elst1 |
upRiCUqs |
Else |
Stickelberg |
Nej |
|
|
Johannes |
Sørensen |
Ja |
josq2 |
znQEcsTa |
Børge |
Bruun |
nej |
|
|
Niels |
Nielsen |
nej |
|
|
Jonas |
Søborg |
Ja |
josq3 |
MtHrfkGC |
Findur |
Stensson |
Ja |
fist2 |
xyE2cLDp |
Albert |
Jespersen |
Nej |
|
|
Paul |
Albertsen |
Ja |
paal2 |
cCjRT3dB |
Elsa |
Stikestad |
ja |
elst2 |
S45v703k |
Erik |
Nielsen |
Ja |
erni1 |
zfzy6R8T |
Skal man senere oprette en
eller flere nye tilføjes denne/disse nederst, og brugernavnene markeres separat.
Ændrer man ved en senere lejlighed Else Stickelberg fra Nej til Ja, skal hendes
navn også flyttes nederst. Ellers får hun nummer 2 og Elsa Stikestad får nummer
3, hvilket ikke er hensigtsmæssigt. Også dette problem kan løses ved hjælp af
makroer, og det vil jeg nok tilføje til artiklen en anden gang.
- Til top -
- Tilbage til makroer -
- Tilbage til Excel -
|