如何用Excel制作登录界面(制作一个登录表单)
步骤1:创建用户数据库
- 新建工作表命名为"UserDB"
- 设置表头:
- A1: Username
- B1: Password
- C1: Permission (权限等级,如1-普通用户,2-管理员)
- 添加示例数据:
- UsernamePasswordPermissionuser1pass11adminadmin1232
步骤2:创建登录表单
- 按Alt+F11打开VBA编辑器
- 插入 → 用户窗体 → 命名为LoginForm
- 添加控件:
- 2个标签:用户名/密码
- 2个文本框:txtUser / txtPass (密码框设置PasswordChar属性为*)
- 2个按钮:登录(btnLogin)/取消(btnCancel)
步骤3:编写登录逻辑
' LoginForm代码
Private Sub btnLogin_Click()
Dim user As String, pass As String
user = Trim(txtUser.Text)
pass = Trim(txtPass.Text)
If user = "" Or pass = "" Then
MsgBox "请输入用户名和密码!", vbExclamation
Exit Sub
End If
Dim permission As Integer
permission = AuthenticateUser(user, pass)
If permission > 0 Then
Unload Me
Application.Visible = True
ShowDashboard permission ' 根据权限显示界面
Else
MsgBox "无效的用户名或密码!", vbCritical
txtPass.Text = ""
txtPass.SetFocus
End If
End Sub
Private Sub btnCancel_Click()
ThisWorkbook.Close SaveChanges:=False
End Sub
步骤4:创建验证函数
' 标准模块代码
Function AuthenticateUser(user As String, pass As String) As Integer
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("UserDB")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If LCase(ws.Cells(i, 1).Value) = LCase(user) Then
If ws.Cells(i, 2).Value = pass Then
AuthenticateUser = ws.Cells(i, 3).Value
Exit Function
End If
End If
Next i
AuthenticateUser = 0 ' 验证失败
End Function
步骤5:权限控制实现
Sub ShowDashboard(permission As Integer)
' 隐藏所有工作表
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Visible = xlSheetVeryHidden
Next
' 根据权限显示界面
Select Case permission
Case 1 ' 普通用户
Sheets("UserDashboard").Visible = xlSheetVisible
Application.Caption = "普通用户模式"
Case 2 ' 管理员
Sheets("AdminDashboard").Visible = xlSheetVisible
Application.Caption = "管理员模式"
End Select
' 禁用开发者权限
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
End Sub
步骤6:创建工作表界面
- 创建两个工作表:
- "UserDashboard"(普通用户界面)
- "AdminDashboard"(管理员界面)
- 在管理员界面添加敏感操作(如添加用户按钮)
步骤7:添加用户管理功能
' 管理员模块代码
Sub AddNewUser()
Dim user As String, pass As String, perm As Integer
user = InputBox("输入用户名:")
pass = InputBox("输入密码:")
perm = InputBox("权限等级 (1-用户, 2-管理员):")
If user <> "" And pass <> "" Then
Dim ws As Worksheet
Set ws = Sheets("UserDB")
Dim newRow As Long
newRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(newRow, 1).Value = user
ws.Cells(newRow, 2).Value = pass
ws.Cells(newRow, 3).Value = perm
MsgBox "用户添加成功!"
End If
End Sub
步骤8:设置工作簿启动
' ThisWorkbook 代码
Private Sub Workbook_Open()
Application.Visible = False ' 隐藏Excel界面
LoginForm.Show ' 显示登录窗体
' 保护用户数据库
Sheets("UserDB").Visible = xlSheetVeryHidden
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' 关闭时恢复设置
Application.Visible = True
Application.Caption = Empty
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
End Sub
安全增强措施:
- 加密密码:
' 在写入数据库前加密
ws.Cells(newRow, 2).Value = Base64Encode(pass)
' 验证时解密
Function Base64Decode(ByVal strData As String) As String
' 添加Base64编解码函数
End Function
- 锁定VBA工程:
- 工具 → VBAProject属性 → 保护 → 勾选"查看时锁定工程"
- 保护工作表:
Sheets("UserDB").Protect Password:="yourStrongPassword", _
UserInterfaceOnly:=True
使用说明:
- 工作簿打开时自动显示登录界面
- 输入UserDB中的有效凭据
- 系统根据权限级别:
- 普通用户:仅查看数据
- 管理员:可管理用户和所有数据
- 关闭工作簿时自动恢复Excel界面
注意事项:
在实际应用中应使用更安全的密码存储方式(如哈希加盐)
定期备份用户数据库
为管理员界面添加操作日志功能
使用错误处理增强稳定性
这个方案实现了:
- 分离的数据库存储
- 基于角色的权限控制
- 界面自动切换
- 基础安全防护
- 用户管理功能