【问题标题】: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

标签: vba excel protected


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多