首页 > 解决方案 > 防止用户在表中插入行,除非使用 VBA

问题描述

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

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

据我研究,人们都建议使用保护表功能。但它会删除所有添加行的能力,包括通过 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

标签: excelinsertrowsexcel-tablesvba

解决方案


使用工作表保护时,您可以添加 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 和表看起来是否不匹配


推荐阅读