我想清除特定范围内受保护工作表的未受保护内容。例如,当我运行VBA时,它将清除A1002:F1301和G1002:AZ1301的内容。上述范围不受保护。我只希望这些范围之间的单元格清晰,但不能格式化或任何其他更改。
答案 0 :(得分:0)
由于您的示例范围(例如A1002:F1301和G1002:AZ1301)实际上没有任何未引用的列或行,我将更改您的示例为A1002:F1301和H1002:AZ1301离开列G在不连续的范围内与两个Areas无关。
使用类似于以下前两种方法之一的东西。
with worksheets("Sheet1")
.range("A1002:F1301, H1002:AZ1301").clearcontents
'alternative with Union
union(.range("A1002:F1301"), .range("H1002:AZ1301")).clearcontents
'do NOT use the following - it includes all the cells in between
.range("A1002:F1301", "H1002:AZ1301").clearcontents
end with
第一种方法是第二种方法Union method的简写。注意第一个和第三个之间的区别。第三种不建议用于您的目的,因为它包括两个范围之间的所有单元格(例如A1002:AZ1301)。
Range.ClearContents method仅清除值,而不像Range.Clear清除值和格式。
答案 1 :(得分:0)
这就是我用的。我从不同的答案中得到了满足我需要的各种代码。在第一个示例中,我希望它仅清除特定工作表上的未锁定单元。
Sub ClearProgressNotes_JAN()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Dim ws As Worksheet
Dim Rng As Range
Set ws = Worksheets("JAN")
Set Rng = ws.Range("b9:ay109")
Dim OutRng As Range
On Error Resume Next
Application.ScreenUpdating = False
For Each Rng In Rng
If Rng.Locked = False Then
If OutRng.Count = 0 Then
Set OutRng = Rng
Else
Set OutRng = Union(OutRng, Rng)
End If
End If
Next
If OutRng.Count > 0 Then OutRng.ClearContents
End Sub
下面的代码对我来说有效。
Sub ClearUnlockedCells()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Dim WorkRng As Range
Dim OutRng As Range
Dim Rng As Range
On Error Resume Next
Set WorkRng = Application.ActiveSheet.UsedRange
Application.ScreenUpdating = False
For Each Rng In WorkRng
If Rng.Locked = False Then
If OutRng.Count = 0 Then
Set OutRng = Rng
Else
Set OutRng = Union(OutRng, Rng)
End If
End If
Next
If OutRng.Count > 0 Then OutRng.ClearContents
End Sub
编辑:谨记,这里的代码有助于清除表上未受保护的单元格,即使它们与受保护的单元格混合也是如此。您不必专门识别不受保护的单元。