Когда я перебираю папку с более чем 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 в конце цикла, но все равно та же ошибка.
Перебирать все элементы в папке не очень хорошая идея:
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
.
Отбросьте
mail
, используйте индексированный цикл для.Add
.