如何在两个TimeValue之间进行设置

时间:2017-01-25 02:32:56

标签: vba excel-vba outlook-vba excel

我在07:00 AM到04:00 PM之间设置TimeValue时无法运行程序,或者在此时间之外运行不同的程序。

Option Explicit
Public Sub Example()
    Dim FromStart As Date
    Dim ToEnd As Date

    FromStart = TimeValue("07:00:00 AM")
    ToEnd = TimeValue("04:00:00 PM")

    If Weekday(Now()) = vbMonday Or Weekday(Now()) = vbTuesday Or _
       Weekday(Now()) = vbWednesday Or Weekday(Now()) = vbThursday Or _
       Weekday(Now()) = vbFriday And _
       TimeValue(Now()) >= FromStart And TimeValue(Now()) <= ToEnd Then

       ' Do something
       Debug.Print Now
    Else
        ' Do something else
        Debug.Print "bla bla !!!"
    End If
End Sub

1 个答案:

答案 0 :(得分:1)

您的代码不起作用的原因是布尔顺序优先级存在问题。自&#34;和&#34;操作先于&#34;或&#34;操作得到你没想到的。

如果希望代码按原样工作,则应在ORed表达式周围添加括号。当然,代码也应该像Ken评论的那样进行简化。

Public Sub Example()
    Dim FromStart As Date
    Dim ToEnd As Date
    Dim DayNow As Date

    FromStart = TimeValue("07:00:00 AM")
    ToEnd = TimeValue("04:00:00 PM")
    DayNow = Weekday(Now())


    If (DayNow >= vbMonday And DayNow <= vbFriday) And _
        (TimeValue(Now()) >= FromStart And TimeValue(Now()) <= ToEnd) Then
        ' Do something 
        Debug.Print Now
    Else
        ' Do something else
        Debug.Print "bla bla !!!"
    End If
End Sub