设置密码掩码(PasswordChar)为*

时间:2024-06-25 10:24


设置密码掩码(PasswordChar)为*

☆本期内容概要☆

用户窗体设置、用户ID+密码登录设计

设计思路、代码分步演示

前两天我们分享了一个完整的EXCEL小应用【中医诊所收费系统:【重磅】Excel VBA 应用分享/中医诊所收费系统/Excel+ListBox版】,打开文件就是一个用户登录界面,今天我们就一起来动手重新做一个这样的登录界面,用户名+密码登录EXCEL,具体代码可能与中医诊所收费系统中的不一样,我们不去管它,条条大路通罗马。

设计思路与过程分步演示:

1、新建一个excel文件,另存为启用宏的工作簿,名称随意,我这里命名为:窗体登录(用户名+密码).xlsm

2、在excel文件中,把sheet1重命名为“Main”,作为主界面使用,在其上插入一个命令按钮CmdLogin,Caption改为“重新登录”。这个主界面今后可以作为进入其他窗体、表页的入口。目前就放一个重新登录的按钮。

图片安徽好立成纺织服饰有限公司

3、插入一张工作表,重命名为“tb用户”,输入用户信息:

图片

这张表存有重要信息,我们最后会把它深度隐藏,在工作表界面是看不到它的。要是能看到,密码岂不是形同虚设?

4、打开VBE,即Visual Basic编辑器,插入用户窗体:

图片

5、把窗体名称修改为Usf_Login,Caption修改为“用户登录”:

图片

6、打开工具箱,在窗体上添加控件:

图片

(1)标签:LbTitle,Caption系统登录;Label1,Caption“用户ID:”;Label2,Caption“密  码:”,字体大小位置适当调整,背景调成透明。

图片

其他控件属性调整如法炮制,不再赘述。如果没有看到属性窗口,可以右击任意控件,在弹出的菜单中点“属性”,然后点击相应控件则切换到该控件的“属性”。

图片

(2)文本框:TxbUserID,TxtPassWord,用来输入信息。在TxtPassWord的属性中,设置密码掩码(PasswordChar)为*。

(3)命令按钮:CmdLogin,Caption“登录”,CmdExit,Caption“退出”。

7、编写代码:

(1)双击用户窗体,点选右侧方法与事件,选择Activate或者Initialize,输入代码:

Dim arr()Dim iRow As Integer, iCol As IntegerDim PsW As StringPrivate Sub UserForm_Activate()    ThisWorkbook.Activate    Sheets("tb用户").Activate    With Sheets("tb用户")        iRow = .UsedRange.Rows.Count        iCol = .UsedRange.Columns.Count        arr = .Range(Cells(1, 1), Cells(iRow, iCol)).Value    End With    'StopEnd Sub如果用Initialize方法,过程名称就改成:Private Sub UserForm_Initialize()

代码简析:定义模块级变量,以便在本窗体其他过程中引用它们的值。窗体启动,读取用户信息表到数组arr(),用于后续登录时的信息比对。Activate与Initialize在窗体启动时, 毕节金海湖新区焦小帅广告有限公司都会运行其中的代码, 安达市星艾净水器有限公司区别是Activate方法下,企业-展惠月蔬菜有限公司窗体重新激活就会再次运行代码,Initialize只在窗体启动时运行,再次激活时不会运行。

(2)双击登录按钮,输入代码:

Private Sub CmdLogin_Click()    '点击“登录”按钮    '判断一下有没有输入用户ID,    '如果为空,提示信息,然后退出    If Me.TxbUserID = "" Then        MsgBox "请输入用户ID!"        Exit Sub    End If        '根据输入的用户ID,在用户信息(arr())中查找有没有此用户ID    '如果循环结束,仍然没有找到    '则表明没有此用户,通过变量k来判断,如果找到,使之为1    '如果找到匹配的用户ID,再比较用户输入的密码与arr()中的密码是否一致    '如果一致,退出窗体,结束循环(Exit For),也可以直接结束过程(Exit sub)    For i = 1 To iRow        If arr(i, 2) = Me.TxbUserID Then            k = 1            If CStr(arr(i, 4)) = Me.TxtPassWord Then                Sheets("Main").Activate                Sheets("tb用户").Visible = 2    '深度隐藏                currUserID = arr(i, 2)                currUserName = arr(i, 3)                '把登录用户信息记到Sheets("Main")                Sheets("Main").Range("A1") = "用户ID:"                Sheets("Main").Range("A2") = "用户姓名:"                Sheets("Main").Range("B1") = currUserID                Sheets("Main").Range("B2") = currUserName                LoginStatus = 1                Unload Me                Exit For            Else                MsgBox "密码不正确,请重新输入!"                Me.TxtPassWord = ""                Me.TxtPassWord.SetFocus            End If        End If    Next    If k = 0 Then        MsgBox "不存在此用户,请重新输入!"    End IfEnd Sub

代码简析:代码块亦有注释。

CmdLogin的Click事件,安徽好立成纺织服饰有限公司把用户输入的用户ID与密码跟arr()中的数据进行比对,

如果找到用户ID,则比较密码,如果密码相符,则登录成功,退出窗体,如果密码不符,则不能登录,清空已输入的密码,并把焦点放到TxtPassWord,以便再次输入;

如果没有找到用户ID则提示用户重新输入用户ID。

这里有个公共变量LoginStatus,如果用户正常登录,其值为1,在后面退出窗体的代码中会用到。

公共变量currUserID,currUserName存下当前用户的信息,供后续过程使用,比如凭证制单中的制单人,凭证审核中的审核人等需要用到当前用户名称的地方。

关于用户ID与密码校验,还有其他方法:

(a)Vlookup工作表函数:查找用户ID对应的密码值,与TxbPassWord的值进行比较,再进行相应处理。

(b)SQL语句:查询“tb用户”表中,用户ID=TxbUserID的密码。这种方法要建立数据连接,我们前面分享过【Excel VBA 凭证打印/SQL连接Eexcel文件/Listview控件/CommandButton命令按钮控件】这里不再重复,有兴趣的朋友可以自行测试研究。这种方法还可以用于数据存储在Access数据库的情况,我们后续可能会遇到,界时再详细阐述。

(3)继续输入窗体退出代码:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)    If LoginStatus = 0 Then    ThisWorkbook.Save        If Workbooks.Count > 1 Then            ThisWorkbook.Close savechanges:=False        Else            Application.Quit        End If    End IfEnd Sub

代码简析:窗体退出,包括用户点击窗体右上角的X按钮。主要是防止用户在没有正确输入用户ID、密码的情况下,点击窗体右上角的X按钮退出窗体,从而直接进入EXCEL工作簿。

如果用户正常登录,此时LoginStatus的值应为1,如果为0,则表明用户非正常进入,我们就退出EXCEL文件。

(4)CmdExit(退出)按钮点击事件:

Private Sub CmdExit_Click()    Unload MeEnd Sub

(5)ThisworkBook

图片

后来又修改了代码,图就不改了。

Private Sub Workbook_BeforeClose(Cancel As Boolean)    ThisWorkbook.Activate    Sheets("tb用户").Visible = 2    Sheets("Main").Range("A1:B2").ClearContents    ThisWorkbook.Save    If Workbooks.Count > 1 Then        ThisWorkbook.Close savechanges:=False    Else        Application.Quit    End IfEnd SubPrivate Sub Workbook_Open()    UsF_Login.ShowEnd Sub

代码简析:

工作簿打开时,激活UsF_Login窗体,等待用户输入用户ID与密码进入。

工作簿关闭时,先把"tb用户"表深度隐藏,再保存工作簿,如果仅有本工作簿处于打开状态,则关闭EXCEL程序,否则仅关闭本工作簿,保持其他工作簿不被关闭。

(6)插入用户模块(如果已有则不用插入),名称应该是“模块1”,可改可不改,这里我改为“MyModule”,以示区别。设置Public变量:

Public LoginStatus As IntegerPublic currUserID As StringPublic currUserName As String

用户登录成功后,LoginStatus的值为1,在用户窗体退出代码中用到此变量,如果为1,则窗体退出时仅仅是退出窗体,EXCEL文件正常打开,包括后续点击重新登录时,再点击“退出”按钮,程序不会退出。如果为0,则表明用户没有正常登录,我们直接退出EXCEL。

(7)“Main”工作表中CmdLogin(重新登录)命令按钮:

Private Sub CmdLogin_Click()    UsF_Login.ShowEnd Sub

8、给VBA工程添加密码,保护工程。防止别人进入VBE编辑器查看到密码。保护密码这里设为0,各位可自行设置。

图片

9、如果要查看、修改“tb用户”表信息,暂时可以在VBE窗口把它的visible属性改为-1,也可以使用代码显示它,甚至(也应该)通过窗体来增加、修改、删除用户信息,由于时间关系,就不再写代码了,以后再完善。基本差不多了,我们来看一下成品:

图片

另外,该EXCEL文档,在关闭时,会自动保存数据。 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

发表评论 (131人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称: 内容: 验证码:
点击我更换图片
最新评论
回到顶部

Powered by 安徽好立成纺织服饰有限公司 RSS地图 HTML地图

Copyright 站群系统 © 2013-2024 SSWL 版权所有
安徽好立成纺织服饰有限公司-设置密码掩码(PasswordChar)为*