我正在测试使用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
中添加了代码,并显示了一封电子邮件。
答案 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 语句来改进你的代码 使用电子邮件 。到 。身体 以 而不是每次你可以使用时都输入汽车名称,然后你只需要输入一个点并访问方法和属性
现在最后一部分是将电子邮件设置为空 设置电子邮件 = 无 我不知道为什么这是必要的,但我的代码通常不会在没有它的情况下发送电子邮件 好吧,这应该使它起作用,您可以使用局部变量,但是如果您需要在短时间内发送不止一封电子邮件,那么您去的任何一个,它们都会处于某种“无效”状态,当您去的时候运行一个实际有效的代码,通过使用全局变量来存储应用程序,它会启动,只有在您编写代码时才会停止,应用程序崩溃或关闭,对于大文本很抱歉,我希望能提供帮助