如果单元格有值,如何锁定行?

时间:2019-04-30 12:01:46

标签: excel vba

我正在创建一个应该对多个用户打开的Excel工作表。重要的是,没有人可以写已经写过的东西。人员完成编辑后,是否自动锁定行?为了使其更加有趣,在锁定该行之前,应允许它在B,D,F,G和H列中进行更改。

例如:如果单元格A5中有一个值;则应锁定A5至H5,但如果单元格A5中没有值,则将其打开。此“规则”必须适用于从A5到A'XXX'的所有行。

我以前从未使用过Visual Basic,如果有人可以帮助我,我将永远感激不已!

1 个答案:

答案 0 :(得分:0)

这是涉及事件Worksheet_SelectionChange(用于跟踪先前的值)和Worksheet_Change(用于将其与更改后的值进行比较)的解决方案。我已经尝试过容纳多单元格选择,但是对于较大的选择来说似乎并不是特别好玩。

将其输入到工作表的宏代码中-它不适用于工作簿级别或模块。

Dim previousValue As Variant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    previousValue = Target.Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If Target.Cells.Count > 1 Then
      Dim i As Long, j As Long
      For i = 1 To Target.Rows.Count
        For j = 1 To Target.Columns.Count
          Target(i, j) = previousValue(i, j)
        Next j
      Next i
      GoTo Cleanup
      Exit Sub
    End If
    If previousValue <> "" Then
        Target.Value = previousValue
    End If
Cleanup:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

但是,请考虑一下用户在输入数据时会犯错误,并且可能不希望被阻止纠正这些错误。