首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA 'For‘函数未完成循环

VBA 'For‘函数未完成循环
EN

Stack Overflow用户
提问于 2017-06-28 10:26:02
回答 2查看 102关注 0票数 1

我在一张名为“优化”的单子上有一系列列。有些列只包含一个条目("FAIL"),另一些列包含一组整数。

我需要循环这些列,并删除那些已经失败的列。我使用的代码如下:

代码语言:javascript
复制
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

该代码部分工作,因为它删除了一些失败的列,但没有全部删除。在成功删除所有失败列之前,我必须运行宏10-15次。代码中是否有我可以清除的bug,所以我只需要运行一次宏?也许我需要指示Excel忽略任何包含数字的列,然后转到下一列?

(注意:这里的总VBA新闻,所以如果编码伤害了你的大脑,请提前道歉。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-28 10:38:38

在删除对象时,在您的情况下,所有的循环都是向后循环的,所以更改您的循环:

代码语言:javascript
复制
For iRepeat = 1 To iTimes

至:

代码语言:javascript
复制
For iRepeat = iTimes To 1 Step -1

试试下面的代码:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2017-06-28 10:37:44

删除列时不要增加empty_column1。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44799902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档