Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA删除Excel中的空行_Excel_Vba - Fatal编程技术网

使用VBA删除Excel中的空行

使用VBA删除Excel中的空行,excel,vba,Excel,Vba,我正在尝试使用以下代码删除空行: worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 上面的代码运行正常,但出现运行时错误“1004”:未找到任何单元格。与我一起运行正常。这些陈述不会给我带来任何错误 Sheet1.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'perfect 我为你的问题找到了这类解决方案 On

我正在尝试使用以下代码删除空行:

worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

上面的代码运行正常,但出现运行时错误“1004”:未找到任何单元格。

与我一起运行正常。这些陈述不会给我带来任何错误

 Sheet1.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'perfect
我为你的问题找到了这类解决方案

 On Error Resume Next
 Sheet1.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
 On Error GoTo 0
看看这些链接

是的,你设定了你的目标吗?工作表在这里没有任何意义

dim wsheet as worksheets
set wsheet = worksheets("worksheetname") or worksheets("sheet1")
wsheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

当没有空白单元格时,错误处理会有所帮助
SpecialCells(xlCellTypeBlanks)
如果没有类似的单元格,则始终会返回错误,因此,如果要使用
SpecialCells(xlCellTypeBlanks)

您需要测试是否有空格,则错误处理是唯一的方法(据我所知)

If WorksheetFunction.CountBlank(Worksheet.Columns("A:A")) > 0 Then
    Worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
如果没有空格,您可以使用On Error Resume Next跳过该行,但通常最好测试特定条件,而不是假设您知道将出现什么错误

据我所知,只有当列A中的每个单元格都有一个值时,才会收到“找不到单元格”消息

编辑:根据@brettdj的评论,这里有一个仍然使用CountBlank的替代方案:

If WorksheetFunction.CountBlank(Intersect(worksheet.UsedRange, ws.Columns("A:A"))) > 0 Then
    worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
当然,UsedRange是出了名的变化无常,可能比表面上看起来更大。我认为最好先确定删除行的实际范围,然后检查该范围内的特殊单元格,例如:

Sub DeleteRows()
Dim ws As Excel.Worksheet
Dim LastRow As Long

Set ws = ActiveSheet
LastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
With ws.Range("A2:A" & LastRow)
    If WorksheetFunction.CountBlank(.Cells) > 0 Then
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End If
End With
End Sub
最后一个注意事项-我将变量从“工作表”更改为“ws”,因为“工作表”是Excel保留字。

另一种方法:

If Range("Table2").Rows.Count > 1 Then
   Range("Table2").EntireRow.Delete
End If

+1对于错误处理建议。我同意“工作表”不是最好的变量名。道格,对于OPs问题,该代码仍然会失败,正如上面使用的CountBlank一样,我将查看A列中的每个单元格-因此,这一条件始终是真实的,这是事实。而SpecialCells只查看usedrange,可能没有空白单元格,即“据我所知,如果A列中的每个单元格都有一个值,您只会收到“未找到单元格”消息”是不正确的,谢谢您提供的信息。我想知道OP在整个专栏中使用它的事实,现在我明白了这是怎么回事。道格,干杯。可以更直观地解释特殊单元格。解释这些额外的行的确切作用会有很大帮助:-)考虑添加更多内容来解释代码的作用。抱歉-宏只是在“a”列循环查找空单元格,如果是,则删除行。(您可以根据需要调整最后一行或最后一列字母)。希望这有帮助!:)
If Range("Table2").Rows.Count > 1 Then
   Range("Table2").EntireRow.Delete
End If
Sub delete_rows_blank()

t = 1
lastrow = ActiveSheet.UsedRange.Rows.Count
Do Until t = lastrow
If Cells(t, "A") = "" Then
Rows(t).Delete
End If
t = t + 1
Loop

End Sub