1

誰かが時間外に働いているかどうかを判断するための簡単な 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

クエリは正しく機能します。両方のロジックは同じで、逆になっているだけです。最初の関数では、週末でない場合は営業時間外かどうかをテストする必要があります。それ以外の場合は週末であり、フラグを立てる必要があります。2 番目の関数は、週末かどうかをチェックしてフラグを立てます。そうでない場合は、営業時間外かどうかをチェックします。

これらのクエリが異なる結果を返す理由がわかりません。

4

1 に答える 1

3

あなたの最初のIf発言は間違っています。

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

これを使用するためOr、常に true になります。And代わりに使用してください。

于 2013-07-19T07:11:39.693 に答える