保护工作表仅在特定范围内插入行

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:打开带有动态内容的模式表仅在第一次尝试时失败

gspread 保护表,某些单元格除外

Google Chrome:样式表仅出现在“检查元素”之后

在 VBA 中选择特定的工作表和范围

如何使用 Python 库工具在 Excel 工作表中选择特定范围的单元格

根据单元格值将特定范围而不是整行复制到另一个谷歌工作表