我在一张名为“优化”的单子上有一系列列。有些列只包含一个条目("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该代码部分工作,因为它删除了一些失败的列,但没有全部删除。在成功删除所有失败列之前,我必须运行宏10-15次。代码中是否有我可以清除的bug,所以我只需要运行一次宏?也许我需要指示Excel忽略任何包含数字的列,然后转到下一列?
(注意:这里的总VBA新闻,所以如果编码伤害了你的大脑,请提前道歉。)
发布于 2017-06-28 10:38:38
在删除对象时,在您的情况下,所有的循环都是向后循环的,所以更改您的循环:
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发布于 2017-06-28 10:37:44
删除列时不要增加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 iRepeathttps://stackoverflow.com/questions/44799902
复制相似问题