Excel 禁止用户在表中插入行(使用VBA除外)

Excel 禁止用户在表中插入行(使用VBA除外),excel,insert,rows,excel-tables,vba,Excel,Insert,Rows,Excel Tables,Vba,我已经为数据输入创建了一个表。但是,当用户使用它时,它们在表中间插入行。这就把公式搞乱了,因为函数的设计只是向前推进的。有时,当用户手动添加行时(只需在表的最后一行之后键入下一行),函数会自动填充,但函数经常不正确 因此,我添加了一个按钮,将行添加到表中,这样做不会出现问题。现在我想禁用用户手动添加行的功能,这意味着只能通过单击按钮添加行 据我调查,人们都建议使用保护表功能。但它将删除所有添加行的功能,包括通过VBA。其他提供的VBA仅通过在“行”列上单击鼠标右键来阻止插入行。我需要禁用所有用户

我已经为数据输入创建了一个表。但是,当用户使用它时,它们在表中间插入行。这就把公式搞乱了,因为函数的设计只是向前推进的。有时,当用户手动添加行时(只需在表的最后一行之后键入下一行),函数会自动填充,但函数经常不正确

因此,我添加了一个按钮,将行添加到表中,这样做不会出现问题。现在我想禁用用户手动添加行的功能,这意味着只能通过单击按钮添加行

据我调查,人们都建议使用保护表功能。但它将删除所有添加行的功能,包括通过VBA。其他提供的VBA仅通过在“行”列上单击鼠标右键来阻止插入行。我需要禁用所有用户可访问的方式

这是按钮的代码(如果相关)


使用工作表保护时,您可以添加Userinterfaceonly=true,这将防止用户干扰,但VBA代码仍然可以工作

Private Sub Workbook_Open()
Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.Protect Password:="secret", UserInterFaceOnly:=True
    Next ws
End Sub
或者,如果您只想保护一张纸:

Private Sub Workbook_Open()
       Worksheets("YourSheetName").Protect Password:="secret", UserInterFaceOnly:=True    End Sub
或者在运行宏之前先解除保护,然后再打开:

Sub InsertRow_Click()
ActiveSheet.Unprotect Password:="secret"
Dim i As Integer

For i = 1 To 10
    ActiveSheet.ListObjects("Invoice").ListRows.Add alwaysinsert:=True
Next i
ActiveSheet.protect Password:="secret"
End Sub

Userinterfaceonly和tables看起来不匹配

这段代码似乎可以保护工作簿中的所有工作表。我只需要保护一张工作表(用于数据输入)。然后更容易,我在上面添加了它,但还没有弄清楚如何使用它:(.工作簿打开时是否运行此代码?或者我必须手动运行此代码。如何手动运行此代码,我在“宏”菜单中看不到它?或者我必须将其放入该运行的另一个代码中以保护工作簿?或者在我保护工作簿时它会自动运行?打开此子运行的文件时,将此代码放入ThisWorkbook部分。当放入此代码时,打开文件,它不允许我通过按钮添加行。当我取消对工作表的保护时,按钮正常工作。
Sub InsertRow_Click()
ActiveSheet.Unprotect Password:="secret"
Dim i As Integer

For i = 1 To 10
    ActiveSheet.ListObjects("Invoice").ListRows.Add alwaysinsert:=True
Next i
ActiveSheet.protect Password:="secret"
End Sub