Попытка сгенерировать электронную почту из данных в таблице Excel, ошибка компиляции «Определяемый пользователем тип не определен» - PullRequest
0 голосов
/ 12 апреля 2019

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

Я зашел в «Инструменты»> Ссылки и поставил флажок «Microsoft Outlook 16.0 Object Library», ноЯ получаю ту же ошибку.Когда я пытаюсь найти другие ответы на эту тему, кажется, что это решение для большинства.

Option Explicit

Private Sub Generate_offer()

Dim strFile As String
Dim OutApp As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem

  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

Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Ваш код использует 'Раннее связывание' .. где для использования 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.

0 голосов
/ 12 апреля 2019

Я не получаю ошибок при смене вашего Dim на Objects

Option Explicit


Private Sub Generate_offer()

Dim strFile As String
Dim OutApp As Object
Dim objOutlookMsg As Object

  Set OutApp = CreateObject("Outlook.Application")
  Set objOutlookMsg = OutApp.CreateItem(0)

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...