登录时按权限隐藏Excel工作表的VBA代码问题求助
解决VBA登录后仅隐藏最后一个目标工作表的问题
你的代码核心问题是If语句未正确闭合,导致逻辑分支完全错位——三个工作表的判断嵌套在一起,最后那个Else分支会覆盖前面两个工作表的设置,自然只有最后一个表的隐藏逻辑生效。
下面是修正后的完整代码:
Private Sub okbtn_Click() Dim Wksht As Worksheet Dim isAdmin As Boolean ' 提前定义管理员状态变量,避免重复读单元格 If Sheets("Admin").Range("B6").Value = True Then Sheets("Admin").Range("B7").Value = Sheets("Admin").Range("B4").Value ' 设置当前用户 login_UF.Hide ' 先获取管理员状态,避免循环里重复读取单元格 isAdmin = (Sheets("Admin").Range("B8").Value = "Yes") For Each Wksht In ThisWorkbook.Worksheets ' 判断当前工作表是否是需要控制的目标表 Select Case Wksht.Name Case "Admin", "Engine", "Lists" ' 根据管理员状态设置可见性 Wksht.Visible = IIf(isAdmin, xlSheetVisible, xlSheetVeryHidden) Case Else ' 非目标工作表保持可见 Wksht.Visible = xlSheetVisible End Select Next Wksht Sheets("Admin").Range("B4,B5").ClearContents Sheets("Phonebook").Activate Else MsgBox "请输入正确的用户名和密码" End If End Sub
关键改动说明:
- 用
Select Case替代嵌套If,逻辑更清晰,彻底避免闭合错误 - 提前把管理员状态赋值给
isAdmin变量,减少单元格读取次数,代码更简洁 - 明确区分目标工作表和其他工作表的处理逻辑,确保每个目标表的可见性都被正确设置
- 修复了原代码中Else分支错位导致的覆盖问题
内容的提问来源于stack exchange,提问作者Lachlan Bartsh
相关产品推荐
相关产品推荐

