范围SpecialCells ClearContents清除整个工作表
我在Excel 2010中有一个表单,它被设置为一个伪表单(我没有创build它,我只是试图修复它),所以格式化表明用户只能进入特定的单元格。 取决于某些function,这些区域需要重置,即清除,尽pipe需要保留公式和标准/条件格式。 我已经定义每个这些单元格/范围作为命名的范围,所以我可以很容易地通过使用下面的代码循环:
Public Sub ResetDetailSheet() Dim nm As Name With ThisWorkbook For Each nm In .Names If Left(nm.Name, 9) = "nmrDetail" Then Range(nm.Name).SpecialCells(xlCellTypeConstants).ClearContents End If Next End With End Sub
由于某种原因,而不是从特定的范围清除常量,它是从整个表中清除常量,所以我失去了所有的标题/标题。 公式和标准/条件格式化保持按预期。
我究竟做错了什么?!?!
作为使用即时窗口的testing,我尝试清除特定的单元格,例如
Range("G7").SpecialCells(xlCellTypeConstants).ClearContents
但是这仍然清除了整个表格中的所有常量。
我错过了什么? 我不明白。 也许我是愚蠢的。 对不起,我不能上传一个例子。 这个地方相当封闭。
Range({any single cell}).SpecialCells({whatever})
似乎工作在整个工作表。
Range({more than one cell}).SpecialCells({whatever})
似乎在指定的单元格中工作。
所以,在清除它之前,确保你的范围有多个单元格 – 如果范围只有一个单元格,那么检查它是否是.HasFormula
; 如果是这种情况,那么它的.Value
不是一个常量:
With ThisWorkbook For Each nm In .Names If Left(nm.Name, 9) = "nmrDetail" Then If nm.RefersToRange.Count > 1 Then nm.RefersToRange.SpecialCells(xlCellTypeConstants).ClearContents ElseIf Not nm.RefersToRange.HasFormula Then nm.RefersToRange.ClearContents End If End If Next End With
请注意,我正在使用Name.RefersToRange
而不是通过活动工作表的名称获取范围。