VBA'For'功能未完成循环

时间:2017-06-28 10:26:03

标签: vba excel-vba for-loop excel

我在一张名为“优化”的工作表中有一系列专栏。有些列只包含一个条目(“FAIL”),而其他列包含一组整数。

我需要遍历列并删除其中包含FAIL的列。我使用的代码如下:

Sub delete_fails()

Dim empty_column1 As Integer
Dim iTimes As Long
Dim iRepeat As Integer

iTimes = Application.WorksheetFunction.CountA(Sheets("Optimisation").Range("1:1"))

empty_column1 = 1

    For iRepeat = 1 To iTimes
        If Sheets("Optimisation").Cells(1, empty_column1).Value = "FAIL" Then
            Sheets("Optimisation").Columns(empty_column1).EntireColumn.Delete
        End If
        empty_column1 = empty_column1 + 1
        Next iRepeat

End Sub

代码部分有效,因为它会删除一些FAIL列,但不会全部删除它们。在成功删除所有FAIL列之前,我必须运行宏10-15次。我可以清除代码中的错误,所以我只需运行一次宏吗?也许我需要指示Excel忽略任何包含数字的列并继续下一个?

(注意:如果编码会伤害你的大脑,那么这里的VBA总数会提前道歉。)

2 个答案:

答案 0 :(得分:3)

当删除对象时,在你的情况下,Columns总是向后循环,所以改变你的循环:

For iRepeat = 1 To iTimes

要:

For iRepeat = iTimes To 1 Step -1

尝试以下代码:

With Sheets("Optimisation")
    For iRepeat = iTimes To 1 Step -1
        If .Cells(1, iRepeat).Value = "FAIL" Then
            .Columns(iRepeat).Delete
        End If
    Next iRepeat
End With

答案 1 :(得分:0)

删除列后,不要增加empty_column1。

For iRepeat = 1 To iTimes
    If Sheets("Optimisation").Cells(1, empty_column1).Value = "FAIL" Then
        Sheets("Optimisation").Columns(empty_column1).EntireColumn.Delete
    Else
        empty_column1 = empty_column1 + 1
    End If
Next iRepeat