2015-09-07 327 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

太棒了。谢谢@DanL。感谢你的帮助。 – bigbryan

1

Items集合的索引从1开始,并且Items集合对象中的项不保证为任何特定的顺序。
https://msdn.microsoft.com/en-us/library/office/ff863652.aspx

编辑: 又见紧凑的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

可能的解决方案是按照DanL提到的方式向后循环集合。 – 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 
相关问题