You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用Excel VBA实现单元格G6的密码保护功能

G6单元格密码保护VBA实现(新手友好版)

这里给你修正后的代码,完全满足你的三个需求,逻辑简单且稳妥:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 只对G6单元格的修改做出响应
    If Intersect(Target, Me.Range("G6")) Is Nothing Then Exit Sub
    
    ' 关闭事件触发,避免写入单元格时重复触发本程序
    Application.EnableEvents = False
    
    Dim oldValue As Variant
    Dim newValue As Variant
    Dim passwordInput As String
    Const correctPwd As String = "123" ' 固定密码
    
    ' 先把用户输入的新值存起来,再撤销修改恢复成原来的值
    newValue = Target.Value
    Application.Undo
    oldValue = Target.Value
    
    Do
        passwordInput = InputBox("请输入密码确认修改(取消则恢复原值):", "需要密码")
        
        ' 密码正确:把之前存的新值写入单元格
        If passwordInput = correctPwd Then
            Target.Value = newValue
            Exit Do
        ' 用户点了取消:直接退出,保持旧值
        ElseIf passwordInput = "" Then
            Exit Do
        ' 密码错误:提示后让用户重新输入
        Else
            MsgBox "密码错误,请重新输入!", vbExclamation
        End If
    Loop
    
    ' 恢复事件触发,不影响其他操作
    Application.EnableEvents = True
End Sub

代码关键点说明(新手必看)

  • 关闭事件触发:Application.EnableEvents = False是核心,不然我们修改G6的时候会再次触发这个程序,导致无限循环。
  • 先恢复旧值:触发程序时G6已经变成新值了,先撤销修改回到旧状态,这样不管用户输错多少次密码,单元格都显示原来的值,直到密码正确才更新。
  • 循环逻辑:
    • 输入正确密码:写入用户之前输入的新内容,结束流程
    • 点击取消对话框:直接结束,单元格保持原来的值
    • 密码错误:弹出提示,继续让用户输入

你原代码的问题

  1. 没关闭事件触发,写入新值时会重复触发程序,容易出问题
  2. 单元格一直保持新值等待密码,若用户多次输错后取消,Application.Undo可能没法准确恢复最初的旧值
  3. 密码错误时没有提示,用户不知道自己输错了

内容的提问来源于stack exchange,提问作者Brendon Medeiros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:00:14