2015-12-10 2 views
1

Я пытаюсь отправить электронное письмо с моего excel через Outlook.Отправка массовой почты в excel с помощью VBA

Я использую Excel 2010, Outlook открыт, и я выбрать ссылку на прогноз 14,0

Я создал макросы, называемые SendEmail и введенную следующий код:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String) 
    Dim olApp As Outlook.Application 
    Set olApp = CreateObject("outlook.Application") 
    Dim olMail As Outlook.MailItem 
    Set olMail = olApp.CreateItem(olMailItem) 
    olMail.To = what_address 
    olMail.Subject = subject_line 
    olMail.body = mail_body 
    olMail.Send 
End Sub 

Затем я создал соседний макросы, называемые SendMassEmail(). и вошел в код ниже:

Sub SendMassEmail() 

    row_number = 1 
    Do 
    DoEvents 
     row_number = row_number + 1 
     'MegBox (Sheet.Range("J3")) 
      Call SendEmail(Sheet1.Range("A" & row_number), "THis is a test email", Sheet1.Range("J2")) 
    Loop Until row_number = 4 
    'Range("A" & Rows.Count).End(xlUp).Row 
End Sub 

Однако, когда я запускаю код он придумать следующее сообщение об ошибке: определенных пользователем типа не определен

Не могли бы вы, пожалуйста, дайте мне знать, как я могу это исправить ?

+1

Что выделяет редактор при возникновении ошибки? Вместо .CreateItem (olMailItem) просто используйте .CreateItem (0). Это подходит для меня. – Alex4336

+1

Добавили ли вы объектную библиотеку объектов к ссылкам? «Инструменты» -> «Ссылки», добавьте «Библиотека объектов Microsoft Outlook 15.0». Сделав это, сделайте опубликованный код запущенным как шарм на моей машине –

ответ

0

Как вы уже проверили Microsoft Outlook 14,0 Object Library ссылку,
вы могли бы попробовать поздно выжидать, как это:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String) 
    Dim olApp As Object 
    Dim olMail As Object 
    On Error Resume Next 
    Set olApp = GetObject(, "Outlook.Application") 
    If Err.Number>0 Then Set olApp = CreateObject("Outlook.Application") 
    On Error Goto 0 
    Set olMail = olApp.CreateItem(0) 
    olMail.To = what_address 
    olMail.Subject = subject_line 
    olMail.body = mail_body 
    olMail.Send 
End Sub 

Я изменил olApp создание, так что вы не создать еще один экземпляр Outlook, если у вас уже есть один запуск! ;)

0

Вы можете использовать следующий код, но вам нужно добавить ссылку на Microsoft Outlook 14,0 Object Library (Инструменты -> Список использованной литературы ...):

Sub SendEmail(what_address As String, subject_line As String, mail_body As String) 
    Dim olApp As Outlook.Application 
    Set olApp = New Outlook.Application 
    Dim olMail As Outlook.MailItem 
    Set olMail = olApp.CreateItem(olMailItem) 
    olMail.To = what_address 
    olMail.Subject = subject_line 
    olMail.body = mail_body 
    olMail.Send 
End Sub 

Существует еще один способ сделать это без Импорт библиотеки:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String) 
    Dim olApp As Object 
    Set olApp = CreateObject("Outlook.Application") 
    Dim olMail As Object 
    Set olMail = olApp.CreateItem(olMailItem) 
    olMail.To = what_address 
    olMail.Subject = subject_line 
    olMail.body = mail_body 
    olMail.Send 
End Sub 

Я предлагаю первое решение. Поскольку вы импортируете библиотеку, она работает «лучше», и каждый раз, когда вы работаете с объектами Outlook, вы можете видеть список свойств объекта.

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