I'm Trying to create a program to total the amount of cells containing green and red font in column A among all the sheets in the workbook.
In the provided code below the code it counts ALL the cells containing green and red font in column A of the worksheets.
Please be sure to leave a comment if you can guide me in the right direction!
I also made an example google sheet of what im trying to accomplish: https://docs.google.com/spreadsheets/d/1yLfCxaT-cIl_W77Y67xdg_ZTSQlg9X2a5vxAH4JtDpk/edit?usp=sharing
' If it's not going to return something, you can define this as a procedure (sub) and not a function
Sub Test_It()
Dim mySheet As Worksheet ' Define as worksheet if you're going to loop through sheets and none is a Graph/Chart sheet
Dim printRow As Integer ' Beware that integer it's limited to 32k rows (if you need more, use Long)
printRow = 2
For Each mySheet In ThisWorkbook.Sheets ' use the mySheet object previously defined
Range("N" & printRow).Value = "Sheet Name:"
Range("O" & printRow).Value = mySheet.Name
Range("P" & printRow).Value = "Approval:"
Range("Q" & printRow).Value = SumGreen(mySheet) ' you can pass the sheet as an object
Range("R" & printRow).Value = "Refused:"
Range("S" & printRow).Value = SumRed(mySheet)
printRow = printRow + 1
Next mySheet
End Sub
-------------------------------------------
Function SumGreen(mySheet As Worksheet) As Long ' define the type the function is going to return
Dim myCell As Range
Dim counter As Long
For Each myCell In mySheet.UsedRange.Columns("A") ' UsedRange is the range that has information
If myCell.Font.Color = RGB(112, 173, 71) Then ' 255 is red, not green, change to whatever you need
counter = counter + 1 ' change to counter + mycell.value if you have values and you want to sum them
End If
Next myCell
' Set the function to return the counter
SumGreen = counter
End Function
-------------------------------------------
Function SumRed(mySheet As Worksheet) As Long ' define the type the function is going to return
Dim myCell As Range
Dim counter As Long
For Each myCell In mySheet.UsedRange.Columns("A") ' UsedRange is the range that has information
If myCell.Font.Color = 255 Then ' 255 is red, not green, change to whatever you need
counter = counter + 1 ' change to counter + mycell.value if you have values and you want to sum them
End If
Next myCell
' Set the function to return the counter
SumRed = counter
End Function
your green color is not RGB(112, 173, 71), try so
Sub Test_It()
Dim mySheet As Worksheet
Dim printRow As Integer
printRow = 2
For Each mySheet In ThisWorkbook.Sheets
Range("A" & printRow).Value = mySheet.Name
Range("B" & printRow).Value = SumGreen(mySheet)
Range("C" & printRow).Value = SumRed(mySheet)
printRow = printRow + 1
Next mySheet
End Sub
Function SumGreen(mySheet As Worksheet) As Long
Dim myCell As Range
Dim counter As Long
For Each myCell In mySheet.UsedRange.Columns(1).Cells ' <<<< changed
If myCell.Font.Color = 65280 Then
counter = counter + 1
End If
Next myCell
' Set the function to return the counter
SumGreen = counter
End Function
Function SumRed(mySheet As Worksheet) As Long
Dim myCell As Range
Dim counter As Long
For Each myCell In mySheet.UsedRange.Columns(1).Cells
If myCell.Font.Color = 255 Then ' 255 is red
counter = counter + 1
End If
Next myCell
' Set the function to return the counter
SumRed = counter
End Function
You need to iterate over the cells, not the range:
Function SumGreen(mySheet As Worksheet) As Long
Dim rng As Range
Set rng = mySheet.UsedRange.Columns("A")
Dim cel As Range
Dim counter As Long
For Each cel In rng.Cells 'add .Cells here and it works like a charm
If myCell.Font.Color = RGB(0, 255, 0) Then
counter = counter + 1
End If
Next myCell
SumGreen = counter
End Function
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.