输入错误密码时关闭未保存工作簿的VBA代码故障排查
问题排查与修正方案
嘿,我来帮你搞定这个VBA代码的问题,核心问题出在错误密码的判断逻辑上,还有一些可以优化的地方,咱们一步步拆解:
1. 导致代码失效的核心问题
你最后一行的错误密码判断写法完全不对:
If mypass <> "BJE" Or "BFL" Or "EBR" Or "DME" Or "AJA" Or "RLC" Or "JMK" Or "AXB" Or "JIK" Or "KKO" Then ThisWorkbook.Close
在VBA里,Or运算符两边必须是完整的布尔表达式(比如mypass <> "BFL"),你直接写"BFL"这类字符串,VBA会把非空字符串默认当成True——这就导致整个条件永远成立!哪怕你输入了正确的密码,这行代码也会触发关闭,自然达不到你想要的效果。
2. 优化后的完整代码
我给你重写了代码,不仅修复了逻辑问题,还简化了结构,同时处理了用户取消输入的场景:
Sub Unhide() Dim mypass As Variant ' 指定输入类型为文本,避免取消操作返回异常值 mypass = Application.InputBox( _ prompt:="Enter password - In case of wrong password please close the file and try again", _ Type:=2) ' 用户点取消时直接无保存关闭 If mypass = False Then ThisWorkbook.Close SaveChanges:=False Exit Sub End If ' 用Select Case替代重复的If,更易读易维护 Select Case mypass Case "BJE" Sheets("Overview").Visible = True Case "BFL" Sheets("BFL").Visible = True Case "EBR" Sheets("EBR").Visible = True Case "DME" Sheets("DME").Visible = True Case "AJA" Sheets("AJA").Visible = True Case "RLC" Sheets("RLC").Visible = True Case "JMK" Sheets("JMK").Visible = True Case "AXB" Sheets("AXB").Visible = True Case "JIK" Sheets("JIK").Visible = True Case "KKO" Sheets("KKO").Visible = True Case Else ' 所有非正确密码的情况,无保存关闭工作簿 ThisWorkbook.Close SaveChanges:=False End Select End Sub
3. 关键改进说明
- 修正判断逻辑:用
Case Else统一处理错误密码/非预期输入,彻底避免之前的逻辑漏洞 - 处理取消操作:添加
Type:=2参数,确保输入框返回文本类型,用户点取消时直接触发关闭 - 简化代码结构:
Select Case比一堆零散的If更整洁,后续加新密码直接在Case里追加就行 - 明确关闭规则:
SaveChanges:=False强制不保存就关闭,不会弹出保存提示框干扰用户
这样修改后,就能完美实现你的需求:输入正确密码显示对应工作表,输入错误密码或取消操作时,工作簿直接无保存关闭。
内容的提问来源于stack exchange,提问作者Santis789
相关产品推荐
相关产品推荐

