范围SpecialCells ClearContents清除整张纸

时间:2016-11-10 21:43:39

标签: excel vba excel-vba

我在Excel 2010中有一个工作表,它被设置为伪形式(我没有创建它,我只是想修复它)所以格式化表明用户只能输入某些单元格。根据某些功能,需要重置这些区域,即清除,尽管需要保留公式和标准/条件格式。我已将每个单元格/范围定义为命名范围,因此我可以使用以下代码轻松遍历它们: -

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

由于某种原因,它不是从特定范围中清除常量,而是从整个工作表中清除常量,因此我将丢失所有标题/标题。公式和标准/条件格式保持不变。

我做错了什么?!?!

作为使用立即窗口的测试,我尝试清除特定的单元格,例如

Range("G7").SpecialCells(xlCellTypeConstants).ClearContents

但是这仍然清除了整张表中的所有常量。

我错过了什么?我不明白。也许我是愚蠢的。 对不起,我无法上传示例。这个地方非常封锁。

1 个答案:

答案 0 :(得分:2)

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