在受保护的工作表上进行排序的解决方案的错误处理

时间:2018-02-27 10:46:54

标签: excel vba excel-vba

在受保护的用户表单(包含数据的表)上,我发现有可能通过在选择时取消保护标题行(如果......然后)来对保护的单元格进行排序,并在选择其他单元格时保护表单(其他)。所以现在,当单击标题行并单击过滤器符号时,用户可以进行排序,因为此时文件不受保护。

现在,还有一个问题:当用户选择databodyrange中的数据(或任何其他不在标题行中的单元格(此处:第11行))然后直接单击标题行中的过滤符号进行排序,他们已经激活了导致纸张保护的细胞(Else)和同时取消保护(如果......那么)。

所以代码本身工作正常。我所挣扎的是编写错误处理,例如在错误中选择标题行中的单元格并继续在所有功能中运行宏+不会打扰用户。

以下代码的简单错误处理是什么?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Ws As Worksheet
Set Ws = Target.Worksheet
    If (Target.Row = 11) Then    'Row 11 is the tables header's row
       With Ws
       .Unprotect ""
       End With
    Else
        With Ws
        .EnableAutoFilter = True
        .EnableOutlining = True
        .Protect "", contents:=True, UserInterfaceonly:=True, AllowFormattingRows:=True, AllowFiltering:=True, AllowSorting:=True
        End With
    End If
End Sub

谢谢 - 实际上只是寻找错误处理。没有其他解决方法!

1 个答案:

答案 0 :(得分:0)

我使用On Error Resume Next解决了我自己的问题。它不是超级优雅,但这样用户才能在带有锁定单元格的受保护工作表上进行排序"。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Ws As Worksheet
Set Ws = Target.Worksheet
On Error Resume Next
If Err.Number <> 0 Then
Application.Undo
MsgBox "Please select a cell in the header row, before sorting or  filtering."
End If
   If (Target.Row = 11) Then
   With Ws
   .Unprotect ""
   End With
Else
    With Ws
    .EnableAutoFilter = True
    .EnableOutlining = True
    .Protect "", contents:=True, UserInterfaceonly:=True, AllowFormattingRows:=True, AllowFiltering:=True, AllowSorting:=True
    End With
End If
End Sub