时间:2024-06-25 10:24
☆本期内容概要☆
用户窗体设置、用户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文档,在关闭时,会自动保存数据。 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。