如何通过VBA宏实现E14选No时锁定E15、E16单元格
VBA实现下拉选项控制单元格锁定解锁
操作流程
- 打开目标Excel文件,按快捷键
Alt+F11启动VBA编辑器 - 在左侧工程资源管理器面板,双击需要实现功能的对应工作表,打开该工作表的专属代码编辑窗口
- 将下方代码粘贴到代码窗口中,根据自身实际情况调整工作表保护密码参数,最后将文件保存为
.xlsm(启用宏的工作簿)格式即可生效
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅当E14单元格值发生变化时触发逻辑 If Not Intersect(Target, Me.Range("E14")) Is Nothing Then ' 关闭事件触发,避免递归调用导致报错 Application.EnableEvents = False On Error GoTo ErrHandler ' 解除工作表保护,有密码请将下方YourPassword替换为实际密码,无密码则删除Password参数 Me.Unprotect Password:="YourPassword" Select Case UCase(Trim(Me.Range("E14").Value)) Case "NO" ' 选择No时锁定E15、E16禁止编辑 Me.Range("E15:E16").Locked = True Case "YES" ' 选择Yes时解锁E15、E16允许编辑 Me.Range("E15:E16").Locked = False End Select ' 重新开启工作表保护 Me.Protect Password:="YourPassword" End If ErrHandler: ' 无论是否报错,都恢复事件触发机制 Application.EnableEvents = True End Sub
注意事项
- Excel中单元格的
Locked锁定属性仅在工作表开启保护状态下生效,未开保护时锁定配置不会起作用 - 如果你没有给工作表设置保护密码,直接删除代码里两处
Password:="YourPassword"参数即可 - 不要把这段代码放到普通标准模块中,必须放在对应工作表的代码模块内,否则值变化时无法自动触发逻辑
- 保存文件时必须选择
.xlsm格式,否则宏代码会被清除,功能无法正常使用
内容的提问来源于stack exchange,提问作者Kapil Naik
相关产品推荐
相关产品推荐

