UserForm MsgBox problems

J

jeq214

I have a userform that requests a password and opens up a specific sheet
depending on the password. My problem is when I enter in an incorrect
password, a MsgBox appears, but it won't go away when I hit Ok. It'll go
through the count and exit the userform. Here's my code:

Private Sub cmdOk_Click()

Dim lCount As Long

'Allow 3 attempts at password
For lCount = 1 To 3
If Me.txtPassword.Value = vbNullString Then 'Cancelled
Unload Me
Exit Sub
End If
Select Case Me.txtPassword.Value
Case "Sheet2"
ActiveWorkbook.Sheets("Sheet2").Visible = True
Unload Me
Exit For
Case "Sheet3"
ActiveWorkbook.Sheets("Sheet3").Visible = True
Unload Me
Exit For
Case Else
Answer = MsgBox("Password incorrect", vbCritical)
End Select
Next lCount

If lCount = 4 Then 'They use up their 3 attempts
ActiveWorkbook.Sheets("Sheet1").Activate
Unload Me
Exit Sub
End If
End Sub
 
J

JLGWhiz

I don't see where you are requesting the password. It needs to be inside
the for next loop if you want an opportunity to change the input, otherwise
the for next loop is evaluating the original input three time and will keep
displaying the message box.
 
P

Per Jessen

Hello

The code never allow the user to reenter a password.

Try this, just note the variable declaration has to be pasted at the very
top of the userform module.

Dim PasswordCount As Integer
Private Sub cmdOk_Click()

PasswordCount = PasswordCount + 1
If Me.txtPassword.Value = vbNullString Then 'Cancelled
Unload Me
Exit Sub
End If
Select Case Me.txtPassword.Value
Case "Sheet2"
ActiveWorkbook.Sheets("Sheet2").Visible = True
Unload Me
Exit Sub
Case "Sheet3"
ActiveWorkbook.Sheets("Sheet3").Visible = True
Unload Me
Exit Sub
Case Else
Answer = MsgBox("Password incorrect", vbCritical)
Me.txtPassword.Value = ""
Me.txtPassword.SetFocus
End Select

If PasswordCount = 3 Then 'They use up their 3 attempts
ActiveWorkbook.Sheets("Sheet1").Activate
Unload Me
End If
End Sub

Regards,
Per
 
J

jeq214

Thanks, that worked.

Per Jessen said:
Hello

The code never allow the user to reenter a password.

Try this, just note the variable declaration has to be pasted at the very
top of the userform module.

Dim PasswordCount As Integer
Private Sub cmdOk_Click()

PasswordCount = PasswordCount + 1
If Me.txtPassword.Value = vbNullString Then 'Cancelled
Unload Me
Exit Sub
End If
Select Case Me.txtPassword.Value
Case "Sheet2"
ActiveWorkbook.Sheets("Sheet2").Visible = True
Unload Me
Exit Sub
Case "Sheet3"
ActiveWorkbook.Sheets("Sheet3").Visible = True
Unload Me
Exit Sub
Case Else
Answer = MsgBox("Password incorrect", vbCritical)
Me.txtPassword.Value = ""
Me.txtPassword.SetFocus
End Select

If PasswordCount = 3 Then 'They use up their 3 attempts
ActiveWorkbook.Sheets("Sheet1").Activate
Unload Me
End If
End Sub

Regards,
Per
 
M

Mike H

Hi,

This is a bit more awkward then it seem. You never give the user a chance to
enter a second password so it evaluates the same incorrect one 3 times. Nor
can you use a counter to count the attempts because it resets every time you
click the button. this rather messy way works. I use a1 of sheet 1 to keep
the count but in practice use an out of the way cell

Private Sub cmdOk_Click()
Select Case Me.Txtpassword.Value
Case "Sheet2"
ActiveWorkbook.Sheets("Sheet2").Visible = True
Unload Me
Case "Sheet3"
ActiveWorkbook.Sheets("Sheet3").Visible = True
Unload Me
Case Else
Answer = MsgBox("Password incorrect", vbCritical)
Sheets("Sheet1").[A1] = Sheets("Sheet1").[A1] + 1
End Select
If Sheets("Sheet1").[A1] = 3 Then
Answer = MsgBox("No more tries", vbCritical)
Sheets("Sheet1").[A1] = ""
ActiveWorkbook.Sheets("Sheet1").Activate
Unload Me
End If
End Sub


Mike
 
M

Mike H

Per

passwordcount will reset to zero every time the sub terminates and goes back
to the userform so will never reach 3.

Mike
 
M

Mike H

Apologies, of course it will increment

Mike

Mike H said:
Per

passwordcount will reset to zero every time the sub terminates and goes back
to the userform so will never reach 3.

Mike
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top