【问题标题】:SpecialCells(xlCellTypeBlanks).EntireRow.Delete No Cells FoundSpecialCells(xlCellTypeBlanks).EntireRow.Delete 未找到任何单元格
【发布时间】:2014-05-15 14:58:31
【问题描述】:

我正在尝试删除 B 列中包含空白的任何内容。 A1:A10 = {3,1,10,1,1,10,2,2,2,10}。当我运行我的代码时,我在删除行行出现错误。这是“运行时 1004 错误,未找到单元格”。显然应该发现了一些细胞。到底是怎么回事?我看到有人建议在删除行周围放置一个 On Error 子句,但这只会导致没有任何内容被删除。

Sub test()
Dim Total_Rows As Integer
Dim rng As Range
Total_Rows = 10
Range("B1", "B" & Total_Rows) = "=if(A1=10,"""",1)"
Range("B1", "B" & Total_Rows).Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlPasteValues
Set rng = Range("B1", "B" & Total_Rows)
rng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您可以尝试像下面那样循环遍历范围

    For Each cell In rng     
       If cell.Value = "" Then cell.EntireRow.Delete    
    Next cell
    

    而不是找到一个空白单元格

    【讨论】:

    • 我原来有,但实际文件有 3000 行,所以这很慢。
    【解决方案2】:

    试试这个:

    rng.AutoFilter 1, "="
    rng.SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ActiveSheet.AutoFilterMode = False '~~> removes the filter
    

    这会过滤掉空白或零长度字符串,然后将其删除。
    或者你可以像这样直接过滤A1:A10

    Range("A1:A10").AutoFilter 1, 10
    Range("A1:A10").SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ActiveSheet.AutoFilterMode = False
    

    【讨论】:

    • 这似乎是最简单的解决方案。自动过滤后的 1、10 是什么意思?
    • 1 用于字段参数,10 用于条件 1 参数。它对你有用吗?
    • 除了第一行总是被删除,不管值如何。还有任何关于字段参数与关键参数的文档吗?我不熟悉这些术语。
    • @user2242044 这些是参数的名称,因此文档可以在 AutoFilter 方法的文档中找到。例如,criteria1 参数(即“criteria”加上数字“1”,而不是“critical”)指定过滤器的条件。
    猜你喜欢
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多