防止用户在 table 中插入行,但使用 VBA 除外

Prevent user from inserting row in table except using VBA

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

所以我添加了一个按钮来将行添加到 table 并且没有问题。现在我想禁用用户手动添加行的功能,这意味着只能通过单击按钮添加行。

据我研究,人们都建议使用保护 sheet 功能。但它会删除所有添加行的功能,包括通过 VBA。其他提供 VBA 只能防止通过右键单击行列插入行。我需要禁用所有用户可访问的方式。

这是按钮的代码(如果有任何相关的话)。

Sub InsertRow_Click()

Dim i As Integer

For i = 1 To 10
    ActiveSheet.ListObjects("Invoice").ListRows.Add alwaysinsert:=True
Next i

End Sub

当使用 sheet 保护时,您可以添加 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

或者如果你只想保护一个 sheet:

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 looks if it is not good match