我正在尝试编写一个代码,它基本上会查看第13-33行并删除整行,如果列B-M中的单元格都是空白而且列A不是空白。
我在下面写的第一个代码只有当B列中的单元格为空时才会删除整行,但我需要将B-M中的所有单元格都空白才能删除整行。
java.util.List
我尝试在下面的代码中以不同的方式编写它,但不能达到预期的效果。
Sub scheduleA()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Sheets("Schedule A Template").Select
Dim RowstoDelete As Long
x = 33
For RowstoDelete = Cells(x, 2).End(xlUp).Row To 13 Step -1
If (Cells(RowstoDelete, 2).Value = "0") And (Cells(RowstoDelete, 1).Value <> "") Then
Rows(RowstoDelete).Delete Shift:=xlUp
End If
Next RowstoDelete
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
请帮忙!
答案 0 :(得分:1)
行删除的条件是:列A不为空,列B到M为空。那么这样的事情应该可以解决问题:
OWNER ACCOUNT MONEY isMAX
Admin account1 500 YES
Admin account2 500 YES
Admin account3 300 NO
请注意Sub ScheduleA()
On Error GoTo errHandler
Const TOP_ROW As Long = 13
Const BOTTOM_ROW As Long = 33
Dim rowIndex As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With ThisWorkbook.Worksheets("Schedule A Template")
For rowIndex = .Cells(BOTTOM_ROW, "A").End(xlUp).Row To TOP_ROW Step -1
If Not IsEmpty(.Cells(rowIndex, "A").Value2) Then '...column A is not blank.
If Application.WorksheetFunction.CountA(.Range(.Cells(rowIndex, "B"), .Cells(rowIndex, "M"))) = 0 Then '...all cells on row rowIndex from columns B to M are blank.
.Rows(rowIndex).Delete Shift:=xlUp
End If
End If
Next
End With
Cleanup:
On Error Resume Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Exit Sub
errHandler:
MsgBox Err.Description, vbExclamation + vbOKOnly, "Error"
Resume Cleanup
End Sub
已消失;你几乎没有必要选择任何东西来完成工作。不依赖于选择将使您的代码更加健壮。在上面的代码中,只要表达式以句点开头,.Select
块就会告诉其中的代码引用目标工作表,例如With
。
此外,关闭.Cells
和ScreenUpdating
时,系统地包含错误处理以重新打开它们。这样,如果出现问题,您的代码将不会使Excel处于不良状态。
最后,不是通过其选项卡的名称引用工作表(从Excel中看到),您可以直接使用它们的CodeName来引用它们,如VBA编辑器所示,在“属性”窗口中,在工作表的(名称)属性下(按Ctrl + R显示Project Explorer,单击Microsoft Excel Objects节点下的工作表,然后按F4显示Properties窗口)。你可以改变这个值;我通常会将其更改为shtScheduleATemplate。然后,Calculation
行可以重写为:
With
...即使您从Excel更改了工作表的名称,它仍然可以正常工作。
编辑:在您的问题代码中,您在确定启动循环的底行索引时检查B列。但是,通过这样做,您可能会遗漏一些应删除的行。我已将我的答案改为在A栏中进行检查:
With shtScheduleATemplate