当我们在处理或传输Excel电子表格的时候,如果涉及到比较重要的数据,都会考虑到文档的安全问题。
为此,我们可以使用单元格限制修改输入、借用VBA加以限制用户使用某种工具或菜单等。这一切,都是为了Excel电子表格的安全着想。
本文,给大家介绍一种更为安全的方法,那就是,Excel登陆机制的实现。意思就是说,当我们双击Excel电子表格企图打开的时候,会提示登陆,如果登陆成功,就能够打开电子表格进行各种操作,如果登陆失败,那么,将无法成功打开Excel电子文档。
我们先看下图吧,最终的实现效果就是,当我们双击Excel电子表格时,会看到如下图的登陆窗口。

填写正确的用户名和密码之后,才能登陆成功。如果登陆成功,就可以对电子表格进行日常的操作。否则,就只能点击退出或关闭,从而就不能打开Excel电子表格了。
要想实现这样的功能,有一定难度,但是,并非不可以实现,借助工作表并配合简单的VBA代码和用户窗体就可以实现。
一、保存用户名和密码的工作表
要想实现登陆,那么,必须要有依据,这个依据就是,我们将用户名和密码事先保存在EXCLE工作薄的某一个工作表中,登陆的时候,只需要判断表格中是否有此用户名和密码即可。有则登陆成功,没有则登陆失败。

表格如上图中的表,只要工作薄中的任意一个工作表,用来用户名和密码即可。如本例的工作表,名称为 UserLoginInfor ,此表中有三列,第一列是保存登陆名称,第二列保存对应的登陆密码,第三列保存用户的级别。
根据上图的表,自己建立一个这样的工作表吧,接下来,就是用户窗体和VBA的事了。
二、建立用户窗体
所谓的用户窗体,就是我们所看到的第一图的登陆窗口,那个就是用户窗体,在Excel中,我们必须插入这样的一个窗体。方法如下。
右键点击 UserLoginInfor 选择“查看代码”,如下图。

然后,我们会看到所弹出的VBA窗口,在此窗口中,执行菜单操作“插入”→“用户窗体”,如下图。

之后,我们就会看到如下图的界面了。

上图中,我们通过工具箱向窗体中插入两个标签控件、两个输入框和两个按钮。两个标签控件的Captiont属性分别为“用户名”和“密码”,两个输入框则只调整大小即可。两个按钮的Caption分别设置为“登陆”和“退出”,如此如此,所有的前期准备工作到此完成。
接下来,我们该给窗体控件增加VBA代码,以实现真正的登陆机制了。
三、登陆机制中所使用的VBA代码
①ThisWorkbook对象的代码
右键点击窗口中能够看见的ThisWorkbook,选择“查看代码”,这样,VBA代码输入小窗口就出现了。

接下来,如上图一样,选择好对象名称是Workbook,事件名称是Open,然后,如上图一样,输入VBA代码即可。
②窗体控件的VBA代码
窗体的控件的VBA代码,包括三类代码。一是登陆按钮的代码;二是退出按钮的代码;三是点击×关闭的代码。
为方便大家的学习,下面将这三类代码粘贴如下:
A、登陆按钮的代码
Dim MyLoginStatus As Single
MyLoginStatus = 0
For i = 2 To ThisWorkbook.Sheets("UserLoginInfor").UsedRange.Rows.Count
If (Trim(ThisWorkbook.Sheets("UserLoginInfor").Cells(i, 1).Value)) = Trim(TextBox1.Value) And (Trim(ThisWorkbook.Sheets("UserLoginInfor").Cells(i, 2).Value)) = Trim(TextBox2.Value) Then
MyLoginStatus = MyLoginStatus + 1
If (Trim(ThisWorkbook.Sheets("UserLoginInfor").Cells(i, 3).Value) = "最高权限") Then
ThisWorkbook.Sheets("UserLoginInfor").Visible = True
Else
ThisWorkbook.Sheets("UserLoginInfor").Visible = False
End If
End If
Next i
If (MyLoginStatus >= 1) Then
MsgBox "登陆成功", vbInformation, "系统消息"
UserForm1.Hide
Application.Visible = True
Else
MsgBox "错误的用户名和密码", vbCritical, "系统消息"
End If
B、退出按钮的VBA代码
Application.Quit
注意,以上两类代码的输入方法,直接点击“登陆”和“退出”按钮就可以进入输入模式,按照上面的代码,原原本本的照着输入就可以了。
C、×关闭的VBA代码
此类代码比较难以理解,下面直接将其事件及代码完整粘贴如下:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Quit
End Sub
四、部分代码说明
ThisWorkbook.Sheets("UserLoginInfor").Visible = True;显示UserLoginInfor工作表
ThisWorkbook.Sheets("UserLoginInfor").Visible = False;隐藏UserLoginInfor工作表
为什么要显示和隐藏这个工作表呢?因为不同的人登陆EXCEL电子表格,权限是不一样的,如果每个人登陆都能看到别人的用户名和密码,那人人都可以拿最高权限的登陆了,然后什么都可以做了。
我们的登陆机制是,只有最高权限的人登陆成功,才能看到UserLoginInfor工作表并修改这个工作表。而其它人即便登陆成功,这个表也不能看到,更不能修改了。
UserForm1.Hide;如果登陆成功,就把登陆窗体隐藏起来,这样,才不会影响EXCEL工作表的操作。