2017-05-22 128 views
1

我目前正在使用Excel 2010,並試圖運行一些代碼,我放在一起的應用程序的VBA(打alt + F11後)。我在雙擊我想要處理的項目後出現的記事本中輸入了代碼。我還將所有內容保存爲Excel宏啓用工作簿(* .xlsm)。Excel 2010 VBA代碼未運行

我想爲列D的背景着色,如果列S,T和U滿足條件,則可以是綠色或紅色。如果所有列的值均爲0,則單元格D應爲綠色。如果不是,它應該被塗成紅色。

Sub GreenOrRed() 
    Dim i As Integer 
    For i = 2 To i = 27293 
    If (Cells(i, "S").Value = 0 And Cells(i, "T").Value = 0 And Cells(i, "U").Value = 0) Then 
     Cells(i, "D").Interior.ColorIndex = 10 
    Else 
     Cells(i, "D").Interior.ColorIndex = 9 
    End If 
    Next i 
End Sub 

該代碼運行並不會引發任何錯誤,但它也不會執行任何操作。我究竟做錯了什麼?

+0

只是爲了讓你能理解**爲什麼** For'循環是有效的,但沒有做任何事情......你的語句實際上是'For i = 2 To(i = 27293)'。在循環初始化時,「i」爲0,所以「i = 27293」等同於「False」。當強制爲「Integer」時,「False」爲0.因此,您的語句變爲「For i = 2 To 0」。因爲2已經大於0,所以控制立即跳轉到'Next i'後面的語句。 – YowE3K

+0

嘿大家好,謝謝你的回覆。我發現我的問題是我沒有在所有單元格之前放置「工作表(Sheet).Cells」。一旦我做到了,我就可以讓我的東西工作。我也將函數從For循環更改爲While循環。 – fantomknight1

回答

2

您在For循環中錯誤地使用了計數器。它應該是這樣的...

For i = 2 To 27293 
1

更改For condition。 試試這個: -

Sub GreenOrRed() 
    Dim i As Integer 
    For i = 2 To 27293 
    If (Cells(i, "S").Value = 0 And Cells(i, "T").Value = 0 And Cells(i, "U").Value = 0) Then 
     Cells(i, "D").Interior.ColorIndex = 10 
    Else 
     Cells(i, "D").Interior.ColorIndex = 9 
    End If 
    Next i 
End Sub 
1

稍微不同的方法:

Sub GreenOrRed() 
    Dim r As Range, rr As Range 
    Set rr = Range("D1:D27293") 

    For Each r In rr 
     If r.Offset(0, 15).Value = 0 And r.Offset(0, 16).Value = 0 And r.Offset(0, 17).Value = 0 Then 
      r.Interior.ColorIndex = 10 
     Else 
      r.Interior.ColorIndex = 9 
     End If 
    Next r 
End Sub 
0

可以考慮設置一個(或兩個)條件格式規則。

Option Explicit 

Sub GreenOrRed() 
    With ActiveSheet 
     With .Range(.Cells(2, "D"), .Cells(.Rows.Count, "D").End(xlUp)) 
      .Interior.ColorIndex = 9 
      .FormatConditions.Delete 
      With .FormatConditions.Add(Type:=xlExpression, Formula1:="=and(sum($S2)=0, sum($T2)=0, sum($U2)=0)") 
       .Interior.ColorIndex = 10 
       .StopIfTrue = True 
      End With 
     End With 
    End With 
End Sub 

我已經使用了單獨的SUM函數來確保任何文本返回數值爲零。

備用AutoFilter方法。

Sub GreenOrRedFiltered() 
    With ActiveSheet 
     If .AutoFilterMode Then .AutoFilterMode = False 
     With .Range(.Cells(1, "D"), .Cells(.Rows.Count, "D").End(xlUp)).Resize(, 18) 
      .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0).Columns(1).Interior.ColorIndex = 9 
      .AutoFilter Field:=16, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString 
      .AutoFilter Field:=17, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString 
      .AutoFilter Field:=18, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString 
      With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) 
       If CBool(Application.Subtotal(103, .Cells)) Then 
        .Columns(1).SpecialCells(xlCellTypeVisible).Interior.ColorIndex = 10 
       End If 
      End With 
     End With 
     If .AutoFilterMode Then .AutoFilterMode = False 
    End With 
End Sub