【发布时间】:2017-11-19 12:43:34
【问题描述】:
我在我的计算机上使用 Office 2016,并且我有一个 VBA 代码,可以将电子邮件发送到文件中的邮件列表。每次我想用我的命令按钮自动发送电子邮件时,我都会收到错误消息:“未定义用户定义的类型”。 我在网上做了一些研究,发现有一个解决方案: VB Editor ----> Tools ----> Referenced ----> Microsoft Outlook 16.0 Object Library
但是 下次我打开文件时,同样的错误会一次又一次地运行。有人能找到我永久的解决方案吗?我不知道该怎么做,然后我已经做了。
Public Sub sendMail()
Call ini_set
If mail_msg.Cells(200, 200) = 1 Then
lr = main_dist.Cells(main_dist.Rows.Count, "A").End(xlUp).row
On Error Resume Next
For i = 2 To lr
Application.DisplayAlerts = False
Dim applOL As Outlook.Application
Dim miOL As Outlook.MailItem
Dim recptOL As Outlook.Recipient
mail_msg.Visible = True
mailSub = mail_msg.Range("B1")
mailBody = mail_msg.Range("B2")
mail_msg.Visible = False
Set applOL = New Outlook.Application
Set miOL = applOL.CreateItem(olMailItem)
Set recptOL = miOL.Recipients.Add(main_dist.Cells(i, 5))
recptOL.Type = olTo
tempPath = ActiveWorkbook.Path & "\" & main_dist.Cells(i, 4) & ".xlsm"
With miOL
.Subject = mailSub
.Body = mailBody
.Attachments.Add tempPath
.send
End With
Set applOL = Nothing
Set miOL = Nothing
Set recptOL = Nothing
Application.DisplayAlerts = True
Next i
End Sub
这是基于VB编辑器的问题:
Dim applOL As Outlook.Application
【问题讨论】:
-
通常当您在文档中添加引用时,它应该永远保留在那里。您确定要在添加参考后保存文档吗?
-
您也可以使用后期绑定,这样您就不必引用库。所以
Dim applOL As Outlook.Application会变成Dim applOL As object等等。 -
@CallumDA -- 所以,如果有人提到了一个可能在其他地方提到过的潜在修复,这会立即使它成为一个重复的问题,即使它在原始问题中没有被问到? sigh 我在这个问题的“可能重复”中没有看到 任何 术语。 ...我并不是说这是一个很好的问题,但它不是重复,至少不是你的例子。
-
@ashleedawg,这样说吧。如果 OP 遵循链接,他们将了解如何正确进行早期绑定和后期绑定。其中之一必须是 OP 可以接受的,因为根本没有其他方法。 重复问题并不意味着问题需要看起来相同,但这确实意味着该问题的答案已经存在于网站的其他地方。根据这个定义,我确实认为这是重复的。