2015-09-07 6 views
0

У меня есть сто писем в папке черновиков в Outlook. И я хочу отправить их всех.Outlook VBA: Как отправить электронную почту из папки «Черновики»?

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

«Ошибка времени выполнения» 440 ': Индекс массива за пределами границ. "

Как вы думаете, ребята? Большое спасибо.

For i = 1 To myFolder.Items.Count 

    myFolder.Items(i).Send 

Next 

ответ

1

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

Возможное решение было бы в цикле коллекция в обратном направлении, т.е .:

For i = myFolder.Items.Count To 1 Step -1 
    myFolder.Items(i).Send 
Next 

И как уже упоминалось SkyMaster, массив 1-индексироваться.

+0

Awesome. Спасибо @DanL. Ценю вашу помощь. – bigbryan

1

Индекс для коллекции предметов начинается с 1, и предметы в объекте коллекции предметов не гарантируются в каком-либо конкретном порядке.
https://msdn.microsoft.com/en-us/library/office/ff863652.aspx

EDIT: Смотрите также компактный файл данных Outlook: https://support.office.com/en-nz/article/Reduce-the-size-of-Outlook-Data-Files-pst-and-ost-e4c6a4f1-d39c-47dc-a4fa-abe96dc8c7ef

+0

О порядке. Спасибо, но он все равно получает ту же ошибку. – bigbryan

+0

Возможным решением было бы зацикливание коллекции назад, как упоминалось в DanLink. – SkyMaster

+0

Ницца. Спасибо @SkyMaster. – bigbryan

0

Поскольку каждый черновик отправляется, в папке есть еще одно электронное письмо. Следующее письмо перемещается вверх, чтобы быть первым в коллекции. Итак, как вы петля, вы можете просто продолжать отправлять сообщение folder.Items(1).

Я установки этот код для некоторых пользователей на работе (у них есть несколько почтовых ящиков, связанных с их счетов):

Sub SendAllYourMailboxDrafts() 
     SendAllDrafts "your-mailbox-name" 
    End Sub 

    Sub SendAllDrafts(mailbox As String) 

     Dim folder As MAPIFolder 
     Dim msg As Outlook.MailItem 
     Dim count As Integer 

     Set folder = Outlook.GetNamespace("MAPI").Folders(mailbox) 
     Set folder = folder.Folders("Drafts") 

     If MsgBox("Are you sure you want to send the " & folder.Items.count & " items in your " & mailbox & " Drafts folder?", vbQuestion + vbYesNo) <> vbYes Then Exit Sub 

     count = 0 
     Do While folder.Items.count > 0 
      Set msg = folder.Items(1) 
      msg.Send 
      count = count + 1 
     Loop 

     MsgBox count & " message(s) sent", vbInformation + vbOKOnly 
    End Sub 
Смежные вопросы