运行时错误424:对象未定义“ - 在使用Outlook 2013发送电子邮件时
问题描述:
我使用下面的代码通过outlook发送多个电子邮件,但当我使用Excel 2007和Outlook 2007时,此代码工作正常但是当我尝试运行相同代码在Excel 2013和Outlook 2013它抛出一个错误“运行时错误424:对象没有定义”:运行时错误424:对象未定义“ - 在使用Outlook 2013发送电子邮件时
Set Doc = olMail.GetInspector.WordEditor
有人可以请检查下面的代码,让我知道什么是我在下面的代码如果我想在2013版中使用相同的宏,需要更改吗?
Sub Msmail()
Dim otlApp As Object
Dim olMail As Object
Set otlApp = CreateObject("Outlook.Application")
Set olMail = otlApp.CreateItem(olMailItem)
Set mainWB = ActiveWorkbook
Worksheets("Mail").Select
ActiveSheet.Calculate
Total_Site = Range("Total_Site")
For Site_Count = 1 To Total_Site
Application.StatusBar = False
ActiveSheet.Calculate
Range("Site_Count") = Site_Count
ActiveSheet.Calculate
If Range("Send_Email") = "Y" Then
Set mainWB = ActiveWorkbook
Set olMail = otlApp.CreateItem(olMailItem)
Set Doc = olMail.GetInspector.WordEditor '<~ ERROR 424 HERE
SendID = mainWB.Sheets("Mail").Range("To_List").Value
CCID = mainWB.Sheets("Mail").Range("Cc_List").Value
Subject = mainWB.Sheets("Mail").Range("Subject_Line").Value
Body = mainWB.Sheets("Summary").Range("Mail_Body").Value
AttachFile = mainWB.Sheets("Mail").Range("StrPath").Value
StrPath = ActiveSheet.Range("StrPath").Value
With olMail
.To = SendID
If CCID <> 0 Then
.CC = CCID
End If
.Subject = Subject
mainWB.Sheets("Summary").Range("Mail_Body").Copy
Set WrdRng = Doc.Range
.Display
WrdRng.Paste
'StrPath = Range("StrPath").Value
StrFile = Range("StrFile").Value & "*.*"
StrFile = Range("StrFile").Value
.Attachments.Add StrPath & "\" & StrFile
.Send
End With
End If
Next Site_Count
End Sub
答
好的 - 所以目前的代码似乎存在很多问题;你有代码和非维度变量的重复。我试图压缩代码,添加直接引用,希望能够使其更具可读性(应该也许)可以正常工作,但未经测试......我没有列出相关工作表中的范围,也没有要测试的数据它
Sub msMail()
Dim olApp As Object: Set olApp = CreateObject("Outlook.Application")
Dim olMail As Object
Dim Total_Site As Range, Doc As Variant, WrdRng As Range
Dim StrPath As String, StrFile As String, Site_Count As Long
Dim wbMain As Workbook: Set wbMain = ThisWorkbook
Dim wsMail As Worksheet: Set wsMail = wbMain.Worksheets("Mail")
Dim wsSumm As Worksheet: Set wsSumm = wbMain.Worksheets("Summary")
With wsMail
.Calculate ' Not sure why this is included...
Set Total_Site = Range("Total_Site")
For Site_Count = 1 To Total_Site.Count
''Application.StatusBar = False
Range("Site_Count") = Site_Count
If Range("Send_Email") = "Y" Then
Set olMail = olApp.CreateItem(olMailItem)
Set Doc = olMail.GetInspector.WordEditor
If Not Doc Is Nothing Then
With olMail
.To = wsMail.Range("To_List")
.CC = IIf(wsMail.Range("Cc_List") <> 0, wsMail.Range("Cc_List"), "")
.Subject = wsMail.Range("Subject_Line")
wsSumm.Range("Mail_Body").Copy
Set WrdRng = Doc.Range
.Display
WrdRng.Paste
StrPath = wsMail.Range("StrPath")
StrFile = wsMail.Range("StrFile")
.Attachments.Add StrPath & "\" & StrFile
' .Send
End With
End If
End If
Next Site_Count
End With
End Sub
+0
Flephal中的所有变量,感谢您的帮助,但是我在代码中也遇到了同样的错误。如果我使用Office 2007(Excel和Outlook),则以前的代码执行得很好,但是相同的代码在Office 2013中引发错误。我提到了错误类型和代码,我请求您查看该代码并让我知道我能做些什么来解决它们。谢谢 –
那说你(或*将来你*)可能会喜欢知道我的开源项目[Rubberduck(http://rubberduckvba.com)包括优秀*智能压头的端口*添加 - 在那个在64位主机工作。 –
指定了“Option Explicit”吗?看起来你的代码甚至不会使用该选项进行编译,看到许多使用的变量,但没有在任何地方声明。是否有任何理由延迟绑定Outlook类型库,而不是在项目中添加引用,并且具有编译时类型安全性,智能感知和自动完成?拥有智能感知功能可能会帮助您了解可用的成员,以及如何调用它们。 FWIW你正在创建两个'olMail'对象 - 一个在循环外面,被忽略,另一个在循环内部。 –
我只需要循环内的olmail对象,我可以在循环外删除olmail对象。但我在执行“Set Doc = olMail.GetInspector.WordEditor”时遇到问题,我是否需要为此定义任何对象或变量。 –