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

标签 vba excel

我在 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({多个单元格}).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,而不是按名称从事件工作表中获取范围。

关于vba - Range SpecialCells ClearContents 改为清除整个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40537537/

相关文章:

vba - 在excel vba的最后插入一列

excel - VBA运行时错误 '380' : A script engine for the specified language can not be created

sql-server - 如何捕获Access VBA中缺少 Access 错误代码的特定SQL Server错误?

python-2.7 - 使用 win32com.client 编写并执行 Excel VBA 宏

excel - 如何在用户定义的函数上添加工具提示

linq - 汇总 VBA 集合中的记录

ms-access - Access 表单加载 vba 时清空组合框值

vba - 在 VBA 上迭代自动过滤的可见单元格

excel - getElementById 在 VBA 中不起作用,错误 438

excel - 你能从 Excel 连接到 sql server 吗?