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

时间:2017-08-04 07:57:46

标签: excel vba excel-vba protected

我正在尝试找到一种方法,允许用户在工作表受保护时插入行,但仅限于特定范围内。例如,我不希望用户能够在行“1”和“2”之间插入一行(因为它会使我的宏做有趣的事情),但我希望他能够插入一行在其他地方。

以下代码允许用户在工作表中的任何位置插入行,但这不是我想要的:

    ActiveSheet.Protect Password:="qwerty", DrawingObjects:=True, Contents:=True, Scenarios:=True _
    , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
    AllowFormattingRows:=True, AllowInsertingRows:=True, AllowDeletingRows:=True

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

无法阻止用户仅在特定范围内插入行,您可以锁定这些单元格并阻止选择锁定的单元格,这样用户就不会选择前两行中的单元格防止他们意外地做到这一点?

您还可以锁定行插入并设置UserInterfaceOnly:=True并处理通过宏插入的任何行,如果他们尝试在错误的位置插入行,则取消该过程。

用户是否有必要在整个工作表中插入行?

答案 1 :(得分:1)

您可以在工作表选择更改事件中使用以下代码。

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