Excel VBA - 复杂嵌套if / then issue

时间:2017-11-28 14:16:01

标签: excel vba excel-vba

我有代码,我正在改变运行每日报告,显示有关员工的各种统计信息,包括他们的登录时间。

此代码在更改之前所执行的操作是通过包含登录时间的列循环的。如果时间大于8小时28分钟,则忽略它。如果列在0到8:28之间,它会促使我说“是”或“是”短时间"获得批准,并相应地突出显示。最后,如果员工当天不在那里,它会将整行显示为灰色。

由于我通常会让人们在星期五做更短的日子,所以我正在更新代码,以便我不必经常告诉代码标记每个人批准的时间很短。我想让代码问我报告是否是星期五。如果不是,则转移到旧的代码片段。如果是,则会提示我输入当天的工作小时数(假设每个人的工作时间相同)。然后继续询问短时间。

看来我的逻辑基本上是正确的,但是,对于代码的两个部分,突出显示现在都不起作用。在"旧代码"中,无论我是否将短时间标记为已批准,它仍然会突出显示红色(5263615)。在新的代码中,无论如何,它都会突出灰色(11711154)。我认为它只是缺失的东西,但我找不到它。

'Account for any OOO
    Dim int1 As Integer, int2 As Integer, workHours As Variant, scheduledOff As Range
    Dim dayPrompt As String, stPrompt As String
    dayPrompt = "Is this report for a Friday?"
    int1 = MsgBox(dayPrompt, vbYesNo)
    If int1 = vbYes Then
        workHours = InputBox("Enter the number of working hours for the day")
        For Each scheduledOff In Range("H2:H8")
            If scheduledOff.Value > 0 And scheduledOff.Value < (workHours) Then
                Cells(scheduledOff.Row, 1).Resize(, 1).Interior.Color = 13382655
                stPrompt = "Was the highlighted analyst scheduled to be short time?"
                int2 = MsgBox(stPrompt, vbYesNo)
                    If int1 = vbYes Then
                        scheduledOff.FormatConditions.Delete
                        scheduledOff.Interior.Color = 11711154
                    Else
                        scheduledOff.FormatConditions.Delete
                        scheduledOff.Interior.Color = 5263615
                    End If
                Cells(scheduledOff.Row, 1).Resize(, 1).Interior.Color = 16777215
            ElseIf scheduledOff.Value = 0 Then
                Cells(scheduledOff.Row, 1).Resize(, 20).FormatConditions.Delete
                Cells(scheduledOff.Row, 1).Resize(, 20).Interior.Color = 11711154
            End If
        Next scheduledOff
    ElseIf int1 = vbNo Then
        For Each scheduledOff In Range("H2:H8")
            If scheduledOff.Value > 0 And scheduledOff.Value < TimeValue("8:28:00") Then
                Cells(scheduledOff.Row, 1).Resize(, 1).Interior.Color = 13382655
                stPrompt = "Was the highlighted analyst scheduled to be short time?"
                int2 = MsgBox(stPrompt, vbYesNo)
                    If int1 = vbYes Then
                        scheduledOff.FormatConditions.Delete
                        scheduledOff.Interior.Color = 11711154
                    Else
                        scheduledOff.FormatConditions.Delete
                        scheduledOff.Interior.Color = 5263615
                    End If
                Cells(scheduledOff.Row, 1).Resize(, 1).Interior.Color = 16777215
            ElseIf scheduledOff.Value = 0 Then
                Cells(scheduledOff.Row, 1).Resize(, 20).FormatConditions.Delete
                Cells(scheduledOff.Row, 1).Resize(, 20).Interior.Color = 11711154
            End If
        Next scheduledOff
    End If

0 个答案:

没有答案