|
下面的代码是根据书上的内容做了修改的。但是有两个不明白,为什么判断用户名的时候可以直接做对比,而判断密码的时候CStr(Password.Value) 这个要使用CStr呢?用户名那里不使用却没有问题,我也测试过这两个输入的数值,是一样的,为什么会这样?
这里判断3次的机会登录,应该是exit sub清空了i这个变量的内存,所以每次就重算,那么怎样才可以做到记次呢?
Private Sub CmdOK_Click()
Application.ScreenUpdating = False
Dim us As Range, passw As Range
Dim ipassw As Long, i As Integer
i = 1
If User.Value = "" Then
MsgBox "用户名不能为空!"
Exit Sub
End If
If Password.Value = "" Then
MsgBox "密码不能为空!"
Exit Sub
End If
For Each us In Worksheets("namepassword").Range("A1:A10")
If us.Value = User.Value Then
ipassw = us.Row()
'下面的Password.Value要通过CStr才能正常,不使用就不行,而上面的us.Value却可以呢?
If CStr(Password.Value) = Worksheets("namepassword").Range("B" & ipassw).Value Then
'MsgBox "相同" '测试值
Unload Me
Application.Visible = True
Application.ScreenUpdating = True
Exit Sub
Else
'MsgBox Password.Value '测试值
'MsgBox Worksheets("namepassword").Range("B" & ipassw).Value '测试值
If i = 3 Then
MsgBox "对不起你无权打开工作簿!"
ThisWorkbook.Close savechanges:=False
Else
MsgBox "输入密码错误,你还有" & (3 - i) & "次输入机会!"
'为什么这里的i变量不会变化呢?是因为后面的exit sub退出此过程导致把变量清空?
i = i + 1
'MsgBox "输入密码不正确!"
Application.ScreenUpdating = True
End If
Exit Sub '这里做退出处理,不退出会导致后面的那个Msgbox "输入用户名不正确!"会显示
End If
End If
Next
MsgBox "输入用户名不正确!"
Application.ScreenUpdating = True
End Sub
用户登录(需改进).rar
(19.98 KB, 下载次数: 3)
|
|