Ошибка «администратор ограничил количество элементов, которые вы можете открыть одновременно» при циклической сортировке элементов почты

Когда я перебираю папку с более чем 1000 писем, я получаю эту ошибку.

Function SortMailboxOnDate(mailbox As Outlook.folder) As Collection
    Dim i As Integer
    Dim j As Integer
    Dim Temp As Outlook.MailItem
    Set SortMailboxOnDate = New Collection

    For Each mail In mailbox.Items
        SortMailboxOnDate.Add mail
    Next
    
    'sorting collection from newest to oldest
    For i = 1 To SortMailboxOnDate.Count
        Dim bericht1 As Outlook.MailItem
        Set bericht1 = SortMailboxOnDate.Item(i)
        
        For j = i + 1 To SortMailboxOnDate.Count
            Dim bericht2 As Outlook.MailItem
            Set bericht2 = SortMailboxOnDate.Item(j)
            
            If bericht1.ReceivedTime < bericht2.ReceivedTime Then
                Set Temp = bericht2
                SortMailboxOnDate.Item(j) = bericht1
                SortMailboxOnDate.Item(i) = Temp
            End If
        Next j
    Next i
End Function

Я попытался установить bericht1 и bericht2 в конце цикла, но все равно та же ошибка.

Отбросьте mail, используйте индексированный цикл для .Add.

niton 04.04.2023 16:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Перебирать все элементы в папке не очень хорошая идея:

For Each mail In mailbox.Items

Если вам нужно отсортировать коллекцию элементов в папке, вы можете использовать метод Сортировка класса Items, который сортирует коллекцию элементов по указанному свойству. Итак, весь ваш код равен следующей строке кода:

myItems.Sort "ReceivedTime" 

Обратите внимание, что в этом случае элементы не сортируются в представлении Outlook, а только коллекция.

Также не храните ссылки на объекты Outlook в каких-либо коллекциях, это может привести к проблемам, как показано на скриншоте. Вместо этого вы можете использовать значения свойств EntryID и, при необходимости, использовать метод NameSpace.GetItemFromID, который возвращает элемент Microsoft Outlook, идентифицированный указанным идентификатором записи (если он действителен).

For each циклы сохраняют все ссылки на элементы коллекции до выхода из цикла. Изменить петлю

For Each mail In mailbox.Items
   SortMailboxOnDate.Add mail
Next

к

set items = mailbox.Items
for i = 1 to items.Count
  set mail = items(i)
  SortMailboxOnDate.Add mail 
  set mail  = Nothing
next  

.

Другие вопросы по теме