如何锁定特定列,但是列的一部分可由用户修改? (VBA)

时间:2017-09-24 15:06:06

标签: excel vba excel-vba

所以我创建了一个工作表,允许用户使用按钮在表格中创建新行来输入数据。我只希望表和列中的特定单元格可以修改。

我之前使用过与下面类似的功能,但是现在它没有用。

在这种情况下,我希望用户可以修改从B7到表格末尾的范围,以及要锁定的其余列。

Function ProtectionOn()

Sequencer.Select
Cells.Locked = True
Range("B7", Range("B1048576").End(xlUp)).Locked = False
ActiveSheet.Protect Password:="test"

End Function

我发现这种方法最简单的方法是使用电子表格末尾的xlup。任何帮助修复我的功能将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:0)

相反功能,使用sub。

Sub ProtectionOn()

Sequencer.Select
Cells.Locked = True
Range("B7", Range("B1048576").End(xlUp)).Locked = False
ActiveSheet.Protect Password:="test"

End Sub

如果您需要子程序,请尝试这样。

主要程序。

Sub test()
    ProtectionOn Sheets("Sequencer")
End Sub

Sub ProtectionOn(Ws As Worksheet)
    With Ws
        .Unprotect Password:="test" '<~~ add code
        .Cells.Locked = True
        .Range("B7", .Range("B1048576").End(xlUp)).Locked = False
        .Protect Password:="test"
    End With
End Sub

答案 1 :(得分:0)

我们假设我们在表单序列器中有table1请创建:

Sub ProtectionOn(sh As Worksheet)

Dim i As Long

With sh

i = .Range("Table1[#All]").Rows.Count

.Cells.Locked = True
.Range("b7", .Range("Table1[#All]").End(xlDown)).Locked = False
.Protect Password:="test"

End With

End Sub




  'and call it from:


Sub call_protect()

    ProtectionOn Sheets("Sequencer")



End Sub