excel - 防止用户在表中插入行,除非使用 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
解决方案
使用工作表保护时,您可以添加 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 和表看起来是否不匹配
推荐阅读
- c - 如何将 recvfrom() 中的缓冲区值保存到数组中?
- javascript - 如何遍历第 3 方解析器生成的 AST?
- c# - Visual Studio 坚持要我添加对已安装 NuGet 包的旧版本的引用
- c# - 具有多个 from 子句的 Lambda LINQ 查询
- javascript - 自定义拖放实现
- mqtt - MQTT 订阅
- monaco-editor - 是否可以使用 monaco 编辑器禁用智能感知下拉菜单?
- javascript - javascript中原型之间的平等
- java - OAN - Aion 质押池 - 将 blocksigner 放入 docker 容器中
- postgresql-11 - 您可以在 postgresql 的存储过程中的插入语句中的临时行上引用聚合函数吗?