由于“登录”窗体是用户进入用户权限管理系统时首先看到的窗体,所以简洁方便是其主要的特点。下面将从创建窗体、显示已经注册的用户名和实现登录功能三个方面进行介绍。
1.创建“登录”窗体
利用Excel VBA创建各种窗体,在“用户权限管理系统”工作簿中创建“登录”窗体的具体操作步骤如下:
将创建的“用户权限管理系统”工作簿保存为“启用宏的工作簿”,选择“开发工具”选项卡,如图11-14所示。在“代码”组中单击“Visual Basic”按钮,打开“Microsoft Visual Basic for Application”主窗口,如图11-15所示。
选择“插入”→“用户窗体”菜单项,创建一个用户窗体并将其命名为“UserForm1”,同时弹出“工具箱”浮动对话框,如图11-16所示。
右击该窗体,在弹出菜单中选择“属性”选项,打开“属性-UserForm1”对话框,在“Caption”文本框中输入“登录窗口”,刚创建的窗体的名称已被设置为“登录窗口”,如图11-17所示。

图11-14 “开发工具”选项卡

图11-15 “Microsoft Visual Basic for Application”窗口

图11-16 创建的用户窗体

图11-17 重命名创建的用户窗体
在“工具箱”对话框中单击“标签”按钮
,在适当位置单击创建一个合适大小的标签,在其“属性”对话框的“Caption”文本框中输入“用户名”,即可将其内容设置为“用户名”,如图11-18所示。在“属性”列表单击“Font”文本框右侧的“字体”按钮
,打开“字体”对话框,如图11-19所示。

图11-18 设置标签的内容

图11-19 “字体”对话框
在“字体”下拉列表中选择“微软雅黑”选项;在“字形”下拉列表中选择“粗体”选项;在“大小”下拉列表中选择“四号”选项,单击“确定”按钮返回“登录窗口”窗体,即可看到设置字体属性后的标签效果,如图11-20所示。
在“工具箱”对话框中单击“复合框”按钮
,在适当位置单击创建一个合适大小的复合框,如图11-21所示。

图11-20 设置字体属性后的标签效果

图11-21 创建一个复合框
再创建一个标签并将其“Caption”属性设置为“密码”,在“工具箱”对话框中单击“文字框”按钮
,拖动鼠标即可添加一个文字框,如图11-22所示。
添加命令按钮控件,利用这些控件可以实现登录和注册操作。在“工具箱”对话框中单击“命令”按钮
,在创建窗体中绘制一个命令按钮,其默认名称为CommandButton1,如图11-23所示。

图11-22 添加一个文字框

图11-23 绘制一个命令按钮
在“属性”列表的“Caption”文本框中输入“登录”,按照设置标签字体属性的方法设置该命令按钮的字体属性,如图11-24所示。再绘制一个命令按钮并将其“Caption”属性设置为“注册”,在其中设置其字体属性,如图11-25所示。

图11-24 设置后的命令

图11-25 添加“注册”命令按钮
至此,登录窗体基本创建完毕。
2.显示已经注册的用户名
为确保用户可以在“登录窗口”的“用户名”下拉列表中选择已经注册的用户名,需要在启动“登录窗口”窗体时,系统自动在该下拉列表文本框中,加载“用户权限”工作表中所有已经注册用户名。既方便用户的输入,又可使创建的用户权限管理系统功能更加完善。
实现显示已经注册的用户名的具体操作步骤如下:
在“Microsoft Visual Basic for Application”主窗口左边列表中右击创建的“UserForm1”窗体,在弹出菜单中选择“查看代码”选项,进入“UserForm1代码编辑”窗口,如图11-26所示。
在代码编辑区域“对象”下拉列表中分别选择“UserForm”选项,在右“事件”下拉列表中选择“Activate”选项,即可看到系统自动添加的代码,如图11-27所示。

图11-26 “UserForm1代码编辑”窗口

图11-27 系统自动添加的代码
删除其中的UserForm_Click事件处理程序代码框架,在UserForm_Activate事件代码框架中输入可以显示所有已注册用户的代码,如图11-28所示。
UserForm_Activate事件代码框架完整代码如下:

上述代码作用是在用户激活“用户权限”工作表时自动给“用户名”复合框加载显示内容。其中“Sheets("用户权限").[B4].CurrentRegion.Rows.Count”,表示在“用户权限”工作表内从单元格B4开始连续有数据的单元格的总行数。
在“Microsoft Visual Basic for Application”主窗口中选择“运行”→“子过程/子窗体”菜单项,即可在“登录窗口”窗体的“用户名”下拉列表中显示所有已经注册的用户名,如图11-29所示。

图11-28 输入可以显示所有已注册用户的代码

图11-29 显示所有已经注册的用户名
3.实现登录功能
给“登录窗口”窗体中各个组件添加相应代码,以实现登录功能。具体操作步骤如下:
在“Microsoft Visual Basic for Application”主窗口中双击“登录”命令按钮,即可进入其代码编辑窗口,在其中输入该命令按钮的功能代码,如图11-30所示。
代码如下:(https://www.daowen.com)



图11-30 给“登录”按钮添加密码
上述代码先获取用户在“登录窗口”窗体中输入的用户名和密码,使用VLOOKUP函数返回“用户权限”工作表中所有已经注册的用户名和密码;使用If函数来判断用户输入的密码是否与已注册的密码相同。如不相同则弹出“输入密码错误”提示信息,否则将继续使用SelectCase语句继续判断其用户级别,并对不同用户级别进行不同操作;在用户成功登录完毕后隐藏登录窗口、实现工作簿最大化,将“用户权限管理系统说明”变成当前活动工作表。
不同级别的用户,可以进行的操作也不相同,具体的表现如下:
● 一般用户:不仅需要隐藏“用户权限”工作表并调用Protect函数对其他工作表进行保护;还需要调用Hiding函数隐藏与该用户无关的信息。
● 高级用户:需要隐藏“用户权限”工作表并调用Protect函数对其他工作表进行保护。
● 管理员:不进行任何操作,因为管理员具有任意权限。
在“Microsoft Visual Basic forA pplication”主窗口中选择“插入”→“模块”菜单项,即可查看一个模块且其名称为“模块1”。双击该模块,在其代码编辑窗口中输入定义变量的代码,如图11-31所示。代码如下:


图11-31 输入定义变量的代码

图11-32 添加Protect函数
在“UserForm1代码编辑”窗口添加Protect调用函数,以实现对工作表的保护,如图11-32所示。Protect函数的具体代码如下:


上述代码先使用ForEach循环语句获取当前工作簿的所有工作表,对这些工作表用密码Spwd进行保护。
由于Spwd变量在其他窗体中也会被用到,所以需要将其定义为全局变量,如图11-33所示。在“UserForm1代码编辑”窗口最上方输入如下代码:


图11-33 将Spwd定义为全局变量

图11-34 添加Hiding调用函数
在“UserForm1代码编辑”窗口添加Hiding调用函数,以实现隐藏工作表的目的,如图11-34所示。Hiding函数的具体代码如下:


上述代码先获取当前工作簿中所有工作表book,激活所有工作表,使用IF函数判断当前工作表名称,如果不是“用户权限管理系统说明”和“用户权限”,则在每个工作表中比较所有员工编号,将并非当前员工的员工资料信息全部隐藏起来,而对“用户权限管理系统说明”工作表不进行隐藏操作,因为该工作表对所有的用户都可见。
至此,“一般用户”级别的用户登录后,即可实现保护和隐藏工作表操作。但当“高级用户”或“管理员”进行登录时,需要在“UserForm1代码编辑”窗口中重新设置UserForm_Activate事件处理程序,使在启动“登录窗口”窗体时,系统自动取消对工作表的保护并显示已隐藏的工作表,如图11-35所示。
在UserForm_Activate代码框架的“Sheets("用户权限").Activate”语句前面输入如下代码:

上述代码先设置保护工作簿的密码,分别调用Unprotect函数和Show函数实现解开受保护的工作表和显示隐藏工作表功能;最后设置“用户权限”工作表可见。这样,“登录窗口”窗体在激活时工作簿的全部操作均为可见,再根据不同用户级别进行限制性操作。

图11-35 重新设置UserForm_Activate事件处理程序

图11-36 定义Unprotect函数
由于在重新设置UserForm_Activate事件处理程序过程中需要调用Unprotect函数来解开受保护的工作表,所以需要在“UserForm1代码编辑”窗口中定义Unprotect函数,如图11-36所示。该函数的具体代码如下:


上述代码作用是使用IF语句判断当前工作簿中的所有工作表是否处于被保护状态,如果是,则应Spwd对其进行解密。
在“UserForm1代码编辑”窗口中定义Showing函数,如图11-37所示。
该函数的具体代码如下:

上述代码作用是显示当前工作簿中所有工作表并通过选择单元格A1,取消对整个工作表的选择。
对“登录窗口”窗体的关闭事件进行处理。在“UserForm1代码编辑”窗口的“对象”下拉列表中分别选择“UserForm”选项,在右边“事件”下拉列表中选择“Terminate”选项,在系统添加的Private Sub UserForm_Terminate()事件处理程序中添加相应代码,以实现在关闭“登录窗口”窗体时自动关闭工作簿,如图11-38所示。

图11-37 定义Showing函数

图11-38 对“登录窗口”窗体的关闭事件进行处理
添加后的Private Sub UserForm_Terminate()事件的完整代码如下:

上述代码作用是在关闭“登录窗口”窗体时自动关闭当前工作簿。而“ActiveWorkbook.Close(False)”表示关闭当前的工作簿,其中“False”表示自动关闭而不保存。
双击创建的“注册”命令按钮,即可进入其代码编辑窗口,在其中输入该命令按钮的功能代码,以实现打开“注册”窗体,如图11-39所示。代码如下:


图11-39 给“注册”命令按钮添加代码
上述代码的作用是当用户单击“注册”命令按钮时,即可自动隐藏“登录窗口”窗体而显示“注册”窗体。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
