Ваш код использует 'Раннее связывание' .. где для использования Dim Something As Outlook.Something
, Excel должен иметь ссылку на библиотеку Outlook.
У вас есть два варианта.
Вы можете исправить это либо
Добавление ссылки -
В окне VB Editor, чтобы убедиться, что выполнение кода полностью остановлено, перейдите в меню «Инструменты»> «Ссылки» и установите флажок «Библиотека объектов Microsoft Outlook x.x» (x.x будет зависеть от установленной версии).
Или используйте позднюю привязку - которая сохраняет объявления открытыми (как объекты), которые связываются по мере их использования:
Option Explicit
Private Sub Generate_offer()
Dim strFile As String
Dim OutApp As Object
Dim objOutlookMsg As Object
Dim olMailItem As Long
olMailItem = 0 ' (0 = Mail item, 1 = Appointment, 2 = Contact etc..)
Set OutApp = CreateObject("Outlook.Application")
Set objOutlookMsg = OutApp.CreateItem(olMailItem)
With objOutlookMsg
.SentOnBehalfOfName = ""
.To = ""
.Subject = "xxxxxxxx"
.Body = "Dear " & vbNewLine & vbNewLine & "xxxxxxxx" & vbNewLine & vbNewLine _
& "xxxxxxxx" & vbNewLine _
& "xxxxxxxx" & Cells(ActiveCell.Row, "C").Value & vbNewLine _
& "xxxxxxxx" & Cells(ActiveCell.Row, "J").Value & " - " & Cells(ActiveCell.Row, "K").Value & vbNewLine _
& "xxxxxxxx" & Cells(ActiveCell.Row, "M").Value & "xxxxxxxx" & vbNewLine _
& "Notes: " & vbNewLine & vbNewLine _
& "xxxxxxxx" & vbNewLine & vbNewLine _
& "xxxxxxxx" & vbNewLine & vbNewLine & "xxxxxxxx"
.display
End With
'objOutlookMsg.Send
Set OutApp = Nothing
End Sub
Примечание. Основная причина, по которой я бы использовал Late Binding, заключается в том, что макрос будет использоваться на нескольких компьютерах с разными версиями Excel. Если используется раннее связывание, а ссылка указывает на конкретную версию, которая не установлена, вы получите ошибку. Позднее связывание найдет любую версию, которая предоставляет Outlook.