使用VBA仅检查工作日值和颜色
我有下面的VBA代码,如果值大于1,它将以“M”列显示颜色值,并有文本“移动到SA(兼容性降低)” 我想做的是:使用VBA仅检查工作日值和颜色,vba,excel,Vba,Excel,我有下面的VBA代码,如果值大于1,它将以“M”列显示颜色值,并有文本“移动到SA(兼容性降低)” 我想做的是: 我在K列中有日期,这段代码应该只在工作日运行,而不是在周末运行 我需要添加额外的文本以及“移动到SA(兼容性降低)”,比如“文本2”、“文本3”。因此,如果列P已经“移动到SA(兼容性降低)”或“文本2”或“文本3”,则应该进行着色。(如果可以在此处使用通配符,那就太好了) 此代码应仅在工作表“延迟”中运行 讨厌的延迟表又不合作了?如果我正确理解了上面所说的一切,那么下面的代码应该
讨厌的延迟表又不合作了?如果我正确理解了上面所说的一切,那么下面的代码应该可以做到这一点:
Sub LatencyMarker()
Dim targetWS As Worksheet
Dim dataRange As Range
Dim dataArr() As Variant
Dim rowCounter As Long
Application.ScreenUpdating = False
Set targetWS = ThisWorkbook.Sheets("Latency")
Set dataRange = targetWS.Range("A1:" & targetWS.Range(targetWS.UsedRange.address)(targetWS.UsedRange.Rows.Count, targetWS.UsedRange.Columns.Count))
Set dataArr = dataRange
For rowCounter = 1 To UBound(dataArr, 1)
If Weekday(dataArr(rowCounter, 11), vbMonday) <= 5 Then
If dataArr(rowCounter, 16) = "Moved to SA (Compatibility Reduction)" Or dataArr(rowCounter, 16) = "Text 2" Or dataArr(rowCounter, 16) = "Text 3" Then
If dataArr(rowCounter, 13) >= 1 Then
dataRange(rowcoumter, 13).Font.ColorIndex = 3
Else
dataRange(rowcoumter, 13).Font.ColorIndex = 0
End If
End If
End If
Next
ExitHere:
Application.ScreenUpdating = True
End Sub
Sub-LatencyMarker()
将目标设置为工作表
变暗数据范围作为范围
Dim dataArr()作为变量
暗排计数器与长排计数器相同
Application.ScreenUpdating=False
Set targetWS=thiswoolk.Sheets(“延迟”)
设置dataRange=targetWS.Range(“A1:&targetWS.Range(targetWS.UsedRange.address)(targetWS.UsedRange.Rows.Count,targetWS.UsedRange.Columns.Count))
设置dataArr=dataRange
对于rowCounter=1到UBound(dataArr,1)
如果工作日(dataArr(rowCounter,11),vbMonday)=1,则
数据范围(rowcoumter,13)。Font.ColorIndex=3
其他的
数据范围(rowcoumter,13)。Font.ColorIndex=0
如果结束
如果结束
如果结束
下一个
出口:
Application.ScreenUpdating=True
端接头
两件事-我将大部分范围数据操作转换为数组数据,并重命名了一些变量以使其更清晰-
希望这会有所帮助。“并且没有文本“移动到SA(兼容性降低)”:实际上,如果范围(“p”&r)=“移动到SA(兼容性降低)”,则您的代码正在执行相反的操作“然后。您可能需要改写您的叙述或代码,并添加一些所需行为的示例!!对不起,编辑了这张照片,谢谢你的帮助。我在这里收到一条错误消息-
Set dataArr=dataRange
-无法分配给arrayHi@stackmark,oops,删除该行中的“Set”并应全部设置。变量未在dataRange(rowcoumter,13)中定义错误。Font.ColorIndex=3
ah是的,行计数器中的打字错误-应为dataRange(rowCounter,13).Font.ColorIndex=3
。。。在选项Explicit
的值中给所有人上了一课@在silkcode中,有趣的是,你总是建议大家使用选项Explicit
的好处,但千万不要在代码中使用它!
Sub LatencyMarker()
Dim targetWS As Worksheet
Dim dataRange As Range
Dim dataArr() As Variant
Dim rowCounter As Long
Application.ScreenUpdating = False
Set targetWS = ThisWorkbook.Sheets("Latency")
Set dataRange = targetWS.Range("A1:" & targetWS.Range(targetWS.UsedRange.address)(targetWS.UsedRange.Rows.Count, targetWS.UsedRange.Columns.Count))
Set dataArr = dataRange
For rowCounter = 1 To UBound(dataArr, 1)
If Weekday(dataArr(rowCounter, 11), vbMonday) <= 5 Then
If dataArr(rowCounter, 16) = "Moved to SA (Compatibility Reduction)" Or dataArr(rowCounter, 16) = "Text 2" Or dataArr(rowCounter, 16) = "Text 3" Then
If dataArr(rowCounter, 13) >= 1 Then
dataRange(rowcoumter, 13).Font.ColorIndex = 3
Else
dataRange(rowcoumter, 13).Font.ColorIndex = 0
End If
End If
End If
Next
ExitHere:
Application.ScreenUpdating = True
End Sub