【问题标题】:Working with Outlook using MS Access 2003 - VBA使用 MS Access 2003 处理 Outlook - VBA
【发布时间】:2013-08-23 10:05:38
【问题描述】:

我制作了以下程序,该程序从 MS Access 的表格中获取电子邮件地址列表,并向每个人发送一封测试电子邮件。代码如下:

'Get data back from field birth date
    Set fld = rcdSet.Fields("Email Address")

    'Subject
    olMailItem.Subject = "Mailing List Test"

    'Loop through the records
    For i = 0 To intNumRecords
        'Recipient/s
        olMailItem.To = fld.Value

        'Body of email
        olMailItem.Body = strBodyText

        'Automatically send the email
        olMailItem.Send

       'Reset email item otherwise it won't work
        Set olMailItem = olFolder.Items.Add("IPM.Note")

        'Move to the next record
        rcdSet.MoveNext
    Next

是的,我打开了一个记录集,但上面没有包含该代码。所以这是我的问题:

  1. 我上面的方法是否正确?我必须在循环中重置olMailItem,否则它将返回Type Error。有没有更好的方法来发送多封电子邮件?

  2. 我输入了一封无效的电子邮件以查看会发生什么 - 它会导致另一个 Type Error。有没有办法检测到退回(Outlook 发送给您的电子邮件,通知您这是一个错误地址)电子邮件并向Immediate Window 发送消息(此时出于开发目的)

谢谢

注意 - 已添加邮件声明

'Create Outlook object
Dim olApp As Outlook.Application

'Namespace
Dim olNS As Outlook.NameSpace
Dim olFolder As Outlook.MAPIFolder

'Create a reference to the email item you will use to send the email
Dim olMailItem As Outlook.MailItem

Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")

Set olFolder = olNS.GetDefaultFolder(olFolderInbox)
Set olMailItem = olFolder.Items.Add("IPM.Note")

如果我没有在 for 循环中重新设置 olMailItem,程序的 .To 部分会发生错误 - 上述 Type Error

【问题讨论】:

  • 您的第一个问题可能会在code review 得到答案。第二个问题的答案here
  • 这里有一些奇怪的东西,首先你如何声明那个mailitem?为什么将您的 mailItem 对象设置为新便笺?如果你不这样做会发生什么
  • @Machinegon 已添加到我的问题中
  • @mehow 已发帖对整个代码进行代码审查

标签: ms-access outlook vba ms-access-2003


【解决方案1】:

我不明白您声明了一个 IPM.Note 类型的对象并尝试发送它,而是声明一个 mailitem。

这应该可以工作

'Loop through the records
For i = 0 To intNumRecords
     Set olMailItem = olFolder.Items.Add
    'Subject
    olMailItem.Subject = "Mailing List Test"

    'Recipient/s
    olMailItem.To = fld.Value

    'Body of email
    olMailItem.Body = strBodyText

    'Automatically send the email
    olMailItem.Send

    'Release new mailitem
    Set olMailItem = Nothing

    'Move to the next record
    rcdSet.MoveNext

Next

结帐http://msdn.microsoft.com/en-us/library/office/bb220348(v=office.12).aspx 了解有关 add 方法的更多信息。

编辑:查看完整循环

【讨论】:

  • 我这样做是因为我遵循 Hennig、Cooper 等撰写的 Access 2007 VBA Programmers Reference 中的示例。将调查并尝试您的代码
  • 我只是没有发布那部分代码——同样,当添加您的代码而不是我的代码并删除循环中的重置部分时,我仍然遇到同样的错误。不过,那个链接读起来不错……
  • @Katana24 见我上面的编辑,我删除了重置部分,只是将对象设置在循环内
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多