范围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而不是通过活动工作表的名称获取范围。