【发布时间】:2023-04-11 03:40:01
【问题描述】:
我正在努力思考一段过去对我有用的代码,但现在在不同的应用程序中不起作用。基本上,它需要删除包含特定列中信息的所有行,其余的保持不变。当我运行宏时,代码执行没有问题,但只是删除了一些带有值的行,而不是全部。当连续多次运行代码时,它最终会按预期进行,但这确实不方便。代码如下:
Sub Delete_Signoffed()
Dim rCell As Range
Dim iCol As Integer
Dim iRow As Integer
Worksheets("MilestoneDueDate").Activate
If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
ActiveWindow.FreezePanes = False
Columns.EntireColumn.Hidden = False
If WorksheetFunction.CountA(Columns("A")) = 0 Then
Columns("A").Delete
Rows("1:6").Delete
End If
iCol = Cells.Find("Sign-Off By", LookAt:=xlWhole).Column
For iRow = 2 To Cells(Rows.Count, iCol).End(xlUp).Row
Cells(iRow, iCol).Select
If Not IsEmpty(Cells(iRow, iCol).Value) Then Rows(iRow).EntireRow.Delete
Next iRow
End Sub
源文件有一些格式问题,在分配iCol列值之前的一切都是为了修复格式,所以请忽略。 iRow 从 2 开始以避免删除文件头。
关于为什么 For 循环没有按预期工作的任何想法?
提前致谢!
【问题讨论】:
-
删除时总是向后循环。周围有很多例子。
-
您也可以使用
Join连接您要删除的所有行,然后一次删除它们。也有很多该选项的示例。