Inlogscherm maken

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Goedemorgen,

Ik ben even bezig om een inlogscherm te maken zodat ik beter kan monitoren wie wanneer zich heeft ingelogd en daarbij dat er een soort inloggeschiedenis (logboekje per gebruiker) wordt aangemaakt.

Ik heb onderstaande code gemaakt

Code:
Private Sub CommandButton1_Click()
    Dim User As String
    'Dim Code As String
    Dim Check As String
    
    User = Tb_User.Value
    'Code = Tb_Code.Value
    Check = WorksheetFunction.Match(User, Sheets("Blad2").Columns(1), 0)
    
    Select Case Tb_Code.Text
        Case Is <> Sheets("Blad2").Cells(Check, 2)
            MsgBox ("Beste " & User & vbNewLine & vbNewLine & _
                "U heeft een verkeerd gebruikersnaam of wachtwoord ingevoerd." _
                & vbNewLine & vbNewLine & "Probeer opnieuw"), vbInformation
        Case Else
            MsgBox ("Hallo " & User)
    End Select

End Sub

De gebruikers worden ingevoerd op het nu geheten Blad2. In kolom A staan de gebruikersnamen en in kolom B de wachtwoorden. Tot zover. Alle cellen hebben de eigenschap: Standaard.

Waar ik tegenaan loop is als volgt.

Met bovenstaande code kan ik in de zoekwaarde enkel letters of letters met cijfers plaatsen. Enkel cijfers werkt niet. Doe ik dit wel dan krijg ik bij uitvoeren, zodra ik op de commandbutton klik, de foutmelding: "De eigenschap Match van Klasse Worksheetfunction kan niet worden opgehaald" en bij foutopsporing kleurt:"Check = WorksheetFunction.Match(User, Sheets("Blad2").Columns(1), 0)" geel.

Mijn vraag is dus waar ik de plank mis sla. Tevens en dat kan ik niet 1,2,3 terugvinden, wil ik niet hebben dat ik aan de hand van jokertekens zoals de * en het ? of de ~ ook een match kan ontstaan. Ik heb de "0" al geprobeerd te wijzigen, maar daar schiet ik niets mee op (of ik doe iets fout).

Mocht aan de hand van bovenstaande een voorbeeld nodig zijn dan zal ik deze opmaken.
 
Vertel er ook even bij wat de objecten TB_user en TB_Code zijn.
 
:thumb:

tb_user = textbox voor invoer gebruikersnaam
tb_code= textbox voor invoer wachtwoord
 
Alleen cijfers zal inderdaad niet werken omdat deze in de cellen met type Standaard echt nummeriek zullen zijn en de Textbox altijd een string terug geeft.
 
Laatst bewerkt:
Een conversie wellicht?? Al lijkt mij dat sterk.

Ik moet er even van tussen. Kom er nog op terug.
 
Zorg ervoor dat cellen met alleen nummerieke waarden ook echt Text zijn. Dat kan je bijvoorbeeld doen door ze bij ingave vooraf te laten gaan door een enkele quote (').
 
Volgens mij zijn er voldoende inlogschermpjes te vinden.

Met de login gegevens op blad1 zal dit het wel doen.

Code:
Option Compare Binary
Sub VenA()
Ar = Blad1.Cells(1).CurrentRegion
ib_login = InputBox("login")
ib_pw = InputBox("pw")
For j = 1 To UBound(Ar)
    If Ar(j, 1) = ib_login And Format(Ar(j, 2), "@") = ib_pw Then
        MsgBox "Welkom " & Ar(j, 1)
        Exit Sub
    End If
Next j
MsgBox "er klopt iets niet"
End Sub
 
Kijk ook eens naar het voorbeeld dat ik ooit maakte. 1 van de gebruikersnamen is: jip
Het wachtwoord is 123

Bekijk bijlage Wachtwoord.xlsm

De datum/tijd van laatste keer inloggen wordt er in bijgehouden alsook het aantal keren dat een gebruiker heeft ingelogd.
Wachtwoorden mogen cijfers en/of letters zijn en zijn hoofdletter gevoelig.
Tik voor de gein ook eens een fout wachtwoord in.
Bij 3x een fout wachtwoord wordt Excel afgesloten.
 
Laatst bewerkt:
Hoi Edmoor. Mooi stukje code. Dat is inderdaad waar ik ook mee bezig ben. Ik hang deze zeer zeker apart op een haakje en als het mij echt niet lukt dan stap ik over naar jouw code. Het aantal malen dat er is ingelogd en het automatisch na 3x afsluiten van Excel vind ik niet zo zeer belangrijk. Dat zal er dan bij het gebruiken van jouw code uit gaan. De datum van aanmaken logaccount moet vermeld gaan worden en dan alle datums met tijden van inloggen alsmede het uitloggen. Per gebruiker volgt hier dan een overzicht van. Dit is om inzichtelijk te maken wie wanneer en bijvoorbeeld welk factuur heeft ingevoerd.

Verder voldoet jouw code aan mijn eisen. Toch ben ik een beetje eigenwijs. Het lukt wel met de code die ik heb gemaakt en daar wil ik dan ook op doorboorduren. Feitelijk gezien ben ik net zo ver als jij en heb ik mijn eisen er reeds gedeeltelijk in verwerkt. Dus het zou zonde van mij tijd zijn om mijn code dan maar aan de kant te gooien.

Wel een leuke animatie heb jij gemaakt bij het invoeren van een onjuiste ingave. Ik zal deze niet gebruiken, maar ik vind hem wel erg grappig.

Toch vraag ik mij af hoe het komt dat in jouw gebruikersnaam wel enkel cijfers kunnen staan. De cellen waar deze gegevens in staan zijn immers ook van het type Standaard. Waardoor komt het dan dat het bij mij ineens anders wordt.

Wel haal ik de match uit mijn code en vervang ik deze voor een gedeelte van jouw code omdat ik hiermee de gebruikersnaam precies moet invoeren. De jokertekens die gebruikt kunnen worden bij Match en VLookUp, ben ik dan kwijt. Ik had helemaal niet nagedacht over een LastRow. Stom van mij. :rolleyes:.

Bedankt!! Ik ga even iets veranderen en kom er op terug.

VenA. Ook jij bedankt. Echter jouw code is mij onduidelijk.
 
Dat documentje was dan ook bedoeld als voorbeeld waar je wellicht iets van kan gebruiken in je eigen code. De feitelijke controle wordt gedaan door de Functie CheckPassword. Deze geeft een True terug als de combinatie van gebruikersnaam en wachtwoord klopt en anders een False. Tevens regelt deze het bijhouden van de laatste inlogdatum en het aantal keren dat de gebruiker heeft ingelogd.

Dat is een simpele functie waar je dan die controle op 1 plek hebt en die je uiteraard kan aanpassen zoels je wenst :)
 
Code:
Private Sub M_snb()
  User = 346
    
  MsgBox IIf(Sheet1.Columns(1).Find(User) Is Nothing, "Beste " & User & Replace(",~~Onbekende gebruiker en/of wachtwoord.~~Probeer opnieuw", "~", vbLf), "Hallo " & User)
End Sub

Maar ik blijf het overbodig vinden:
Code:
Private Sub M_snb()
  if Sheet1.Columns(1).Find(environ("username")) Is Nothing then MsgBox "U bent voor dit bestand niet gerechtigd"
End Sub
 
Laatst bewerkt:
SNB, Vind ik ook mooi, kort, begrijpelijk en logisch. Ik ga eens kijken. Voorlopig heb ik een zwaar probleem want met het back-uppen van mij HDD heeft mijn HDD van mijn persoonlijke laptop de geest gegeven. Doet nu even helemaal niets meer en gaat naar de Data Recovery. De zogenoemde click of death heeft eerst zijn intrede gedaan waarna mijn laptop vastloep en vervolgens bij het herstarten van mijn laptop gaf deze ineens blauw scherm met de melding Unmountable Boot Volume. Na het veilig stellen van nog benaderbare bestanden, voor zover ik nog kon, hield de HDD er echt mee op en ben ik tot nu toe 80% van mijn data kwijt en mijn vorige backup is wegens overschrijven verloren gegaan. Dus zit nu op een bedrijfs laptop.
 
Succes met het terughalen van je werk !
 
Hoi Edmoor,

Ik ben even bezig geweest met jou code, maar kwam erachter dat die code niet helemaal werkt. Of datgene wat ik toevoeg kan cq. mag niet.

Onderstaand de code die ik op jouw code het getest.
Ik wil namelijk dat er wordt aangegeven dat als de username niet bekend is dat hier een melding van komt, maar ook als het wachtwoord niet klopt.

Code:
Function CheckPassword() As Boolean
    Dim LastRow As Long
    Dim Gebruiker As String
    Dim Wachtwoord As String
    Dim i As Long
    
    CheckPassword = False
    
    With Sheets("Gebruikers")
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastRow
            If Trim(txtGebruiker) = Trim(.Cells(i, 1)) Then
                If Trim(txtPassword) = Trim(.Cells(i, 2)) Then
                    .Cells(i, 3) = Now
                    .Cells(i, 4) = .Cells(i, 4) + 1
                    CheckPassword = True
                    Exit Function
                Else
                    MsgBox ("WW onjuist")
                    Exit Function
                End If
            Else
                MsgBox ("GN niet bekent")
                Exit Function
            End If
        Next i
    End With
End Function

Je zult deze aangepaste code alleen even zelf moeten vervangen in je eigen bestand.

Wat mij opviel is dat nu enkel rij 2 wordt gevonden. Alle gebruikersnamen onder rij 2 worden niet gezien waardoor de melding:"GN niet bekend" verschijnt.

Ik hoor graag je reactie.

SNB Dank je voor het medeleven. Ik hoop inderdaad dat alle bestanden terug kunnen komen. Zeker omdat er bestanden op staan die nog niet waren overgezet en ik wel nodig heb om geld mee te verdienen. Hoop dat het recovery bedrijf er iets mee kan. Schijf doet helemaal niets meer. Kost wel behoorlijk wat geld, maar goed dat is dan jammer. Dom van mij dat ik te laat was met een backup. Mijn bedrijfscomputers worden 2 keer per dag gebackupt, maar ja de persoonlijke computers vielen er buiten. Meteen maar aangepast en nu dus niet meer. Nu gaat alles in de backup.
 
Laatst bewerkt:
Dat is in mijn code ook niet de juiste plek om de melding over een onbekende gebruiker of onjuist wachtwoord te geven, of je moet in de code van de knop ook aanpassingen doen. Verder controleer ik ook niet of de gebruiker bestaat maar alleen of de combinatie van gebruikersnaam en wachtwoord goed is.

Je kan bijvoorbeeld dit gebruiken om te controleren of een gebruikersnaam aanwezig is:
Code:
Function GebruikerBestaat() As Boolean
    GebruikerBestaat = False
    With Sheets("Gebruikers")
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastRow
            If LCase(txtGebruiker) = LCase(.Cells(i, 1)) Then
                GebruikerBestaat = True
                Exit Function
            End If
        Next i
    End With
End Function

Achter de knop zet je dan als eerste dit:
Code:
If Not GebruikerBestaat Then MsgBox ("GN niet bekend")

Ja, met een d ;)
 
Laatst bewerkt:
Hoi Edmoor. Eh ja klopt bekend is in deze met een d en niet met een t.

Verder dat je op wachtwoord en gebruikersnaam controleerde dat had ik inderdaad wel gezien. Ik wilde slechts een uitbreiding op de code hebben zodat dit ook gebeurde. Zat ik er even naast.

Ik ga kijken of het mij nu wel gaat lukken.

Bedankt.
 
Heb de volgende code aardig werkzaam gekregen en zonder function. Ik weet ben eigenwijs hihi.

Code:
Private Sub cb_Test_Click()

Dim LastRow As Long
Dim i As Long

    With Sheets("Gebruikers")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
                
        For i = 2 To LastRow
        
            If Trim(Tb_User) = Trim(.Cells(i, 1)) Then
                If Trim(Tb_Code) = Trim(.Cells(i, 2)) Then
                    MsgBox ("Welkom " & Trim(Tb_User))
                    Unload Me
                    Sheets("Gebruikers").Select
                    .Cells(i, 3) = Now
                    .Cells(i, 4) = .Cells(i, 4) + 1
                    Exit Sub
                Else 'If Trim(Tb_Code) <> Trim(.Cells(i, 2)) Then
                    MsgBox ("Verkeerd WW")
                End If
            End If
        
        Next i
        
        '----------
        MsgBox ("Beste " & user & vbNewLine & vbNewLine & _
            "U heeft een verkeerd gebruikersnaam of wachtwoord ingevoerd." _
            & vbNewLine & vbNewLine & "Probeer opnieuw"), vbInformation
        '--------------
        
        Tb_User = vbNullString
        Tb_Code = vbNullString
        Tb_User.SetFocus
        Exit Sub
    End With
End Sub

Waar ik alleen tegenaan loop is datgene wat tussen de strepen staat. De msgbox.
Deze mag enkel komen als de gebruikersnaam niet goed is.

Met If Trim(Tb_User) <> Trim(.Cells(i, 1)) Then en met If Not Trim(Tb_User) = Trim(.Cells(i, 1)) Then, lukt het niet.

Daar jij net al aangaf dat het niet in de code past, al lijkt het logisch te staan, heeft dit dan te maken met de function en dat je daarom geen ontkenning kan geven. De function is veranderd is Private Sub Cb_Test_Click.

Alles werkt, maar ik kan deze ontkenning er niet in plaatsen.
 
Ik kan er niks van zeggen zonder de hele procedure te zien want die is nu heel anders dan in mijn voorbeeld document. Daarnaast staat wat je tussen de strepen hebt gezet op een totaal verkeerde plek t.o.v. wat de code nu doet. De simpele uitbreiding die ik gaf was voldoende geweest.
 
Laatst bewerkt:
VenA. Ook jij bedankt. Echter jouw code is mij onduidelijk.
hebben ze <F8> voor uitgevonden.

In het voorbeeldje een inlogscherm met een logfile. Jim met ww 123 zal iets anders doen dan Beheer met ww Beheer.

Ik weet ben eigenwijs hihi
dat mag maar dan moet je wel begrijpen wat je aan het doen bent.:d
 

Bijlagen

Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan