[英]Conditional Lock Cell , unable to sort
我正在嘗試編寫一個宏,該宏將鎖定任何大於0的單元格。當我運行下面的代碼時,該宏有效,但鎖定了第一行,在該行中有一個下拉箭頭用於排序和數字過濾。 有沒有一種方法可以添加到此代碼中,以便第一行不會被鎖定?
Sub Test()
Dim Cell As Range
Dim MyPlage As Range
With ThisWorkbook.ActiveSheet
.Unprotect
.Cells.Locked = False
Set MyPlage = .Range("J2:AA1074")
For Each Cell In MyPlage
If Not IsError(Cell) Then
If Cell.Value > "0" Then
Cell.Locked = True
End If
End If
Next
.Protect
End With
End Sub
最簡單的是定義不包括“頂行”的范圍:)
更改
.Range("J2:AA1074")
至
.Range("J3:AA1074")
另外,您可以直接使用SpecialCells
,而無需遍歷范圍內的每個單元格並檢查該單元格是否有錯誤,而無需循環。 例如( TRIED AND TESTED )
Sub Sample()
Dim Cell As Range, MyPlage As Range, FinalRange As Range
With ThisWorkbook.ActiveSheet
.Unprotect
.Cells.Locked = False
On Error Resume Next
Set MyPlage = .Range("J3:AA1074").SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not MyPlage Is Nothing Then
For Each Cell In MyPlage
If Cell.Value > 0 Then Cell.Locked = True
Next
End If
.Protect DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
AllowFiltering:=True, _
AllowSorting:=True
.EnableSelection = xlUnlockedCells
End With
End Sub
為了確保自動篩選和排序工作,在其指定.Protect
因為我在上面所做的。
在運行上面的代碼之前,您還需要采取額外的步驟。
屏幕截圖
您可以將以下代碼添加到工作Sheet module
(使用自動過濾Sheet module
將Range("J1:AA1")
更改為范圍):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.Intersect(Target, Range("J1:AA1")) Is Nothing Then
ActiveSheet.Protect
Else
ActiveSheet.Unprotect
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.