EXCEL登录系统

01-04 生活常识 投稿:想和月亮私奔
EXCEL登录系统

  在工作中可能遇到这种情况,就是有一个录入工作需要多人协同完成,每个人所要录入的部份又不相同,于是就在同一个EXCEL工作簿中建立多个工作表,当某一个人录入时,只打开他需要操作的那个工作表,其他工作表自动隐藏起来,防止被误操作。
我看到网上有不少朋友在找有这个功能的表格,于是就试着做了一个,跟大家分享一下。
注意:由于EXCEL的VBA安全性非常低,网上有很多破解的方法,所以对那些数据安全性要求较高的请不要用这种方法。

一、表格部份

这个工作簿中有多个工作表,分成三类。

第一类:工作簿的第一个工作表,里面没有数据,只用于显示登录窗口,起名为 登录 。由于在VBA代码中要调用这个工作表,在实际使用时,这个名字不要改动。

第二类:工作簿的第二个工作表,里面存储了各登录人员的姓名、登录密码以及各人要操作的工作表(权限),起名为 设置 ,这个工作表的名字同样不要修改,里面的数据位置也不要改动。

第三类:工作簿的第三及以后的工作表,这些表都是登录人员要操作的表格,应根据自己的需要设置,我为了介绍方便,给他们起名为 表一 、 表二 、...,可以添加多个,表的名字也可任意。

在做上面这些表时,只要注意 登录 表的名字不要改、 设置 表的名字与数据位置不要改,其他部份可随意。

提示:如果非要改变 登录 表与 设置 表的名字,必须在EXCEL中改名后,把VBA代码中相关的名字也改过来才能正常使用。

二、VBA部份
上面表格部份完成后,就需要做VBA代码了,在EXCEL窗口按ALT+F11调出VBA窗口。
1、登录窗体
在工具栏中按 插入-用户窗体 ,添加一个窗体。
将插入的窗体调整到适当大小。

2、代码
在所添加的窗体上双击鼠标,然后把下面代码粘贴进去:


Private Sub CommandButton1_Click()
On Error GoTo 10 '当姓名与密码不对应时,会出现错误,转到10语句处理
Dim n As String
Set sh = Sheets("设置")
na = TextBox1.Text: ps = TextBox2.Text '取得登录窗口中的姓名与密码
If na = "" Or ps = "" Then MsgBox "未输入用户名或密码,不能登录", , "提示": Exit Sub
s = WorksheetFunction.Match(na, sh.[a:a], 0) '查找用户在A列的位置
n = sh.Cells(s, 2) '取出 设置 表中的权限密码,字符型
If n ps Then GoTo 10
Call 隐藏表
'检查一下 设置 表的C列及右边各格中的内容,有内容的,说明可以打开内容所指定的工作表
For i = 4 To 255
  b = sh.Cells(s, i).Value
  If b = 1 And sh.Cells(1, i) "" Then '单元格为1时,表示有权限打开这个表,就让它显示出来
  Sheets(sh.Cells(1, i).Value).Visible = -1
  End If
Next
Unload UserForm1 '退出窗体
Exit Sub
10:
MsgBox "姓名或密码错误,不能登录", , "提示"
End Sub

Sub 隐藏表()
TextBox1.Text = "": TextBox2.Text = ""
For i = 1 To Worksheets.Count
  If Sheets(i).Name "登录" Then
  Sheets(i).Visible = 2
  Else
  Sheets(i).Visible = -1 '只让 登录 表显示出来
  End If
Next
End Sub

Private Sub CommandButton2_Click()
Call 隐藏表
End Sub

Private Sub UserForm_Activate()
'窗体出现在屏幕上的位置
Me.Top = 220
Me.Left = 120
End Sub

 

代码中都做了注释,看不明白也不影响使用,只要粘贴上就行了。

 

再用鼠标双击左侧的thisworkbook模块,把下面代码粘贴上去。


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call UserForm1.隐藏表
ActiveWorkbook.Save '保存当前工作簿文档
 End Sub

Private Sub Workbook_Open()
Call UserForm1.隐藏表
UserForm1.Show '加载登录窗体
End Sub

 

再用鼠标双击左侧 设置 表模块,把下面代码粘贴上去。

Private Sub Worksheet_Activate()
'将各工作表的名字填入第一行中
For i = 2 To Worksheets.Count
  Cells(1, i + 2) = Sheets(i).Name
Next
End Sub

 

再用鼠标双击左侧 登录 表模块,把下面代码粘贴上去。

最后给VBA加上一个保护密码,防止其他人员改动代码。
按 工具-VBA Project属性 ,调出 VBA Project 属性窗口,选 保护 选项卡,按下图设置就行了。

至此就完成了整个制做过程,关闭VBA窗口回到EXCEL窗口,就可以在这个工作簿中添加你要操作的全部工作表了,注意添加的位置在 设置 工作表的右边。


使用时的注意事项:
1、在 登录 工作表中,登录窗体是自动显示的,只要输入姓名、密码正确,按 登录 按钮,就会根据 设置 表中的权限,自动打开该操作者所要操作的工作表,与他无关的表会自动隐藏。
2、当以管理员身份(本例中的 张三 )登录后,只要一打开 设置 工作表,就能自动在D1单元格及右边的各单元格中更新工作表名字。
3、任何操作者在操作完成后,要在 登录 窗体上点击 退出 按钮,以便关闭所操作的工作表。
4、为了保证登录功能正常运行,在打开工作簿时一定要启用宏。另外,为了保证工作簿在关闭时只显示 登录 工作表,会自动将其他表隐藏并保存工作簿。

补充说明:
如果想在登录窗口的密码框不显示 明文 ,只显示一串星号 *** ,可以用下面方法设置。
打开VBA窗口,用鼠标选中登录窗体的密码文本框textbox2,在左边 属性 窗口中找到passwordChar属性,输入一个星号就行了。

 

补充2
有朋友提出,在显示登录窗口时,不想手工输入 姓名 ,最好用下拉框选择 姓名 ,想实现这个功能,只要把登录窗口中的姓名 文本框 删除,

换成一个 复合框 ,再改一下代码就可以了。
1、改文本框为复合框

2、修改代码
分两步,先把原代码中的所有 TextBox1.Text 替换成 ComboBox1.Text (提示:可以在VBA窗口中按 编辑-替换 ,输入内容后选 全部替换

即可)。
再将原代码中的下面这段:
Private Sub UserForm_Activate()
'窗体出现在屏幕上的位置
Me.Top = 220
Me.Left = 120
End Sub

替换成:
Private Sub UserForm_Activate()
'窗体出现在屏幕上的位置
Me.Top = 220
Me.Left = 120
For i = 2 To Sheets("设置").[a65536].End(xlUp).Row
  ComboBox1.AddItem Sheets("设置").Cells(i, 1).Value
Next
End Sub

这样就可以使用了。

标签: # 工作 # 窗体
声明:伯乐人生活网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系ttnweb@126.com