基本上,我希望VBA循环一个范围(E2 - 最后一行),当它发现2014年要添加的任何月份和日期“dd / mm”时,c.i.p“dd / mm / 2014”。其次,如果它找到“不适用”,它应该用红色突出显示该单元格。但是,我的代码没有做任何事情。我的代码出了什么问题?
Sub yearstandard()
Dim wb As Workbook
Dim ws As Worksheet
Dim range As range
Dim i As Long
LastRow = FindLastRow(1)
For i = 5 To LastRow 'test row 1 to whatever the last populated row is
Set cell = Cells(i, 2) 'Define cell as the cell to be tested e.g. (cells 1,1) is A1
Select Case cell.Value 'select case value in cell
Case Is = "dd/mm"
cell.Value = "dd/mm/2014" 'wrap each date entered in year 2014
Case Is = "n/a"
cell.Interior.Color = RGB(255, 255, 102) 'highlight cells with value "n/a" in red
End Select
Next i 'go to the next loop counter
End Sub
答案 0 :(得分:0)
在您的评论中,您表示您将手动输入3/14或n / a进入单元格。
假设您的区域设置为美国(mdy),并且您将在今年输入数据,则无需使用VBA。只需输入3/14,Excel将自动添加当前年份。关于将n / a转为红色,只需在整个列上使用条件格式。您可能希望将列自定义格式为d / m / yyyy,如果您没有"请参阅" 2014年。
如果您绝对必须在VBA中执行此操作,那么类似下面的内容将为E列中的范围设置从E2到最后一行的选项。
我还假设该列中没有其他条件格式。如果有,那么,我们将需要在运行宏时保留它,而不是删除旧的条件格式。
Sub FormatColE()
With Range("E2", Cells(Rows.Count, "E").End(xlUp))
.NumberFormat = "m/d/yyyy"
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=""n/a"""
.FormatConditions(.FormatConditions.Count).SetFirstPriority
With .FormatConditions(1)
.Interior.Color = vbRed
.StopIfTrue = False
End With
End With
End Sub