Excel 如何在不使用虚拟机时保持其活动状态,以发送所有打开的邮件?

Excel 如何在不使用虚拟机时保持其活动状态,以发送所有打开的邮件?,excel,vba,email,outlook,Excel,Vba,Email,Outlook,我已经创建了一个办公室/办公桌预订工具。Excel文件位于虚拟机上。代码循环处理新请求,分配办公桌,然后显示确认/拒绝电子邮件 由于安全权限,我无法使用.send发送电子邮件 我发现在创建每封电子邮件时使用.SendKeys并不总是有效 相反,下面的代码通过打开的电子邮件循环,一次发送所有电子邮件 当我在虚拟机上处于活动状态时,单击Excel或任何其他程序,所有电子邮件都将发送。 如果我在虚拟机上未处于活动状态,则电子邮件将保持打开状态,不会发送。 代码继续运行,但电子邮件不会发送 对以下代码或

我已经创建了一个办公室/办公桌预订工具。Excel文件位于虚拟机上。代码循环处理新请求,分配办公桌,然后显示确认/拒绝电子邮件

由于安全权限,我无法使用
.send

发送电子邮件 我发现在创建每封电子邮件时使用
.SendKeys
并不总是有效

相反,下面的代码通过打开的电子邮件循环,一次发送所有电子邮件 当我在虚拟机上处于活动状态时,单击Excel或任何其他程序,所有电子邮件都将发送。
如果我在虚拟机上未处于活动状态,则电子邮件将保持打开状态,不会发送。
代码继续运行,但电子邮件不会发送

对以下代码或任何其他解决方案的更改有何建议

Sub SendOpenEmails()

Set OutApp = CreateObject("Outlook.Application")

CountMail = OutApp.Inspectors.Count

For i = 1 To CountMail
    Set MailToSend = OutApp.Inspectors.Item(1).CurrentItem
    MailToSend.Display

    Application.SendKeys "%s"
    
    On Error Resume Next
Next

Set OutApp = Nothing
           
End Sub

如果在错误恢复下一步时没有
我得到一个无法显示的项目错误。

您需要删除错误恢复下一步时的
并检查是否有任何错误。这一行是邪恶的(尤其是在循环中使用时)。它隐藏了所有错误消息,但错误仍然会发生,您只是看不到它们的消息。如果看不到错误,则无法修复它们。因此,请删除该行以找出问题所在。还要注意,
.SendKeys
非常不可靠,而且总是最糟糕的解决方案(如果有多个选项可解决问题)。例如,如果你没有透支或者屏幕保护程序打开,它就不起作用。我建议大家研究一下如何正确使用Outlook发送电子邮件(不使用sendkeys),Google上有很多指南。谢谢。是,获取无法显示的项目时出错。虚拟机始终保持登录状态,并且设置为屏幕保护程序从不启动。我猜它一定是进入了非活动状态或其他什么状态。如果我在outlook中编写VBA,然后将其设置为windows任务计划,这是否可行?实际上,发送前不需要显示项目。这就是为什么我建议做一些关于如何正确做的研究(你会受益匪浅,网上有很多例子)。提示:研究
MailToSend.Send
。不幸的是,我无法从Excel发送,因为我的工作场所安全性现在允许Excel宏在没有安全警告弹出窗口的情况下通过outlook发送电子邮件。谢谢你的帮助。我已经更改了excel中的代码,将所有电子邮件保存到草稿中,现在使用outlook宏发送通过windows任务计划程序定期运行的所有草稿。