在受保护的用户表单(包含数据的表)上,我发现有可能通过在选择时取消保护标题行(如果......然后)来对保护的单元格进行排序,并在选择其他单元格时保护表单(其他)。所以现在,当单击标题行并单击过滤器符号时,用户可以进行排序,因为此时文件不受保护。
现在,还有一个问题:当用户选择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
谢谢 - 实际上只是寻找错误处理。没有其他解决方法!
答案 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