Outlook VBA .Restrict использует рабочие часы

Когда я использую ограничение для установки диапазона дат в объекте элемента Outlook, он не выбирает никаких встреч до того, что я установил в качестве «рабочих часов» в Outlook. Как сделать так, чтобы все, что пользователь устанавливает как «рабочие часы», не влияло на мой макрос?

Например. Мои «рабочие часы» в Outlook установлены с 13:00 до 17:00. Я создаю 4 встречи:

  • 11:11, 10:00, 4 сентября 2017 г.
  • 22:22, 13:00, 4 сентября 2017 г.
  • 3333, 18:00, 4 сентября 2017 г.
  • 4444, 13:00, 5 сентября 2017 г.

Мой код подберет последние 3 встречи, но не первую, если я ввожу даты 04.09.2017 и 05.09.2017.

Sub restrictDemo()

Dim olkItems As Outlook.Items, _
    olkSelected As Outlook.Items, _
    olkAppt As Outlook.AppointmentItem, _
    dateStart As Date, _
    dateEnd As Date

dateStart = InputBox("Starting date?", "", "m/d/yyyy")
dateEnd = InputBox("Ending date?", "", "m/d/yyyy")

If IsDate(dateStart) And IsDate(dateEnd) Then

    Set olkItems = Session.GetDefaultFolder(olFolderCalendar).Items
    olkItems.IncludeRecurrences = True
    olkItems.Sort "Start"
    Set olkSelected = olkItems.Restrict("[Start] >= '" & dateStart & "' AND [Start] <= '" & dateEnd & "'")

    For Each olkAppt In olkSelected
        counter = counter + 1
        MsgBox counter
        MsgBox olkAppt.Subject & " " & olkAppt.Location & olkAppt.Start
    Next

Else
    MsgBox "You must enter valid starting and ending dates to run this macro.", vbCritical + vbOKOnly, MACRO_NAME
End If


End Sub

person Fruitful    schedule 18.08.2017    source источник
comment
хорошо, так какой у тебя вопрос?   -  person jsotola    schedule 18.08.2017
comment
Каковы значения dateStart и dateEnd? Имейте в виду, что часы являются частью значения даты/времени. У вас не может быть ограничения только по часам без указания даты.   -  person Dmitry Streblechenko    schedule 18.08.2017
comment
Мой вопрос в том, как сделать так, чтобы «рабочие часы» не влияли на эту программу. Если я введу «9/4/2017» в качестве начала и «9/5/2017», я хочу, чтобы диапазон, который он выбирает, был «9/4/2017 00:00» до «9/5/2017 12». :00AM'.   -  person Fruitful    schedule 18.08.2017
comment
Я ввожу «04.09.2017» и «05.09.2017» для dateStart и dateEnd соответственно.   -  person Fruitful    schedule 18.08.2017


Ответы (1)


Используйте формат, ожидаемый Restict. https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/items-restrict-method-outlook

Sub restrictDemo()

    Dim Counter As Long

    Dim olkItems As items
    Dim olkSelected As items
    Dim olkAppt As AppointmentItem

    Dim dateStart
    Dim dateEnd

    Dim StrFilter As String

    ' You may need to use a different date format.
    dateStart = InputBox("Starting date?", , "2017-08-22")
    dateEnd = InputBox("Ending date?", , "2017-08-23")

    If IsDate(dateStart) And IsDate(dateEnd) Then

        Set olkItems = Session.GetDefaultFolder(olFolderCalendar).items
        olkItems.IncludeRecurrences = True
        olkItems.Sort "Start"

        'StrFilter = "[Start] >= '" & dateStart & "' AND [Start] < '" & dateEnd & "'"
        'Debug.Print StrFilter

        StrFilter = "[Start] >= '" & Format(dateStart, "ddddd h:nn AMPM") & "'"
        Debug.Print StrFilter

        StrFilter = StrFilter & " AND [Start] < '" & Format(dateEnd, "ddddd h:nn AMPM") & "'"
        Debug.Print StrFilter

        Set olkSelected = olkItems.Restrict(StrFilter)

        For Each olkAppt In olkSelected
            Counter = Counter + 1
            Debug.Print Counter & ":" & olkAppt.Subject & " " & olkAppt.location & olkAppt.start
            'MsgBox Counter & ":" & olkAppt.Subject & " " & olkAppt.location & olkAppt.start
        Next

    Else
        MsgBox "Enter valid starting and ending dates.", vbCritical + vbOKOnly, "MACRO_NAME"

    End If

End Sub

Более глубокий вопрос о том, почему день начинается в начале рабочего дня и продолжается 24 часа, остается без ответа.

person niton    schedule 23.08.2017