Excel 2010 VBA代码未运行

我目前正在使用Excel 2010,并试图运行一些代码,我放在一起的应用程序的VBA(打alt + F11后)。 我在双击我想要的项目后出现的记事本中input了代码。 我也保存了一切,如Excelmacros启用工作簿(* .xlsm)。

如果列S,T和U满足条件,我正在尝试为D列的背景着色绿色或红色。 如果列的值都是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 

代码运行,不会抛出任何错误,但它也不会做任何事情。 我究竟做错了什么?

您正在For循环中使用计数器不正确。 应该是这样的…

 For i = 2 To 27293 

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

稍微不同的方法:

 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 

您可能会考虑设置一个(或两个)条件格式规则。

 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