使用Excel VBA调用Outlook MailItem.SaveAs保存草稿报错求助
Outlook VBA 邮件SaveAs报错解决方案
问题描述
我需要将邮件草稿保存到专用文件夹中。当注释掉SaveAs代码、仅启用.display选项时,程序可正常运行;执行SaveAs代码行时出现报错(运行时错误'429':ActiveX部件不能创建对象)。
我的VBA代码如下:
Sub t1() Dim appOutlook As Object Dim mItem As Object Set appOutlook = CreateObject("Outlook.Application") Set mItem = appOutlook.CreateItem(0) With mItem .To = "@" .Subject = "test1" .HTMLBody = "<html><p>TestTest</p></html>" .SaveAs "myCorrectPathHere\test1.msg", OlSaveAsType.olMsg '.display End With End Sub
解决方案
- 问题根源:代码采用了后期绑定(通过
CreateObject创建Outlook实例,变量声明为Object),这种模式下VBA无法识别Outlook的枚举常量(如OlSaveAsType.olMsg),会尝试将其作为ActiveX对象创建,从而触发报错。 - 修复方式1(推荐,保持后期绑定):将枚举常量替换为对应的数值。
olMsg对应的枚举值是0,修改后的代码:
Sub t1() Dim appOutlook As Object Dim mItem As Object Set appOutlook = CreateObject("Outlook.Application") Set mItem = appOutlook.CreateItem(0) With mItem .To = "@" .Subject = "test1" .HTMLBody = "<html><p>TestTest</p></html>" .SaveAs "myCorrectPathHere\test1.msg", 0 ' 用数值0替代OlSaveAsType.olMsg '.display End With End Sub
- 修复方式2(早期绑定):如果偏好使用枚举常量名,可切换为早期绑定:
- 打开VBA编辑器,点击「工具」→「引用」,勾选「Microsoft Outlook xx.x Object Library」(xx.x为你的Outlook版本号)
- 修改变量声明为具体的Outlook类型,代码如下:
Sub t1() Dim appOutlook As Outlook.Application Dim mItem As Outlook.MailItem Set appOutlook = New Outlook.Application Set mItem = appOutlook.CreateItem(0) With mItem .To = "@" .Subject = "test1" .HTMLBody = "<html><p>TestTest</p></html>" .SaveAs "myCorrectPathHere\test1.msg", OlSaveAsType.olMsg '.display End With End Sub
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

