简体   繁体   中英

Excel 2010 VBA Code not running

I'm currently using Excel 2010 and am trying to run some code I put together in VBA for Applications (after hitting alt+F11). I typed up the code in a notepad that appeared after double clicking the project I wanted to work on. I also saved everything as Excel Macro Enabled Workbook (*.xlsm).

I am trying to color the backgrounds of Column D either green or red if columns S, T, and U meet the criteria. If the columns all have a value of 0 then Cell D should be colored green. If not, it should be colored red.

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

The code runs and doesn't throw any error but it also doesn't do anything. What am I doing wrong?

You are using counter in For loop incorrectly. It should be like this...

For i = 2 To 27293

Changed For condition . Try this:-

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

A slightly different approach:

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

You might consider setting one (or two) conditional formatting rules.

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

I've used individual SUM functions to ensure that any text returns a numerical value of zero.

Alternate AutoFilter method.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM