Как исправить ошибку компиляции с помощью этого кода?

Это ссылка на учебник https://wellsr.com/vba/2018/excel/excel-vba-send-email-with-attachment/

Sub AttachMultipleFilesToEmail()
Dim outlookApp As Outlook.Application
Dim myMail As Outlook.MailItem

Set outlookApp = New Outlook.Application
Set myMail = outlookApp.CreateItem(olMailItem)

For i = 2 To 5
  source_file = "C:\Work Files\" & Cells(i, 3)
  myMail.Attachments.Add source_file
Next i
End Sub

Где возникает ошибка

Код ошибки

Это общая картина того, что я пытаюсь сделать. Получил это изображение с https://wellsr.com/vba/2018/excel/excel-vba-send-email-with-attachment/, но файлы и каталог существуют и верны. В чем может быть проблема?

Я пересмотрел свой ответ в свете вашего отредактированного вопроса. Я думаю, это исправит вашу ошибку.

DeanOC 02.06.2019 05:25
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
400
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Навскидку, я бы сказал, что у вас нет ссылки на DLL Outlook.

Попробуйте щелкнуть меню «Инструменты» в редакторе VBA и выбрать «Ссылки...».

Затем прокрутите список вниз, пока не найдете Microsoft Outlook XX Object Library, и выберите его. ХХ — это просто номер версии.

Если у вас возникнут вопросы в будущем, всегда указывайте строку кода, в которой возникает ошибка, и точное сообщение об ошибке. В противном случае мы просто предполагаем.

Что касается вашего пересмотренного вопроса:

Я запустил ваш код, и он отлично работает. Однако я убедился, что лист с именами файлов является активным листом, иначе вы получите ошибки.

Я предлагаю вам явно ссылаться на лист с данными, а не просто использовать Cells(i,3), поскольку это сокращение для использования активного листа.

Вот один из способов сделать это:

Sub AttachMultipleFilesToEmail()
    Dim outlookApp As Outlook.Application
    Dim myMail As Outlook.MailItem
    Dim sheet As Worksheet 'declare an object to point to the sheet with the data

    Set outlookApp = New Outlook.Application
    Set myMail = outlookApp.CreateItem(olMailItem)
    Set sheet = Worksheets("Sheet1") 'set the object to the correct sheet

    For i = 1 To 2
        source_file = "C:\Work Files\" & sheet.Cells(i, 3) 'use the sheet object to ensure the correct cells are used.
        myMail.Attachments.Add source_file
    Next i
End Sub

Большое спасибо! я ценю вашу помощь

Rachet and Clank 31.05.2019 06:54

Я сделал это, но по какой-то причине моей репутации недостаточно, чтобы показать это на публике. И да, ваш комментарий - правильное решение. Еще раз спасибо.

Rachet and Clank 01.06.2019 00:37

Это то, что он сказал, когда я попытался проголосовать за ваш ответ. "Спасибо за отзыв! Голоса, отданные теми, у кого репутация менее 15, записываются, но не изменяют общедоступную оценку публикации."

Rachet and Clank 01.06.2019 00:38

Я обновил дело. Не могли бы вы помочь мне понять, почему путь к файлу является проблемой. Я почти уверен, что ввел правильный путь к файлу и файлы.

Rachet and Clank 01.06.2019 00:58

Возможно, вам потребуется добавить ссылку (Инструменты -> Справочник) и изменить «ThisWorbook» на «ActiveWorkoob». ThisWorkbook не будет работать, если вы запускаете свой макрос из личного модуля.

Другие вопросы по теме