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



>我锁定了一个电子表格,以便用户无法修改单元格值,但可以运行 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 我需要在此表中放置新行,而不会每次都取消保护整个内容?

您不能只接受VBA来执行此操作,您必须在进行操作之前取消保护工作表,然后在之后重新保护它。

您可以使用 AllowInsertingColumns 或 AllowDeletingColumns 在受保护工作表中添加/删除列,但如果这样做,您将接受脚本和用户插入或删除列。

允许

插入列和允许删除列的源。

遗憾的是,保护工作表不允许在表中添加或删除行。您必须取消对工作表的保护。

最新更新