Из Excel - отправка напоминания по электронной почте при выполнении критериев с использованием кода VBA - PullRequest
0 голосов
/ 02 июля 2019

У меня была таблица, содержащая данные от 1 до 200 и от столбца A до T, мне нужен код VBA для отправки напоминания по электронной почте нескольким получателям. В таблице есть даты, в которых я использовал условие if и прибыл, определив столбец, который будет возвращать "YES". При появлении YES соответствующее письмо (Column K) должно быть отправлено с соответствующей темой (Column C)

Я могу создавать и определять почту и отправлять почту. Но невозможно использовать цикл и условие IF для соответствия критериям и отправить с помощью .to = "" списку получателей

Sub Sendmail()

Dim ol As Outlook.Application
Dim olmail As Outlook.MailItem


Set ol = New Outlook.Application

For i = 1 To Sheet1.Cells(Rows.Count, 16).End(xlUp).Row

    Set olmail = ol.CreateItem(olMailItem)
    With olmail
        .To = Sheet1.Cells(i, 16).Value
        .Subject = Sheet1.Cells(i, 3).Value & Sheet1.Cells(i, 4).Value
        .Body = Range("C2").Value
        .Display
        '.send

    End With

Next

 Set ol = Nothing
 Set olmail = Nothing

End Sub

Приложение Outlook открывается, но без почтовых идентификаторов

1 Ответ

0 голосов
/ 03 июля 2019

Первая проблема, которую я бы исследовал, - Sheet1. Имена рабочих листов в форме SheetN являются внутренними именами Excel для рабочих таблиц. Когда создаются первые рабочие листы рабочей книги, Sheet1 равен Worksheets("Sheet1"), Sheet2 равен Worksheets("Sheet2") и так далее. Но как только вы начнете переименовывать или перемещать листы, эта корреспонденция может быть потеряна. Я подозреваю, что Sheet1 - это не лист с данными электронной почты.

Примечание. «Лист1» - это имя по умолчанию для первого рабочего листа в английских версиях Excel. Если ваш язык не английский, имя по умолчанию, вероятно, соответствует вашему языку.

Если вы посмотрите на панель Explorer редактора VBA, вы увидите что-то вроде этого:

 VBAProject (YourNameForWorkbook.xlsm)
  - Microsoft Excel Objects
      Sheet1 (YourNameForWorksheet1)
      Sheet2 (YourNameForWorksheet2)
  - Microsoft Excel Objects
      Module1
      YourNameForModule

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

Если рабочая книга имеет один рабочий лист, возможно, допустимо оставить имя по умолчанию «Лист1». Я думаю, что всегда лучше переименовать рабочие листы во что-то значимое, например, «EmailDetails». Когда вы вернетесь к этой книге через шесть или двенадцать месяцев, значимые имена значительно облегчат понимание этой книги.

Далее я бы добавил еще два утверждения:

Dim WshtEmail As Worksheet
Set WshtEmail = Worksheets("EmailDetails")

Наконец, я бы заменил каждые Sheet1 на WshtEmail.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...