2017-08-16 38 views
0

我使用下面的代碼通過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」時遇到問題,我是否需要爲此定義任何對象或變量。 –

回答

0

好的 - 所以目前的代碼似乎存在很多問題;你有代碼和非維度變量的重複。我試圖壓縮代碼,添加直接引用,希望能夠使其更具可讀性(應該也許)可以正常工作,但未經測試......我沒有列出相關工作表中的範圍,也沒有要測試的數據它

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中引發錯誤。我提到了錯誤類型和代碼,我請求您查看該代碼並讓我知道我能做些什麼來解決它們。謝謝 –

相關問題