【问题标题】:VBA 'For' function not completing cycleVBA'For'函数未完成循环
【发布时间】:2017-06-28 10:26:02
【问题描述】:

我在名为“优化”的工作表中有一系列列。一些列仅包含一个条目(“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 新手,如果编码伤害你的大脑,请提前道歉。)

【问题讨论】:

    标签: vba excel for-loop


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      删除列时不要增加 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
      

      【讨论】:

        猜你喜欢
        • 2015-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-18
        • 2020-11-27
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多