2017-06-28 72 views
1

我在一張名爲「Optimization」的表中有一系列的列。某些列只包含一個條目(「FAIL」),而其他列包含一組整數。VBA'For'功能未完成周期

我需要循環遍歷列並刪除其中有失敗的列。我用的代碼如下:

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福利局這裏,所以提前道歉,如果編碼傷害你的大腦。)

回答

3

當刪除對象,你的情況列,永諾循環向後,所以改變你的循環:

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 
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