保护Excel表格,但允许表格被修改

我有一个电子表格被locking,以便用户不能修改单元格值,但是我可以运行VBAmacros来进行计算。 我的代码是这样的:

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来执行此操作,您必须在执行操作之前取消保护表单,并在执行操作之后进行重新保护。

您可以允许使用AllowInsertingColumnsAllowDeletingColumns添加/删除受保护工作表中的列,但是如果您这样做,您将接受该脚本并使用户插入或删除列。

AllowInsertingColumns和AllowDeletingColumns的来源 。

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