电子邮件显示但不发送

时间:2020-01-16 23:15:22

标签: excel vba outlook

我正在测试使用VBA从Excel发送电子邮件。

我没有收到发送到收件箱的电子邮件。

代码如下:

Sub email_from_excel()

Dim emailApplication As Object
Dim emailItem As Object

Set emailApplication = CreateObject("Outlook.Application")
Set emailItem = emailApplication.CreateItem(0)

'Now build the email
emailItem.to = "emailaddress@test.com"
emailItem.Subject = "This is a test y'all."
emailItem.Body = "This is a test message ya'll."

'Send the email
emailItem.Send

End Sub

在代码的第6行中,我将电子邮件地址放在引号之间。

我在VBA中的“工具”“引用”下启用了Microsoft Outlook。没有错误出现,但是没有发送电子邮件。

我注释了emailItem.Send,并在emailItem.Display中添加了代码,并显示了一封电子邮件。

2 个答案:

答案 0 :(得分:0)

请记住,消息提交是异步过程。您需要等待消息发出后才能释放(从而关闭)Outlook。

作为测试,请在代码运行之前启动Outlook-这样,即使您的代码执行完毕,Outlook也将保持打开状态。

答案 1 :(得分:0)

我遇到了同样的问题,似乎正在发生的是 Excel 在发送消息之前从内存中删除了 Outlook,

这里的解决方案来个技巧之前,您可以将变量声明为 application.outlook 和 application.mailitem,而不是使用 create object 它使所有方法和属性在您键入时显示为提示

好吧,我通过声明一个全局变量来存储outlook.application来解决它 全局 appOutlook 作为 application.outlook

然后在打开事件内的“此工作簿”中我设置了变量 设置 appOutlook = new application.outlook

现在在发送电子邮件的宏中声明一个设置变量来存储电子邮件

将电子邮件变暗为 Outlook.mailitem 设置电子邮件 = appOutlook.CreateItem(olMailitem)

你也可以通过使用 with 语句来改进你的代码 使用电子邮件 。到 。身体 以 而不是每次你可以使用时都输入汽车名称,然后你只需要输入一个点并访问方法和属性

现在最后一部分是将电子邮件设置为空 设置电子邮件 = 无 我不知道为什么这是必要的,但我的代码通常不会在没有它的情况下发送电子邮件 好吧,这应该使它起作用,您可以使用局部变量,但是如果您需要在短时间内发送不止一封电子邮件,那么您去的任何一个,它们都会处于某种“无效”状态,当您去的时候运行一个实际有效的代码,通过使用全局变量来存储应用程序,它会启动,只有在您编写代码时才会停止,应用程序崩溃或关闭,对于大文本很抱歉,我希望能提供帮助