I am new to VBA. I am currently trying to apply a loop on a user defined function. The defined function is as follows.
Function CountColor(InRange As range, ColorIndex As Long, _
Optional OfText As Boolean = False) As Long
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' CountColor
' This function counts the cells in InRange whose ColorIndex
' is equal to the ColorIndex parameter. The ColorIndex of the
' Font is tested if OfText is True, or the Interior property
' if OfText is omitted or False. If ColorIndex is not a valid
' ColorIndex (1 -> 56, xlColorIndexNone, xlColorIndexAutomatic)
' 0 is returned. If ColorIndex is 0, then xlColorIndexNone is
' used if OfText is Fasle or xlColorIndexAutomatic if OfText
' is True. This allows the caller to use a value of 0 to indicate
' no color for either the Interior or the Font.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim R As range
Dim N As Long
Dim CI As Long
If ColorIndex = 0 Then
If OfText = False Then
CI = xlColorIndexNone
Else
CI = xlColorIndexAutomatic
End If
Else
CI = ColorIndex
End If
Application.Volatile True
Select Case ColorIndex
Case 0, xlColorIndexNone, xlColorIndexAutomatic
' OK
Case Else
If IsValidColorIndex(ColorIndex) = False Then
CountColor = 0
Exit Function
End If
End Select
For Each R In InRange.Cells
If OfText = True Then
If R.Font.ColorIndex = CI Then
N = N + 1
End If
Else
If R.Interior.ColorIndex = CI Then
N = N + 1
End If
End If
Next R
CountColor = N
End Function
I am trying to use this function CountColor in a Sub. But it throws a runtime 424 error.
Sub Summary()
LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
TOTALFAILS = CountColor((range(Cells(i, 4), Cells(i, LastColumn))), 38)
Cells(i, LastColumn + 8) = TOTALFAILS
Next i
End Sub
Could you please help me figure out what am doing wrong? Any help will be deeply appreciated. Thanks
There is one "(" more than needed in the way the function is called, thus it does not get the correct parameters. Try this:
CountColor(Range(Cells(i, 4), Cells(i, LastColumn)), 38)
To make sure you are passing on the expected parameter, press Ctrl + I, while on the line. The VBEditor would help:

In general, whenever working with Range() and Cells() objects, make sure to refer their Worksheets and Workbooks, to avoid 1004 errors. In the case of the example it should be like this:
With ThisWorkbook.Worksheets(1)
For i = 2 To LastRow
TOTALFAILS = CountColor(.Range(.Cells(i, 4), .Cells(i, LastColumn)), 38)
.Cells(i, LastColumn + 8) = TOTALFAILS
Next i
End With
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With