我的工作表名为'1Q FY 18',这是第二张,'Holiday'是第7张。
'1Q FY 18'第12行包含4/1至6/30的日期。 从'B20'到'B35'的细胞包含2018年的假期。
我想突出显示第二张表中具有匹配值的列(“B20:B35”)。换句话说,我想为假期的列着色。
我的代码是这样的。
Sub Holiday()
lastr = Worksheets(2).UsedRange.Rows.Count
lastc = Worksheets(2).UsedRange.Columns.Count
Worksheets(2).Activate
Set ws7 = Worksheets("Holiday")
Set rng1 = ws7.Range("B20:B35")
For i = 15 To lastc
If Not IsEmpty(Application.WorksheetFunction.VLookup(Cells(12, i).Value, rng1, 1)) Then
Range(Cells(13, i), Cells(lastr - 2, i)).Interior.ColorIndex = 6
End If
Next i
End Sub
但是这个错误发生了。 当我调试时,它会突出显示
****如果不是IsEmpty(Application.WorksheetFunction.VLookup(Cells(12,i).Value,rng1,1))那么****
我该怎么办?
答案 0 :(得分:0)
这是一个执行您描述的简单宏。我已在其中放置了.select
语句,因此您可以单步执行代码以查看其工作原理,但之后应将其删除。了解它的工作原理后,您可以根据自己的需要进行更改。如果您有疑问,请告诉我。动画gif显示工作簿的每个工作表,然后运行宏。在我的例子中,我每周都选择假期,但你可以改变它。我还包括一个sub来方便地重置颜色。 (你说你想要"为列着色"但我只是为单元格着色。如果你真的想要为整个列着色,你将替换cell.interior
..和r.interior
.. 。Columns(cell.Column).interior
...)
Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim r1 As Range, r2 As Range, cell As Range, holidayCell As Range
Set sh1 = Worksheets("1Q FY 18")
Set sh2 = Worksheets("Holiday")
Set r1 = sh1.Range("A12")
Set r1 = sh1.Range(r1, r1.End(xlToRight))
Set r2 = sh2.Range("B20:B35")
resetColor r1
For Each cell In r1
cell.Select
For Each holidayCell In r2
If cell = holidayCell Then
cell.Interior.Color = vbYellow
Exit For
End If
Next
Next cell
End Sub
Sub resetColor(r As Range)
With r.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub