Outlook VBA: Items.Count переполняется при попытке l oop в обратном направлении через коллекцию встреч, чтобы удалить их - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь создать макрос, который удалит все встречи из календаря Outlook с темой «Переместить в маркетинговую анкету». Я следовал этой инструкции от Microsoft docs , чтобы найти и перечислить все встречи, которые я ищу, но когда я go удаляю их, я знаю, что должен переключиться с For each l oop до For l oop и l oop в обратном направлении из-за способа индексации коллекций, в противном случае код пропускает некоторые встречи.

Когда я делаю это изменение, для l oop терпит неудачу, потому что индекс представляет собой целое число, а выходные данные Debug.print oItemsWithSubjectRange.Count (переполнены?) равны 2147483647. Есть ли другая команда для получения количества встреч, найденных с помощью двух фильтров, которые я применяется?

Я ожидаю, что этот макрос должен будет удалить до 50 встреч с абсолютным максимумом (обычно 10-20), поэтому целое число должно быть достаточным для моих нужд

Вот мой код - я включил оригинал For each l oop внизу (с комментариями), который способен напечатать правильных встреч, которые я хочу удалить, бушель Когда я запускаю код, он пропускает некоторые встречи. For l oop над ним вызывает Runtime error 6: Overflow ошибки.

Sub deleteMoveToMarketing()

    Dim myStart As Date
    Dim myEnd As Date
    Dim oCalendar As Outlook.Folder
    Dim oItems As Outlook.Items
    Dim oItemsWithDateRange As Outlook.Items
    Dim oItemsWithSubjectRange As Outlook.Items
    Dim oAppt As Outlook.AppointmentItem
    Dim strRestriction As String
    Dim i As Integer

    myStart = Date - 30
    myEnd = Date

    Debug.Print "Start:", myStart
    Debug.Print "End:", myEnd

    'Construct filter for the next 30-day date range
    strRestriction = "[Start] >= '" & _
    Format$(myStart, "mm/dd/yyyy hh:mm AMPM") _
    & "' AND [End] <= '" & _
    Format$(myEnd, "mm/dd/yyyy hh:mm AMPM") & "'"
    'Check the restriction string
    Debug.Print strRestriction

    Set oCalendar = Application.Session.GetDefaultFolder(olFolderCalendar)
    Set oItems = oCalendar.Items
    oItems.IncludeRecurrences = True
    oItems.Sort "[Start]"
    'Restrict the Items collection for the date range
    Set oItemsWithDateRange = oItems.Restrict(strRestriction)

    'Construct filter for the subject restriction
    strRestriction = "[Subject] = 'Move to Marketing Questionnaire'"
    'Check the restriction string
    Debug.Print strRestriction

    'Restrict the Items collection for the date range
    Set oItemsWithSubjectRange = oItemsWithDateRange.Restrict(strRestriction)

    'Construct filter for Subject containing 'team'
    Debug.Print oItemsWithSubjectRange.Count
    For i = oItemsWithSubjectRange.Count To 1 Step -1
        Debug.Print oItemsWithSubjectRange(i).Start, oItemsWithSubjectRange(i).Subject
        'oItemsWithSubjectRange(i).Delete
    Next


    'For Each oAppt In oItemsWithSubjectRange
        'Debug.Print oAppt.Start, oAppt.Subject
        'oAppt.Delete
    'Next

End Sub

1 Ответ

0 голосов
/ 17 февраля 2020

В вашем случае Items.Count возвращает -1, потому что коллекция не знает, сколько там элементов, если она не расширяет все повторяющиеся действия.

Поскольку экземпляры включены, вы в конечном итоге удаляете экземпляры повторяющихся действий (которые физически не существуют как реальные элементы). Это может или не может быть то, что вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...