保护工作表仅在特定范围内插入行
Posted
技术标签:
【中文标题】保护工作表仅在特定范围内插入行【英文标题】:Protect Sheet from inserting rows only in a specific range 【发布时间】:2018-01-12 01:32:48 【问题描述】:我试图找到一种方法来允许用户插入行,但只能在工作表受到保护的特定范围内。例如,我不希望用户能够在行“1”和“2”之间插入一行(因为它会使我的宏做一些有趣的事情),但我希望他能够插入一行其他地方。
以下代码允许用户在工作表的任何地方插入行,但这并不是我想要的:
ActiveSheet.Protect Password:="qwerty", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingRows:=True, AllowDeletingRows:=True
有人可以帮我解决这个问题吗?
【问题讨论】:
一种简单的方法是类似于“非常隐藏的工作表”......在A1
中有公式=A2
。然后简单地检查它,如果公式不是=A2
,那么只需Application.Undo
:P
【参考方案1】:
没有办法阻止用户仅在特定范围内插入行,您可以锁定这些单元格并阻止选择锁定的单元格,这样用户就不会选择前两行中的单元格,这可能会阻止他们意外执行此操作?
您还可以锁定行插入并设置UserInterfaceOnly:=True
并通过宏处理任何行插入,如果他们试图在错误的位置插入行,则取消该过程。
用户是否必须在整个工作表中插入行?
【讨论】:
我们可以通过 Worksheets SelectionChange 事件来实现。 虽然有点笨拙 是的,它是:) 但因为他只问如何做到这一点,所以我把代码。 是的,它是一个数据库,所以它是必需品。我认为 Shrikant 找到了解决我问题的方法,非常感谢您的帮助! 如果您需要数据库并拥有 Microsoft Office,我建议您将其移植到 Access。您可以编写一个 excel 工作簿来与它进行通信等。一般来说,如果您使用的是特定于数据库的软件,即使现在设置起来很麻烦,它也会容易得多。例如,没有好办法让多个用户能够同时编辑一个工作簿。【参考方案2】:您可以在工作表选择更改事件中使用以下代码。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row = 1 Or Target.Row = 2 Then
'MsgBox "Check"
ActiveSheet.Protect Password:="qwerty", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingRows:=False, AllowDeletingRows:=True
Else
ActiveSheet.Unprotect Password:="qwerty"
End If
End Sub
【讨论】:
以上是关于保护工作表仅在特定范围内插入行的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:打开带有动态内容的模式表仅在第一次尝试时失败