保护Excel工作表,但允许修改表格

时间:2017-10-09 08:47:38

标签: excel vba excel-vba

我已锁定电子表格,以便用户无法修改单元格值,但我可以运行VBA宏来进行计算。我的代码是这样的:

Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Protect "Password", UserInterfaceOnly:=True
Next
Other_function()
End Sub

这样可以正常工作,防止用户修改单元格,但允许此示例工作:

Private Sub CommandButton1_Click()
    Worksheets(1).Range("A20").Value = "AAA"
End Sub

但是,当我尝试向表中添加行时,出现1004错误:

Dim ws As Worksheet
Dim tbl As ListObject
Set ws = Worksheets("SecondSheet")
Set tbl = ws.ListObjects("TableName")
Dim newrow As ListRow
Set newrow = tbl.ListRows.Add
With newrow
    .Range(1) = onevalue
    .Range(2) = twovalue
    .Range(3) = threevalue
    ...
End With

如何告诉Excel我需要在此表中添加新行而不是每次都不保护整个事物?

2 个答案:

答案 0 :(得分:1)

您不能只接受VBA这样做,您必须在执行操作之前取消保护工作表并在之后重新保护它。

您可以允许使用 AllowInsertingColumns AllowDeletingColumns 在受保护的工作表中添加/删除列,但如果您这样做,则会接受脚本并且用户要插入或删除列。

Source for AllowInsertingColumns and AllowDeletingColumns

答案 1 :(得分:0)

不幸的是,保护工作表不允许向表中添加行或从表中删除行。你必须取消保护表。