VBA to see if a column contains a certain string

Michael M

Well-known Member
Joined
Oct 27, 2005
Messages
17,972
Office Version
2013
Platform
Windows
thinking !!!

OK, replace the code that is giving us problems with the original code I posted
Put it in the same location

Code:
Sub MM1()
Dim lr As Long, r As Long
lr = Cells(Rows.Count, "F").End(xlUp).Row
For r = 1 To lr
    If Range("F" & r).Value = "Yir" Then
       Range("F" & r).EntireRow.font.ColorIndex = 3
    End If
Next r
End Sub
 
Last edited:

dpaton05

Well-known Member
Joined
Aug 14, 2018
Messages
1,039
Thanks for all this help Michael,

I put that code in and no colours got changed. I ran it a second time and got the error subscript out of range with this line highlighted

Code:
Range("F" & r).EntireRow.Font.ColorIndex = -65383
This is my total procedure:

Code:
Sub cmdCopy()
        Dim wsDst As Worksheet, wsSrc As Worksheet, tblrow As ListRow
        Dim Combo As String, sht As Worksheet, tbl As ListObject
        Dim LastRow As Long, DocYearName As String, lr As Long
        Dim RowColor As Long, w As Window, r As Long
            Application.ScreenUpdating = False
        'assign values to variables
        Set tbl = ThisWorkbook.Worksheets("Costing_tool").ListObjects("tblCosting")
        Set sht = ThisWorkbook.Worksheets("Costing_tool")
        For Each tblrow In tbl.ListRows
            If tblrow.Range.Cells(1, 1).Value = "" Or tblrow.Range.Cells(1, 5).Value = "" Or tblrow.Range.Cells(1, 6).Value = "" Then
                MsgBox "The Date, Service or Requesting Organisation has not been entered for every record in the table"
                Exit Sub
            End If
        Next tblrow
        For Each tblrow In tbl.ListRows
            Combo = tblrow.Range.Cells(1, 26).Value
                Select Case tblrow.Range.Cells(1, 6).Value
                    Case "Yir"
                        DocYearName = tblrow.Range.Cells(1, 37).Value
                    Case "Ang Wes", "Ang Riv"
                        DocYearName = tblrow.Range.Cells(1, 37).Value
                    Case Else
                        DocYearName = tblrow.Range.Cells(1, 36).Value
                End Select
            If Not isFileOpen(DocYearName & ".xlsm") Then Workbooks.Open ThisWorkbook.Path & "\" & DocYearName & ".xlsm"

            Set wsDst = Workbooks(DocYearName).Worksheets(Combo)
            lr = wsDst.Cells.Find("*", , xlValues, , xlRows, xlPrevious).Row
            With wsDst
                    'This copies the first 16 columns, i.e. A:J, of the current row of the table to column A in the destination sheet.
                    tblrow.Range.Resize(, 16).Copy
                    'This pastes in the figures in the first 10 columns starting in column A
                    .Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteFormulasAndNumberFormats
                    'Overwrites the numbers pasted to column I with a formula
                    .Range("I" & .Range("I" & .Rows.Count).End(xlUp).Row).Formula = "=IF(RC[-4]=""Activities"",0,RC[-1]*0.1)"
                    'Overwrites the numbers pasted to column J with a formula
                    .Range("J" & .Range("J" & .Rows.Count).End(xlUp).Row).Formula = "=RC[-1]+RC[-2]"

                        lr = Cells(Rows.Count, "F").End(xlUp).Row
                        For r = 1 To lr
                            If Range("F" & r).Value = "Yir" Then
                               Range("F" & r).EntireRow.Font.ColorIndex = -65383
                            End If
                        Next r
                    'sort procedure copied from vba
                    wsDst.Sort.SortFields.Clear
                    wsDst.Sort.SortFields.Add Key:=Range("A4:A" & lr), _
                        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                            With Workbooks(DocYearName).Worksheets(Combo).Sort
                                .SetRange Range("A3:AK" & lr)
                                .header = xlYes
                                .MatchCase = False
                                .Orientation = xlTopToBottom
                                .SortMethod = xlPinYin
                                .Apply
                            End With
            End With
        Next tblrow
        Application.CutCopyMode = False
        Application.ScreenUpdating = True
End Sub
 
Last edited:

Michael M

Well-known Member
Joined
Oct 27, 2005
Messages
17,972
Office Version
2013
Platform
Windows
Why did you modify this line ?
Code:
Range("F" & r).EntireRow.Font.ColorIndex = -65383
colorindex needs to be a number between 1 - 56, although it is probably a greater number on later versions !!
 

Michael M

Well-known Member
Joined
Oct 27, 2005
Messages
17,972
Office Version
2013
Platform
Windows
try this slight mod

Code:
lr = .Cells(Rows.Count, "F").End(xlUp).Row
       For r = 1 To lr
           If .Range("F" & r).Value = "Yir" Then .Range("F" & r).EntireRow.Font.ColorIndex = 3
       Next r
 

dpaton05

Well-known Member
Joined
Aug 14, 2018
Messages
1,039
That seems to have worked, thank you so much Michael :)
 

dpaton05

Well-known Member
Joined
Aug 14, 2018
Messages
1,039
Just noticed that is has appeared to have changed the colour of every cell in column F of the source workbook to be blue, where the rows around it are alternate colours. How can I make it the same as the rows around it?
 

Michael M

Well-known Member
Joined
Oct 27, 2005
Messages
17,972
Office Version
2013
Platform
Windows
what colour are the rows around it ??
 

dpaton05

Well-known Member
Joined
Aug 14, 2018
Messages
1,039
White and light blue that appears to be the standard colour of a table.
 

Michael M

Well-known Member
Joined
Oct 27, 2005
Messages
17,972
Office Version
2013
Platform
Windows
The code I provided should only affect the Dest worksheet AND only the font, not the cell colour ??
 

Forum statistics

Threads
1,078,289
Messages
5,339,327
Members
399,293
Latest member
maras

Some videos you may like

This Week's Hot Topics

Top