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

Excel工作表C/D列互锁编辑需求及VBA代码完善求助

实现C/D列互锁不可编辑的VBA代码完善方案

核心逻辑

某行C列先输入内容时,锁定对应行D列;若D列先输入,则锁定对应行C列。删除对应列内容后,自动解锁另一列。

完整代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim targetRow As Long
    Dim cell As Range
    
    ' 防止事件循环触发
    Application.EnableEvents = False
    
    ' 仅处理C、D列的单元格变化
    If Not Intersect(Target, Columns("C:D")) Is Nothing Then
        ' 遍历所有触发变化的单元格(支持批量操作)
        For Each cell In Target
            targetRow = cell.Row
            ' 只处理第2行及以下的数据行
            If targetRow >= 2 Then
                ' 取消工作表保护才能修改单元格锁定状态
                Me.Unprotect Password:="yourPassword" ' 替换为你的工作表保护密码,无密码则留空
                
                ' 根据C列内容状态设置D列锁定
                Cells(targetRow, "D").Locked = (Cells(targetRow, "C").Value <> "")
                ' 根据D列内容状态设置C列锁定
                Cells(targetRow, "C").Locked = (Cells(targetRow, "D").Value <> "")
                
                ' 重新保护工作表,UserInterfaceOnly确保VBA可修改锁定单元格
                Me.Protect Password:="yourPassword", UserInterfaceOnly:=True
            End If
        Next cell
    End If
    
    ' 恢复事件触发
    Application.EnableEvents = True
End Sub

关键说明

  1. 事件循环防护:通过Application.EnableEvents = False避免修改锁定状态时重复触发Worksheet_Change事件。
  2. 工作表保护机制:修改单元格Locked属性前必须取消保护,重新保护时添加UserInterfaceOnly:=True,后续VBA操作无需反复取消保护。
  3. 批量操作兼容:遍历Target中的每个单元格,支持批量粘贴、删除等多单元格同时变化的场景。
  4. 行范围控制:仅处理第2行及以下的数据行,避免误操作表头区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:45:36