运行时错误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 
+0

那说你(或*将来你*)可能会喜欢知道我的开源项目[Rubberduck(http://rubberduckvba.com)包括优秀*智能压头的端口*添加 - 在那个在64位主机工作。 –

+0

指定了“Option Explicit”吗?看起来你的代码甚至不会使用该选项进行编译,看到许多使用的变量,但没有在任何地方声明。是否有任何理由延迟绑定Outlook类型库,而不是在项目中添加引用,并且具有编译时类型安全性,智能感知和自动完成?拥有智能感知功能可能会帮助您了解可用的成员,以及如何调用它们。 FWIW你正在创建两个'olMail'对象 - 一个在循环外面,被忽略,另一个在循环内部。 –

+0

我只需要循环内的olmail对象,我可以在循环外删除olmail对象。但我在执行“Set Doc = olMail.GetInspector.WordEditor”时遇到问题,我是否需要为此定义任何对象或变量。 –

好的 - 所以目前的代码似乎存在很多问题;你有代码和非维度变量的重复。我试图压缩代码,添加直接引用,希望能够使其更具可读性(应该也许)可以正常工作,但未经测试......我没有列出相关工作表中的范围,也没有要测试的数据它

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中引发错误。我提到了错误类型和代码,我请求您查看该代码并让我知道我能做些什么来解决它们。谢谢 –