Outlook VBA:如何从草稿文件夹发送电子邮件?

时间:2015-09-07 06:55:30

标签: vba email outlook

我在Outlook的草稿文件夹中有一百封邮件。我想把它们全部发送出去。

我在下面有一个代码,它从一个邮件文件夹发送邮件,除了一封邮件(这是最后一封邮件)。程序读取的最后一封邮件会收到错误消息:

"运行时错误' 440': 数组索引超出范围。"

你觉得伙计们怎么样?非常感谢。

For i = 1 To myFolder.Items.Count

    myFolder.Items(i).Send

Next

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果使用递增计数器修改循环内的文件夹,则会遇到问题。

一种可能的解决方案是将集合向后循环,即:

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

正如SkyMaster所提到的,该数组是1索引的。

答案 2 :(得分: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