我的工作表中有两个工作表:Sheet1和Sheet2。 Sheet1允许用户输入文件位置,然后要求后者选择一个范围,然后将数据导入到sheet2中。但是,有2个空白单元格(显然可以手动删除),但是我正在尝试使该过程自动化,但是下面的代码告诉我没有找到任何单元格。
Sum DeleteRows()
Dim SrchNom
Dim Tb as Range
'we get sheet on which data has been copied
Set Tb = Sheet1.Range("E9")
Set SrchNom = Worksheets(Tb.Value).Range("J1", Worksheets(Tb.Value).Range("J1048576").End(xlUp))
SrchNom.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End sub
如果工作表Tb的J列中的一个单元格为空白,我希望能够删除整行。我如何修改此代码以执行我想做的事情?
答案 0 :(得分:0)
尝试:
Sub DeleteRows()
Worksheets(Sheets(1).Cells(9, 5).Value).Columns("J").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
如果由于换行符,空格或组合而遇到的空白单元格实际上不是空白的,您可能会发现针对this问题的答案很有趣。
可能是这种情况,也知道您可以向后遍历一个范围,删除J列可能满足某些条件的所有行,可能是Chr(10)
或Chr(32)
。
答案 1 :(得分:0)
您可以使用此代码,只需将(.Rows(row))替换为您的范围
Public Sub deleteRows()
Dim wks As Excel.Worksheet
Dim rng As Excel.Range
Dim row As Long
Dim lastRow As Long
Set wks = Excel.ActiveSheet
lastRow = Range("A" & Rows.count).End(xlUp).row
With wks
For row = 1 To lastRow
If Application.WorksheetFunction.CountA(.Rows(row)) = 0 Then
If rng Is Nothing Then
Set rng = .Rows(row)
Else
Set rng = Excel.Union(rng, .Rows(row))
End If
End If
Next row
End With
'In order to avoid Run-time error check if [rng] range is not empty, before removing it.
If Not rng Is Nothing Then
Call rng.EntireRow.Delete
End If
End Sub