Ik heb een klein dingetje met Unload Me.
Deze kan niet in een code worden uitgevoerd als de code verder nog loopt. Er volgt dan een automatiseringsfout met de mededeling dat de verbindingen met het aangeroepen object met clients is verbroken, waarna Exel 2007 en VBA vastloopt.
Na wat uitzoekwerk bleek de automatiseringsfout in TextBox_AfterUpdate te zitten en daar ben ik in gaan aanpassen. Let even niet op al die msgboxen die er verder in staan, want die staan er hooguit in om uit te zoeken wat er precies gebeurd en om even niet verdwaald te raken in het heen en weer springen van sub naar sub.
Vanuit mijn inlogscherm en na het invoeren van het wachtwoord wordt met de knop enter meteen de code achter TExtBox_ AfterUpdate uitgevoerd. Ik heb dus geen knop meer voor inloggen of annuleren. Dit om onnodig OK klikken etc te voorkomen.
Nu kan ik, omdat ik de Unload Me in TextBox_Exit heb geplaatst, wel het formulier zonder probleem van het scherm laten verdwijnen en werkt de Unload Me dus wel. Echter wat mij opvalt is dat TextBox_AfterUpdate en TextBox_Exit procedure 2 maal wordt aangesproken.
Mijn gedachten is dat zodra ik in Exit de opdracht Unload me geef er bij het ontladen van het formulier eerst een wijziging in de textboxen plaatsvindt. Dit zou dan het voor de tweede maal aanspreken van AfterUpdate en Exit verklaren. Zodra ik de msgboxen, wat de bedoeling is, verwijder of uitschakel, dan merk ik niet van het 2 maal aanspreken en wordt het formulier direct gesloten.
Klopt mijn gedachtegang en dus dat dit normaal is en slechts wordt ontdekt vanwege de msgboxen?
Edit:
Om de code nog meer te laten inzien, volgt sub Log onderstaand. Wellicht niet nodig, maar dan is er op deze wijze meer te volgen. En ook hierin volgen er nog een paar kleine wijzigingen.
Deze kan niet in een code worden uitgevoerd als de code verder nog loopt. Er volgt dan een automatiseringsfout met de mededeling dat de verbindingen met het aangeroepen object met clients is verbroken, waarna Exel 2007 en VBA vastloopt.
Na wat uitzoekwerk bleek de automatiseringsfout in TextBox_AfterUpdate te zitten en daar ben ik in gaan aanpassen. Let even niet op al die msgboxen die er verder in staan, want die staan er hooguit in om uit te zoeken wat er precies gebeurd en om even niet verdwaald te raken in het heen en weer springen van sub naar sub.
Vanuit mijn inlogscherm en na het invoeren van het wachtwoord wordt met de knop enter meteen de code achter TExtBox_ AfterUpdate uitgevoerd. Ik heb dus geen knop meer voor inloggen of annuleren. Dit om onnodig OK klikken etc te voorkomen.
Nu kan ik, omdat ik de Unload Me in TextBox_Exit heb geplaatst, wel het formulier zonder probleem van het scherm laten verdwijnen en werkt de Unload Me dus wel. Echter wat mij opvalt is dat TextBox_AfterUpdate en TextBox_Exit procedure 2 maal wordt aangesproken.
Mijn gedachten is dat zodra ik in Exit de opdracht Unload me geef er bij het ontladen van het formulier eerst een wijziging in de textboxen plaatsvindt. Dit zou dan het voor de tweede maal aanspreken van AfterUpdate en Exit verklaren. Zodra ik de msgboxen, wat de bedoeling is, verwijder of uitschakel, dan merk ik niet van het 2 maal aanspreken en wordt het formulier direct gesloten.
Klopt mijn gedachtegang en dus dat dit normaal is en slechts wordt ontdekt vanwege de msgboxen?
Code:
Private Sub Tb_Wachtwoord_AfterUpdate()
'----------------------------------------------
'Vergelijking vermoedelijk niet nodig
'If Tb_Wachtwoord = vbNullString Then
'MsgBox "AFTERUPDATE: Geen waarde. U verlaat de sub" 'Tijdelijke melding. Verwijderen na juist lopen code
'Exit Sub
'End If
'----------------------------------------------
'Call log moet blijven staan
MsgBox "naar log" 'Tijdelijke melding. Verwijderen na juist lopen code
Call log
'----------------------------------------------
'Indien bovenstaande vergelijking niet nodig dan is onderstaand ook niet nodig
'MsgBox "wis gebruiker en wachtwoord"'Tijdelijke melding. Verwijderen na juist lopen code
'Tb_Gebruiker = vbNullString
'Tb_Wachtwoord = vbNullString
'----------------------------------------------
End Sub
Private Sub Tb_Wachtwoord_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "EXIT: Dit formulier wordt uit het geheugen gewist" 'Tijdelijke melding. Verwijderen na juist lopen code
Unload Me
End Sub
Edit:
Om de code nog meer te laten inzien, volgt sub Log onderstaand. Wellicht niet nodig, maar dan is er op deze wijze meer te volgen. En ook hierin volgen er nog een paar kleine wijzigingen.
Code:
Private Sub log()
Dim LastRow As Long
Dim Logregel As Long
Dim GebruikerOk As Boolean
Dim WachtwoordOk As Boolean
Dim LogTijd As Date
Dim InlogTijd As Date
Dim UitlogTijd As Date
Dim SessieDuur As Double
Dim i As Long
Dim j As Long
With Sheets("Gebruikers")
LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
If Trim(Tb_Gebruiker) = Trim(.Cells(i, 1)) Then
GebruikerOk = True
If Trim(Tb_Wachtwoord) = Trim(.Cells(i, 2)) Then
WachtwoordOk = True
For j = 1 To 12
If InlogOk Then
.Cells(i, j).Interior.ColorIndex = -4142 'Standaard
Else
.Cells(i, j).Interior.ColorIndex = 43 'Groen
End If
Next j
End If
End If
If GebruikerOk = True And WachtwoordOk = True Then
LogTijd = Now
If Not InlogOk Then 'INLOGGEN
InlogOk = True
Logregel = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Row
Gebruikersnaam = .Cells(i, 1)
Gebruiker = .Cells(i, 3)
'If .Cells(i, 8) <> vbNullString Then
' LaatsteInlog = .Cells(i, 8)
'Else
'LaatsteInlog = "01-01-1900 00:00:00"
'End If
Sheets("Gebruikers").Select
.Cells(i, 7) = .Cells(i, 7) + 1 'Aantal maal login
.Cells(i, 8) = LogTijd
.Cells(i, 8).NumberFormat = "dd-mm-yyyy hh:mm:ss"
.Cells(i, 10) = "1" 'Status: Gebruiker Ingelogd
Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 6) = Array(Logregel, .Cells(i, 1), .Cells(i, 3), _
.Cells(i, 4), .Cells(i, 5), LogTijd)
Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 6).NumberFormat = "dd-mm-yyyy hh:mm:ss"
'MsgBox .Cells(i, 4).Interior.Color
'Frm_InlogID.Show
Else 'UITLOGGEN
.Cells(i, 9) = LogTijd
.Cells(i, 9).NumberFormat = "dd-mm-yyyy hh:mm:ss"
.Cells(i, 10) = "0" 'Status: Gebruiker Uitgelogd
With Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp)
.Cells(, 7) = LogTijd
.Cells(, 7).NumberFormat = "dd-mm-yyyy hh:mm:ss"
InlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 6)
UitlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 7)
SessieDuur = UitlogTijd - InlogTijd
.Cells(, 8) = SessieDuur
.Cells(, 8).NumberFormat = "[hh]:mm:ss"
End With
InlogOk = False
Gebruiker = vbNullString
Gebruikersnaam = vbNullString
LaatsteInlog = vbNullString
'Call Logscherm
'Me.Hide
UserForm1.Show 'Userform geeft de melding dat men is uitgelogd en verdwijnt automatisch weer na 3 seconden om door te gaan
'met de procedure
End If
Me.Hide
Exit Sub
End If
Next i
If Not GebruikerOk Then
MsgBox ("U heeft een ongeldige gebruikersnaam ingevoerd." _
& vbNewLine & vbNewLine & "Probeer opnieuw"), vbInformation
Else
If Not WachtwoordOk Then
MsgBox ("U heeft een ongeldig wachtwoord ingevoerd." _
& vbNewLine & vbNewLine & "Probeer opnieuw."), vbInformation
End If
End If
If Not InlogOk Then
Tb_Gebruiker = vbNullString
Tb_Wachtwoord = vbNullString
Tb_Gebruiker.SetFocus
Else
Tb_Wachtwoord = vbNullString
Tb_Wachtwoord.SetFocus
End If
End With
End Sub
Laatst bewerkt: