繁体   English   中英

Range SpecialCells ClearContents 改为清除整个工作表

[英]Range SpecialCells ClearContents clears whole sheet instead

我在 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

但这仍然清除了整个工作表中的所有常量。

我错过了什么? 我不明白。 可能是我傻了。 抱歉,我无法上传示例。 这个地方很封闭。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM