繁体   English   中英

使用Excel VBA发送Outlook电子邮件会生成错误:未定义用户定义的类型

[英]Sending Outlook Email Using Excel VBA generates error: user-defined type not defined

我正在尝试通过Outlook从Excel 2010发送电子邮件。

Outlook已打开,我已选择对Outlook 14.0的引用

我创建了一个名为SendEmail的宏:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String)
    Dim olApp As Outlook.Application
    Set olApp = CreateObject("outlook.Application")
    Dim olMail As Outlook.MailItem
    Set olMail = olApp.CreateItem(olMailItem)
    olMail.To = what_address
    olMail.Subject = subject_line
    olMail.body = mail_body
    olMail.Send
End Sub

我创建了另一个名为SendMassEmail()的宏:

Sub SendMassEmail()

    row_number = 1
    Do
    DoEvents
        row_number = row_number + 1
         'MegBox (Sheet.Range("J3"))
          Call SendEmail(Sheet1.Range("A" & row_number), "THis is a test  email", Sheet1.Range("J2"))
    Loop Until row_number = 4
   'Range("A" & Rows.Count).End(xlUp).Row
End Sub

当我运行代码时,它会出现以下错误:

用户定义类型未定义

您已经检查了Microsoft Outlook 14.0对象库参考,
您可以尝试像这样延迟竞标:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String)
    Dim olApp As Object
    Dim olMail As Object
    On Error Resume Next
    Set olApp = GetObject(, "Outlook.Application")
    If Err.Number>0 Then Set olApp = CreateObject("Outlook.Application")
    On Error Goto 0
    Set olMail = olApp.CreateItem(0)
    olMail.To = what_address
    olMail.Subject = subject_line
    olMail.body = mail_body
    olMail.Send
End Sub

我更改了olApp创建方式,因此,如果您已经在运行另一个Outlook实例,则不要创建它! ;)

您可以使用以下代码,但需要添加对Microsoft Outlook 14.0对象库的引用(工具->引用...):

Sub SendEmail(what_address As String, subject_line As String, mail_body As String)
    Dim olApp As Outlook.Application
    Set olApp = New Outlook.Application
    Dim olMail As Outlook.MailItem
    Set olMail = olApp.CreateItem(olMailItem)
    olMail.To = what_address
    olMail.Subject = subject_line
    olMail.body = mail_body
    olMail.Send
End Sub

还有另一种方法可以不导入库:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String)
    Dim olApp As Object
    Set olApp = CreateObject("Outlook.Application")
    Dim olMail As Object
    Set olMail = olApp.CreateItem(olMailItem)
    olMail.To = what_address
    olMail.Subject = subject_line
    olMail.body = mail_body
    olMail.Send
End Sub

我建议第一个解决方案。 因为这样您才能导入库,因此它会“更好”地工作,并且每次使用Outlook对象时,您都可以看到对象的属性列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM