Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Excel VBA从模板在Outlook 2010中创建电子邮件_Vba_Templates_Excel_Outlook_Oft - Fatal编程技术网

使用Excel VBA从模板在Outlook 2010中创建电子邮件

使用Excel VBA从模板在Outlook 2010中创建电子邮件,vba,templates,excel,outlook,oft,Vba,Templates,Excel,Outlook,Oft,我的代码在XP上的Excel/Outlook 2003中运行良好,我现在运行的是Windows 7 Excel/Outlook 2010,收到一个错误: 运行时错误“287”:应用程序定义的错误或对象定义的错误 我的代码基于以下答案: 我正在创建outlook对象和邮件项,如下所示: Dim MyOlApp Dim MyOlItem Set MyOlApp = CreateObject("Outlook.Application") Set MyOlItem = MyOlApp.CreateIt

我的代码在XP上的Excel/Outlook 2003中运行良好,我现在运行的是Windows 7 Excel/Outlook 2010,收到一个错误:

运行时错误“287”:应用程序定义的错误或对象定义的错误

我的代码基于以下答案:

我正在创建outlook对象和邮件项,如下所示:

Dim MyOlApp
Dim MyOlItem
Set MyOlApp = CreateObject("Outlook.Application")
Set MyOlItem = MyOlApp.CreateItemFromTemplate(Range("oftLocation").Value) 'user defined location
错误出现在我引用MyOlItem之后,代码正在替换.htmlBody中的引用

修改.Body没有什么区别,同样的错误也会显示出来

VBA中的“我的引用”设置为:

VBA Microsoft Excel 14.0对象库 OLE自动化 Microsoft Office 14.0对象库 Microsoft Forms 2.0对象库 Microsoft脚本运行时
我建议您可能需要一份Outlook打开并运行的副本。CreateObject的使用可能不够

要以编程方式执行此操作,请修改VBA宏,如下所示:

Shell "Outlook.exe" 'Opens Outlook

' Your existing code goes here

Shell "taskkill /IM Outlook.exe" 'Closes Outlook again when code is finished (optional)

这还不是一个答案,但我想收集评论中发生的事情,因为我觉得这是迄今为止我所看到的最好的方向

我已经在你的问题中测试了代码,使用Outlook 2010和Excel 2010对我来说效果很好

当Excel尝试与Outlook交互时,编程访问设置将发挥作用

我相信如果你的防病毒软件已经过时,他们会设置为警告状态。这类似于Windows检测防病毒软件状态的方式。因此,当您从Excel访问Outlook时,通常会收到一条提示,询问操作的权限。在我的情况下,在正常情况下,您将允许操作,代码将正常进行

然而,我看到人们用逻辑捕捉错误287,即用户对该提示点击“否”。你的情况似乎并非如此。您需要仔细查看Outlook中的信任中心设置,其中涉及编程访问。与防病毒软件进行交互,信任中心也将提供一些信息。如果您没有以管理员权限运行Outlook,则将禁用其中的设置。让我知道你想到了什么

到目前为止,我还没有明确说明,但我想提请大家注意您的AV。这是它试图阻止的事情之一。也许有一条规则阻止了这一点


无论哪种方式,您都应该能够在另一个环境中测试它,看看它是否可能是您的系统。我想我们都同意这不是专门的代码,因为我知道它在其他地方也能工作。

谢谢Rhy,我已经在测试时打开了Outlook。我同意,问题可能在于目标。但2003年,该代码运行良好。所以有点困惑。如果Outlook未运行,则Outlook已打开。在尝试生成错误时,观察到了此行为。应该不需要以编程方式在此之外打开Outlook。您是否尝试将正在创建的变量定义为Outlook.Application和Outlook.MailItem?另外,您是否尝试过为RangeOfLocation.Value的来源定义位置引用?正在尝试确定用户如何定义该位置。。。我知道一些愚蠢的小事情,但我认为在继续之前值得一试也许更多关于错误的信息可能在日志中。。。我同意Christmas007,定义他提到的变量,确保位置单元格的内容和格式正确,即正确引用目录和文件C:\Test\Test.oft,然后我将尝试让项目显示MyOlItem.display。如果这不起作用,错误信息是什么?他的代码是正确的,并且可以工作。刚刚用Outlook和Excel 2010进行了测试。我能重新创建的唯一错误是432,53(如果路径无效)和1004(如果范围引用错误)。这段代码有效。。。。无法重新创建错误。甚至在我能想到的任何地方用空格测试。不知道是否有特殊字符隐藏在rangeTrust Center被锁定的地方,因为您需要拥有管理员权限才能更改它。以管理员身份运行Outlook,您将看到更多选项。您还将在该屏幕上看到与AV的交互。灰色本身不是问题所在。在具有相同环境的另一个系统上尝试这一点,如果这是一个选项的话,可能是有价值的。代码不是问题。。。。我敢肯定。如果你想引起别人的注意,别忘了用@。谢谢马特,我想你是对的。我希望今天能够运行一些额外的测试。谢谢Matt,虽然我仍然有问题,但我认为您已经证明了代码是正确的,因此我的问题存在于VBA编辑器之外:-