Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA仅检查工作日值和颜色_Vba_Excel - Fatal编程技术网

使用VBA仅检查工作日值和颜色

使用VBA仅检查工作日值和颜色,vba,excel,Vba,Excel,我有下面的VBA代码,如果值大于1,它将以“M”列显示颜色值,并有文本“移动到SA(兼容性降低)” 我想做的是: 我在K列中有日期,这段代码应该只在工作日运行,而不是在周末运行 我需要添加额外的文本以及“移动到SA(兼容性降低)”,比如“文本2”、“文本3”。因此,如果列P已经“移动到SA(兼容性降低)”或“文本2”或“文本3”,则应该进行着色。(如果可以在此处使用通配符,那就太好了) 此代码应仅在工作表“延迟”中运行 讨厌的延迟表又不合作了?如果我正确理解了上面所说的一切,那么下面的代码应该

我有下面的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