2016-09-22 4 views
0

Я создаю письма из Excel через VBA Outlook.Application Reference. Каждое электронное письмо заполняется данными из моего листа excel и затем помещается в поля To/CC/BCC/Subject/Body.Office 2013 - VBA Email не отображает переменные To/CC/BCC

Теперь при запуске этого кода в Office 2010 он работает без сбоев, но в Office 2013 переменные, содержащие To/CC/BCC/etc. данные не отображаются в фактической электронной почте при отображении.

Это изменение ссылки в Office 2013?

Sub MailSheet() 

    Dim OutApp As Object 
    Dim outMail As Object 
    Dim rng As Range 

    ' set required variables 
    Set Sourcewb = ActiveWorkbook 
    Set Property = ActiveWorkbook.Sheets("Settings").Range("B4") 
    Set Holidex = ActiveWorkbook.Sheets("Settings").Range("B5") 
    Set SendTo = ActiveWorkbook.Sheets("Settings").Range("B29") 
    Set SendCC = ActiveWorkbook.Sheets("Settings").Range("B30") 
    Set rng = Sheets("Mail").Range("A1:F80") 

    ' set email variables 
    Set OutApp = CreateObject("Outlook.Application") 
    Set outMail = OutApp.CreateItem(0) 

' some code 

     ' get ready to mail 
     With outMail 
      .To = SendTo 
      .ReplyRecipients.Add "" 
      .CC = SendCC 
      .BCC = "" 
      .Subject = Holidex & " - Daily Email" 
      .HTMLBody = RangetoHTML(rng) 

      ' display email before sending 
      .Display '.Send or use .Display 
     End With 

' some code 

    ' Clean up 
    Set outMail = Nothing 
    Set OutApp = Nothing 

end Sub 
+0

Во-первых, не добавить пустую строку получателям ответ. Во-вторых, используйте ли вы другой результат, если используете Recipients.Add вместо настройки свойств To/CC/BCC? –

ответ

0

Не уверен, что я могу помочь вам непосредственно, но у меня есть некоторый код, который я нашел в Интернете, которые я знаю, на самом деле работает с Outlook, 2016, разделит его здесь, в случае она помогает:

Sub OutlookMail_1() 
'Automate Sending Emails from Excel, using Outlook. 
'Send text and also contents from the host workbook's worksheet range 
' as Mail Body, and add an attachment with the mail. 
'Automating using Early Binding: Add a reference to the Outlook Object Library 
' in Excel (your host application) by clicking Tools-References in VBE, 
' which will enable using Outlook's predefined constants. 
'Once this reference is added, a new instance of 
' Outlook application can be created by using the New keyword. 

'variables declared as a specific object type 
' ie. specific to the application which is being automated: 
Dim applOL As Outlook.Application 
Dim miOL As Outlook.MailItem 
Dim recptOL As Outlook.Recipient 
Dim ws As Worksheet 
Dim name As String 
Dim email As String 
Dim nominees As Range 
Dim number As String 

'set worksheet: 
Set ws = ThisWorkbook.Sheets("Sheet1") 

'Create a new instance of the Outlook application. 
' Set the Application object as follows: 
Set applOL = New Outlook.Application 

'create mail item: 
Set miOL = applOL.CreateItem(olMailItem) 

'Add mail recipients, either the email id or their name in your address book. 
' Invalid ids will result in code error. 
Set recptOL = miOL.Recipients.Add("Main recipient email") 
recptOL.Type = olTo 

Set recptOL = miOL.Recipients.Add("BCC Email") 
recptOL.Type = olbcc 

Set recptOL = miOL.Recipients.Add("BCC Email") 
recptOL.Type = olbcc 

Set recptOL = miOL.Recipients.Add("BCC Email") 
recptOL.Type = olbcc 

'with the mail item: 
With miOL 

'subject of the mail: 
.Subject = "Subject"  

'Chr(10) represents line feed/new line, & Chr(13) represents carriage return. 

' Send text and also contents from 
' the host workbook's worksheet range as Mail Body. 
.Body = "BODY OF EMAIL" 

'set importance level for the mail: 
.Importance = olImportanceHigh 
'add an attachment to the mail: 

'send the mail: 

.Display 

End With 

'clear the object variables: 
Set applOL = Nothing 
Set miOL = Nothing 
Set recptOL = Nothing 

End Sub 

Некоторые из переменных, которые я установил, являются избыточными, потому что я немного изменил код, чтобы сохранить конфиденциальность, но дайте мне знать, если это поможет!

Если вы хотите использовать CC вместо ВСС, а затем просто изменить код на:

recptOL.Type = olcc 
+0

Я еще не работал с Office 2016, но я буду помнить об этом, спасибо. – Armitage2k

0

Вместо того, чтобы создать объект Outlook, попробуйте ссылки на библиотеку Outlook (Tools -> References, а затем выберите Microsoft Outlook xx.x Object Library) , После этого вы можете ссылаться на него, как показано ниже:

Sub SendAnEmail() 

    Dim oOlApp As Outlook.Application: Set oOlApp = Outlook.Application 
    Dim oMailItem As Outlook.MailItem: Set oMailItem = oOlApp.CreateItem(olMailItem) 

    oMailItem.To = "[email protected]" 
    oMailItem.CC = "" 
    oMailItem.BCC = "[email protected]" 
    oMailItem.Subject = Sheet1.Cells(15, "D") 
    oMailItem.HTMLBody = "Again .. testing" 
    oMailItem.Display 

    Set oMailItem = Nothing 
    Set oOlApp = Nothing 

End Sub 

Вы можете добавить этот код в подменю или вызвать эту Sub с вашего Sub с параметрами

+0

Я знаю, откуда вы, но мне, возможно, придется развернуть это на машинах, где пользователь не может активировать ссылки. На данный момент я проверяю, открыт ли внешний вид перед запуском этого кода. В любом случае нужно активировать ссылку вручную? – Armitage2k

+0

Я только что попробовал код, похожий на ваш, и он работал для меня в Office Professional Plus 2013. У меня есть код в модуле класса, так что я проверяю, открыт ли Outlook при инициализации класса. Какая версия офиса 2013 у вас есть? – Zac

Смежные вопросы