Excel逻辑问题

时间:2013-07-19 06:43:29

标签: excel vba

我开发了一个简单的vba函数,可以确定是否有人在下班后工作。这是我写的原始查询:

Public Function AfterHours(StartTime As Date, EndTime As Date, ActivityDate As Date)

AfterHours = False

If (Weekday(ActivityDate) <> 1 OR Weekday(ActivityDate) <> 7) Then
    If Hour(StartTime) >= 19 Or Hour(EndTime) < 7 Then
        AfterHours = True
    End If
Else
    AfterHours = True
End If
End Function

但是,此查询不会选择在正常工作时间周末工作的员工。如果我将其更改为:

Public Function AfterHours(StartTime As Date, EndTime As Date, ActivityDate As Date)

AfterHours = False

If (Weekday(ActivityDate) = 1 Or Weekday(ActivityDate) = 7) Then
    AfterHours = True
Else
    If Hour(StartTime) >= 19 Or Hour(EndTime) < 7 Then
        AfterHours = True
    End If
End If
End Function

查询功能正常。两者的逻辑是相同的,只是颠倒了。在第一个函数中,如果它不是周末,它应该测试它是否在工作时间之外,否则它是周末并且应该被标记。第二个函数检查它是否是周末并标记它,否则它检查它是否在工作时间之外。

我不明白为什么这些查询会返回不同的结果。

1 个答案:

答案 0 :(得分:3)

您的第一个If声明错误。

If (Weekday(ActivityDate) <> 1 OR Weekday(ActivityDate) <> 7) Then

因为您使用Or,所以这将永远是真的。请改用And