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

如何修改Excel VBA代码,适配新增行的行锁定/解锁需求?

解决VBA代码无法适配新增行的方案

修改后的代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Dim targetColC As Range
    ' 动态获取C列从第3行开始到最后一行的范围
    Set targetColC = Me.Range("C3:C" & Me.Rows.Count)
    
    If Not Intersect(targetColC, Target) Is Nothing Then
        ' 遍历所有触发变更的C列单元格(从第3行开始)
        For Each rng In Intersect(targetColC, Target)
            ' 仅锁定该行的D-K列,匹配需求逻辑
            Me.Range(Me.Cells(rng.Row, "D"), Me.Cells(rng.Row, "K")).Locked = (rng.Value = "")
        Next rng
    End If
End Sub

关键修改说明

  • 替换固定范围为动态范围:把原代码中固定的Range("C3:C1000")改成Me.Range("C3:C" & Me.Rows.Count),这样不管用户在表格底部新增多少行,C列第3行及以下的所有单元格都会被监听,完美适配新增行场景。
  • 精准锁定目标列:原代码用rng.EntireRow.Locked会锁定整行,调整为仅锁定该行的D到K列,完全贴合需求描述的「C列非空则D-K可编辑,为空则不可编辑」逻辑。

注意事项

  1. 单元格锁定功能仅在工作表处于保护状态时生效,保护工作表时需勾选「允许用户编辑未锁定的单元格」选项。
  2. 如果担心C列空白行过多影响性能,可改用Range("C3", Me.Cells(Me.Rows.Count, "C").End(xlUp))监听C列已使用的范围,但这种方式无法监听刚新增还未输入数据的行,可根据实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:12:16