Note: The other languages of the website are Google-translated. Back to English

Как автоматически отправлять электронную почту на основе значения ячейки в Excel?

Предположим, вы хотите отправить электронное письмо через Outlook определенному получателю на основе указанного значения ячейки в Excel. Например, если значение ячейки D7 на листе больше 200, электронное письмо создается автоматически. В этой статье представлен метод VBA, позволяющий быстро решить эту проблему.

Автоматически отправлять электронную почту на основе значения ячейки с кодом VBA


Автоматически отправлять электронную почту на основе значения ячейки с кодом VBA

Чтобы отправить электронное письмо на основе значения ячейки в Excel, сделайте следующее.

1. На рабочем листе вам нужно отправить электронное письмо на основе значения его ячейки (здесь говорится о ячейке D7), щелкните правой кнопкой мыши вкладку листа и выберите Просмотреть код из контекстного меню. Смотрите скриншот:

2. Во всплывающем Microsoft Visual Basic для приложений окна, скопируйте и вставьте приведенный ниже код VBA в окно кода листа.

Код VBA: отправка электронной почты через Outlook на основе значения ячейки в Excel

Dim xRg As Range
'Update by Extendoffice 2018/3/7
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Cells.Count > 1 Then Exit Sub
  Set xRg = Intersect(Range("D7"), Target)
    If xRg Is Nothing Then Exit Sub
    If IsNumeric(Target.Value) And Target.Value > 200 Then
        Call Mail_small_Text_Outlook
    End If
End Sub
Sub Mail_small_Text_Outlook()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    xMailBody = "Hi there" & vbNewLine & vbNewLine & _
              "This is line 1" & vbNewLine & _
              "This is line 2"
    On Error Resume Next
    With xOutMail
        .To = "Email Address"
        .CC = ""
        .BCC = ""
        .Subject = "send by cell value test"
        .Body = xMailBody
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

Заметки:

1). В коде VBA D7 и значение> 200 - это ячейка и значение ячейки, на основе которых вы будете отправлять электронную почту.
2). Пожалуйста, измените текст сообщения электронной почты, как вам нужно в xMailBody строка в коде.
3). Замените адрес электронной почты на адрес электронной почты получателя в строке .To = "Адрес электронной почты".
4). И укажите получателей Cc и Bcc, как вам нужно в .CC = "" и Скрытая копия = "" разделов.
5). Наконец, измените тему электронной почты в строке .Subject = "проверка значения ячейки".

3. нажмите другой + Q ключи вместе, чтобы закрыть Microsoft Visual Basic для приложений окно.

С этого момента, когда значение, которое вы вводите в ячейку D7, больше 200, электронное письмо с указанными получателями и телом будет автоматически создано в Outlook. Вы можете нажать на Отправить кнопку, чтобы отправить это письмо. Смотрите скриншот:

Заметки:

1. Код VBA работает только при использовании Outlook в качестве почтовой программы.

2. Если данные, введенные в ячейку D7, представляют собой текстовое значение, также появится окно электронной почты.


Легко отправлять электронную почту через Outlook на основе полей созданного списка рассылки в Excel:

Компания Отправить письма полезности Kutools for Excel помогает пользователям отправлять электронную почту через Outlook на основе созданного списка рассылки в Excel.
Скачайте и попробуйте прямо сейчас! (30-дневная бесплатная трасса)


Статьи по теме:


Лучшие инструменты для работы в офисе

Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма ...
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон...
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы... Предотвращение дублирования ячеек; Сравнить диапазоны...
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор ...
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое ...
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии...
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом ...
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF...
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
вкладка kte 201905

Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
офисный дно
Сортировать комментарии по
Комментарии (305)
Номинальный 5 из 5 · рейтинги 1
Этот комментарий был сведен к минимуму модератором на сайте
Как следует изменить код, чтобы он применялся ко всему диапазону ячеек?
Этот комментарий был сведен к минимуму модератором на сайте
Дорогая Дебби,
Пожалуйста, попробуйте ниже код VBA, чтобы решить проблему.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Если (Не пересекаться(Цель, Диапазон("A1:D4")) Ничего) И (Цель.Значение > 200) Тогда
Вызов Mail_small_Text_Outlook
End If
End Sub
Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
On Error Resume Next
С xOutMail
.To = "Адрес электронной почты получателя"
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
У меня возникли проблемы с тем, чтобы этот код запрашивал, если значение в ячейке изменено косвенно. Например, если у меня есть уравнение суммы, которое автоматически меняет это значение. Когда уравнение запускается и значение превышает установленное значение, чтобы запросить электронное письмо, оно не делает этого, если только я сам физически не изменю номер. Есть ли способ сделать запрос по электронной почте, даже если он был изменен косвенно?
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Джордан,
Следующий код VBA может помочь вам решить проблему. Пожалуйста, не забудьте заменить «Адрес электронной почты» на адрес электронной почты получателя в коде. Спасибо.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRgPre как диапазон
On Error Resume Next
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Установите xRg = Range ("D7")
Установите xRgPre = xRg.Precedents
Если xRg.Value > 200 Тогда
Если Целевой.Адрес = xRg.Адрес Тогда
Вызов Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Then
Вызов Mail_small_Text_Outlook
End If
End If
End Sub
Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
On Error Resume Next
С xOutMail
.To = "Адрес электронной почты"
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Я изменил предложенный код, чтобы попытаться заставить его работать для моего приложения.
Изменено xRg = Range("C2:C40") и если xRg.Value = -1.

Проблема, с которой я сталкиваюсь, заключается в том, что в любое время происходит изменение любой ячейки, и пока одна из ячеек в моем диапазоне = -1, она будет вызывать Mail_small_Text_Outlook.
Я пытаюсь позвонить только в том случае, если какая-либо ячейка в моем диапазоне косвенно изменена на -1.
Мне также было интересно, возможно ли, и как это будет соответствовать двум критериям.
Например, проверьте диапазон A и диапазон B, и если они соответствуют критериям вызова функции.

Заранее спасибо за помощь. Я новичок во всем этом, но прочитав эту ветку, я понял, что там около 90%.


Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRgPre как диапазон
On Error Resume Next
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Установите xRg = Диапазон ("C2: C40")
Установите xRgPre = xRg.Precedents
Если xRg.Value = -1 Тогда
Если Целевой.Адрес = xRg.Адрес Тогда
Вызов Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Then
Вызов Mail_small_Text_Outlook
End If
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Я использовал этот код с тем единственным изменением, что я применил его ко всему столбцу [Set xRg = Range("D4:D13")]. Теперь событие срабатывает всякий раз, когда выполняется расчет, независимо от того, находится ли клапан в столбце D ниже целевого значения. Любая идея, почему это так?


Dim Xrg As Range
Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRgPre как диапазон
On Error Resume Next
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Установить Xrg = диапазон ("D4: D13")
Установите xRgPre = Xrg.Precedents
Если Xrg.Value < 1200 Тогда
Если Целевой.Адрес = Xrg.Адрес Тогда
Вызов Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Then
Вызов Mail_small_Text_Outlook
End If
End If
End Sub

Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет" & vbNewLine & _
"Тест vba" _
& vbNewLine & _
«Линия 2».
On Error Resume Next
С xOutMail
.К = ""
.CC = ""
.BCC = ""
.Subject = "Автоматический тест электронной почты"
.Body = xMailBody
.Отображать
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего

End Sub


Благодарю.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте

У меня проблемы, потому что получателя электронной почты нужно добавлять снова и снова один за другим. Пожалуйста, укажите, можно ли добавить список получателей электронной почты в эту функцию, чтобы функция выбирала адрес электронной почты из списка предоставленных адресов электронной почты или загружала список, и функция отправляла электронное письмо, уже составленное нужному получателю.
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Генри,
Следующий код VBA может помочь вам решить проблему. Поместите сценарий VBA в модуль рабочего листа. Когда значение в указанной ячейке соответствует условию, появится диалоговое окно Kutools for Excel, выберите ячейки, содержащие адреса электронной почты получателей, а затем нажмите OK Кнопка. Затем открываются электронные письма с указанными получателями. Пожалуйста, пришлите их по мере необходимости.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Установите xRg = Range ("D7")
Если xRg = Target And Target.Value > 200 Тогда
Вызов Mail_small_Text_Outlook
End If
End Sub
Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Dim xRgMsg как диапазон
Dim xCell как диапазон
Установите xRgMsg = Application.InputBox («Пожалуйста, выберите ячейки адреса:», «Kutools for Excel», , , , , , 8)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
On Error Resume Next
Для каждой xCell в xRgMsg
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
С xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
xOutApp = Ничего
xOutMail = Ничего
Далее
По ошибке GoTo 0
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
будет ли он отправлен автоматически по почте, без какого-либо ручного прерывания
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Брахма,
Если вы хотите напрямую отправить электронное письмо без отображения, замените строку «.Display» на «.Send» в приведенном выше коде VBA.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, я поставил тот же скрипт, но он не работает, пожалуйста, помогите мне в 1-й части

Dim xRg как диапазон

Private Sub Worksheet_Change (ByVal Target As Range)
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Установите xRg = Range ("D7")
Если xRg = Target And Target.Value = 200 Тогда
Вызов Mail_small_Text_Outlook
End If

End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой базилик,
Есть ли какие-либо предупреждения при запуске кода?
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте, как бы вы изменили этот код, чтобы проверить, есть ли в группе ячеек строка «Нет совпадения», и отправить электронное письмо, если оно есть.
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Хосе,
Пожалуйста, попробуйте ниже код VBA. При запуске кода появляется диалоговое окно, выберите диапазон, который вы будете проверять на наличие строки, и нажмите кнопку ОК. если строка не существует, вы получите диалоговое окно с подсказкой. Если строка существует в диапазоне, будет отображаться электронное письмо с указанным получателем, темой и телом.

Sub Отправить по электронной почте ()
Дим я пока
Дим Джей До тех пор
Dim xRg как диапазон
Тусклый xArr
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Dim xFlag как логическое значение
On Error Resume Next
Установите xRg = Application.InputBox («Выберите диапазон», «Kutools для Excel», Selection.Address, , , , , 8)
Если xRg ничего не значит, выйдите из Sub
xArr = xRg.Value
xFlag = Ложь
Для I = 1 To UBound(xArr)
Для J = 1 до UBound(xArr, 2)
Если xArr(I, J) = "Нет совпадения", то
xFlag = Истина
End If
Далее
Далее
Если xFlag Тогда
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
С xOutMail
.Кому = "Адрес электронной почты"
.CC = ""
.BCC = ""
.Тема = "Совпадение"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
Еще
MsgBox «Не найдено совпадающего значения», vbInformation, «KuTools for Excel»
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Как я могу изменить этот код для отправки оценок учеников родителям. Где, если столбец A — это оценка, а столбец B — родительский адрес электронной почты. Я хочу заполнить электронное письмо для каждого ученика с оценкой F.
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Фрэнк,
Приведенный ниже код VBA может помочь вам решить проблему. Спасибо.

Подпрограмма Mail_small_Text_Outlook()
Dim xRg как диапазон
Дим я пока
Dim xRows As Long
Dim xVal как строка
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
On Error Resume Next
Set xRg = Application.InputBox («Пожалуйста, выберите столбец оценки и столбец электронной почты (два столбца)», «Kutools for Excel», Selection.Address, , , , 8)
Если xRg ничего не значит, выйдите из Sub
xRows = xRg.Rows.Count
Установите xRg = xRg (2)
Для I = 1 в xRows
xVal = xRg.Offset(I, -1).Text
Если xVal = "F" Тогда
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это оценка вашего ребенка" & xRg.Offset(I, -1).Text
С xOutMail
.to = xRg.Смещение(I, 0).Текст
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End If
Далее
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
У меня уже есть список адресов электронной почты в файле Excel, как я могу изменить код, чтобы автоматически выбирать адрес электронной почты человека, если его ячейка D7 > 200?
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день,
Следующий код VBA может помочь вам решить проблему. Поместите сценарий VBA в модуль рабочего листа. Когда значение в указанной ячейке соответствует условию, появится диалоговое окно Kutools for Excel, выберите ячейки, содержащие адреса электронной почты получателей, а затем нажмите OK Кнопка. Затем открываются электронные письма с указанными получателями. Пожалуйста, пришлите их по мере необходимости.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Установите xRg = Range ("D7")
Если xRg = Target And Target.Value > 200 Тогда
Вызов Mail_small_Text_Outlook
End If
End Sub
Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Dim xRgMsg как диапазон
Dim xCell как диапазон
Установите xRgMsg = Application.InputBox («Пожалуйста, выберите ячейки адреса:», «Kutools for Excel», , , , , , 8)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
On Error Resume Next
Для каждой xCell в xRgMsg
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
С xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
xOutApp = Ничего
xOutMail = Ничего
Далее
По ошибке GoTo 0
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
У меня проблемы с отправкой почты через Outlook. Я получаю сообщение об ошибке: «Программа пытается отправить электронное письмо от вашего имени. Если это неожиданно, отклоните и убедитесь, что ваше антивирусное программное обеспечение обновлено».
Пожалуйста, помогите, так как я не могу это автоматизировать.
Этот комментарий был сведен к минимуму модератором на сайте
Извини майянк,
Код работает хорошо в моем случае. Кажется, что-то с функцией «отправить от имени» настроено в вашем Outlook. Пожалуйста, проверьте это.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте, какой код я бы использовал, если я пытаюсь отправить электронное письмо менеджеру, у которого есть список фруктов, количество которых> 200 раз в месяц (на основе вашего примера) или срок действия которых скоро истекает (на основе дат)
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день
Может быть, метод из этой статьи «Как отправить письмо, если срок выполнения в Excel соблюден?» могу помочь тебе.
Пожалуйста, перейдите по этой ссылке: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Этот комментарий был сведен к минимуму модератором на сайте
Как я могу отредактировать код для отправки электронного письма на основе даты в ячейке. Например, мне нужно, чтобы документ проверялся каждые 15 месяцев, и я хочу отправить электронное письмо через 12 месяцев на адрес электронной почты, в котором говорится, что документ необходимо проверить. Теперь у меня есть возможность автоматически отправлять электронное письмо, изменив .Display на .Send, и он отлично работает, как написано, но что мне нужно изменить, чтобы использовать функцию даты вместо целого числа??
Этот комментарий был сведен к минимуму модератором на сайте
Как вы можете добавить несколько диапазонов в «Set xRg = Range («D7»)». Я хочу отредактировать его и добавить Range("D7:F7"). Однако я получаю сообщение об ошибке Run Time Error 13, Type Mismatch, и это приводит меня к If xRg = Target And Target.Value > 2 Then.


Как я могу решить эту проблему?
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день,
Пожалуйста, попробуйте ниже код VBA, чтобы решить проблему.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Если (Не пересекаться(Цель, Диапазон("D7:F7")) Ничего) И (Цель.Значение > 200) Тогда
Вызов Mail_small_Text_Outlook
End If
End Sub
Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
On Error Resume Next
С xOutMail
.To = "Адрес электронной почты получателя"
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
сработало отлично.. Спасибо..:):)
Этот комментарий был сведен к минимуму модератором на сайте
У меня это не работает, так как значение в D7 является результатом формулы. Что, если ячейка D7 содержит формулу, например, D7 =2*120? Это все еще соответствует условию, но ничего не происходит. Пожалуйста помоги
Этот комментарий был сведен к минимуму модератором на сайте
как остановить запуск кода, т.е. не запрашивать электронное письмо, когда условие не выполняется?

даже когда D7 < 200, я все равно получаю сообщение по электронной почте.
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день,
Код обновляется в посте с решенной проблемой. Спасибо за ваш комментарий.
Этот комментарий был сведен к минимуму модератором на сайте
Hi

Большое спасибо за размещение этого кода VBA и инструкций. Когда я нашла его, я почувствовала, что выиграла в лотерею. Однако я застрял в чем-то, поэтому я надеюсь, что вы можете помочь (я новичок в VBA, у меня есть только очень базовое понимание).

Я скопировал код и изменил ячейку и значение ячейки, чтобы выбрать из диапазона, если выполняются критерии. Я пробовал и тестировал, и это работает, и я получил электронное письмо в Outlook на основе критериев.

1) Однако я не могу понять, как заставить код VBA запускаться автоматически, когда я открываю лист Excel, вместо того, чтобы щелкать приложение VBA и выбирать «Выполнить». Не могли бы вы посоветовать, есть ли дополнительная подсказка для ввода кода VBA выше, который сделает это, или это нужно делать отдельно.

2) Также есть способ получить код VBA для отправки письма человеку, если для определенного элемента установлен срок «да», как показано в примере ниже.
скрытый столбец электронной почты
Имя и фамилия

Процедура
Срок выполнения процедуры №1 да
№ процедуры 2 срок нет

У меня было бы много людей в электронной таблице (идущей горизонтально подряд), и «Да» можно было бы выделить для различных просроченных процедур (перечисленных вертикально в столбце A. Есть ли способ создать код VBA, который работает для чего-то вроде этого - если «Да» для «Лицо 1», то отправьте электронное письмо «лицу 1» с «номером процедуры» (или номерами) и сроками выполнения. Возможность перечислить в электронном письме все процедуры и их последующие сроки выполнения.

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

Надеюсь, вы можете помочь
Этот комментарий был сведен к минимуму модератором на сайте
Дорогая Анна,
Пожалуйста, попробуйте приведенный ниже код VBA. Спасибо за ваш комментарий.

Подпрограмма Mail_small_Text_Outlook()
Dim xRg как диапазон
Dim xCell как диапазон
Дим я пока
Dim xRows As Long
Dim xCols As Long
Dim xVal как строка
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
On Error Resume Next
Установите xRg = Application.InputBox («Выберите диапазон, содержащий значение ячейки, которое вы будете отправлять по электронной почте на основе:», «Kutools for Excel», Selection.Address, , , , , 8)
Если xRg ничего не значит, выйдите из Sub
xRows = xRg.Rows.Count
xCols = xRg.Columns.Count
Для I = 1 в xRows
Установить xCell = xRg(I, xCols)
Если xCell.Value = "Да" Тогда
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это ваша информация: " & vbNewLine & xCell.Offset(0, -1).Text & vbNewLine & xCell.Offset(0, -2).Text
С xOutMail
.To = xCell.Offset(0, -4).Text
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End If
Далее
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Кристалл,

Это заменяет следующий код:

Дополнительный адрес электронной почты ()

Dim xRg как диапазон

Dim xRgEach как диапазон

Затемнение xEmail_Subject, xEmail_Send_Form и т. д.
Этот комментарий был сведен к минимуму модератором на сайте
Куда именно мы вставляем этот код?
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день,
Вам нужно поместить код в окно кода рабочего листа.
Откройте окно Microsoft Visual Basic для приложений, дважды щелкните имя листа на левой панели, чтобы открыть редактор кода.
Этот комментарий был сведен к минимуму модератором на сайте
Всем привет,


В настоящее время у меня небольшие проблемы с кодированием (новичок в этом - возможно, я откусил больше, чем могу прожевать)


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


В настоящее время мне нужен код, который будет использовать следующие данные:


1) Адрес и проблема ( 2 "общие" ячейки, которые были объединены через ((В ячейке D1)) " = = CONCAT (B1," "C1,)"
Адрес в B1 всегда будет одинаковым (более или менее)
В то время как C1 всегда будет меняться в зависимости от неисправности объекта.


2) Электронное письмо должно быть отправлено на тот же адрес электронной почты (могу ли я использовать $ E $ 1 или мне нужно использовать E1 - E1, например) или я могу просто ввести «TheEmailAdress@.co.uk» в строке кода


3) Тело письма должно быть заполнено аналогично пункту 1) ...... ((В ячейке F1)) " =CONCAT(G1," ",H1)
Они будут постоянно меняться, поскольку они представляют компанию (G1) и то, что они делают, исправляют, цитируют и т. д. (H1).

4) Триггер для отправки электронного письма, я был бы номером 7, лист обновляется ежедневно (7 дней в неделю)
поэтому мне нужен триггер для отправки электронного письма на 7-й день, но не постоянно, как на 8-й, 9-й, 10-й и т. Д. а не раньше таких как 1-6, это будет в формате А4: А 100+ (поскольку мы постоянно расширяем


4) Я использовал небольшие фрагменты от других пользователей, которые упомянули об использовании списка для триггера для отправки электронной почты, но не уверен, что на 100% это правильно, но мне нужно, чтобы он сканировал все Collum A... А4: А100
и если есть 47 ячеек, содержащих только « 7 », то будет отправлено 47 электронных писем.


Большое спасибо за чтение, и я надеюсь, что вы можете помочь :)
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Мартин,
Извините, не могу помочь с этим.
Вы можете задать свой вопрос на нашем форуме: https://www.extendoffice.com/forum.html чтобы получить больше поддержки Excel от нашего технического персонала.
Спасибо за ваш комментарий.

С наилучшими пожеланиями,
Crystal
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,


Что, если бы я хотел отправить электронное письмо на основе слова «завершено», добавленного в столбец L?
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Джесси,
Следующий код VBA может помочь вам решить проблему. Спасибо за ваш комментарий.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Если (Не Пересекать(Цель, Диапазон("L:L")) Ничего) И (Цель.Значение = "завершено") Тогда
Вызов Mail_small_Text_Outlook
End If
End Sub
Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
On Error Resume Next
С xOutMail
.To = "Адрес электронной почты получателя"
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,
Я хотел бы, чтобы Outlook выскакивал только тогда, когда данные, которые я вставил в диапазон ("D7: F7"), имеют по крайней мере 1 ноль или пробел.
Я удалил строку «If Target.Cells.Count > 1 Then Exit Sub», и теперь Outlook всегда запускается, когда я вставляю любую группу значений в ячейки D7: F7.

Справка.
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Ян,
Следующий сценарий может помочь вам решить проблему. Спасибо за ваш комментарий.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
On Error Resume Next
Если Цель.Адрес = Диапазон("D7:F7").Адрес Тогда
С Application.WorksheetFunction
Если .CountIf(Цель, "") > 0 Или .CountIf(Цель, 0) > 0 Тогда
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
С xOutMail
.To = "Адрес электронной почты"
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = "Привет"
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End If
Конец с
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Поэтому я использовал ваше редактирование, чтобы включить диапазоны ячеек, но (если мы используем пример рабочего листа) мне было интересно, как добавить тип фруктов, дату и количество в электронное письмо HTML из рабочего листа, если они соответствуют критериям для сгенерировать электронное письмо. Так бы сказал

"Всем привет,"

Название фрукта из ячейки «Необходимо поставить в резерв, потому что на дату заказа: «дата заказа из ячейки» у нас есть эта сумма:» количество из ячейки.
Этот комментарий был сведен к минимуму модератором на сайте
Привет Ноэми,
Пожалуйста, попробуйте этот скрипт VBA.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRg как диапазон
Dim I, J, K As Long
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
On Error Resume Next
Если Цель.Адрес = Диапазон("D7").Адрес Тогда
С Application.WorksheetFunction
Если IsNumeric(Target.Value) And Target.Value > 200, то
Set xRg = Application.InputBox("Пожалуйста, выберите диапазон ячеек, который вы будете отображать в теле письма:", "KuTools for Excel", Selection.Address, , , , , 8)
Если xRg ничего не значит, выйдите из Sub
Для I = 1 To xRg.Rows.Count
Для J = 1 To xRg.Rows(I).Columns.Count
Для K = 1 To xRg.Rows(I).Columns(J).Count
xMailBody = xMailBody & " " & xRg.Rows(I).Columns(J).Cells(K).Text
Далее
Далее
xMailBody = xMailBody и vbNewLine
Далее
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
С xOutMail
.To = "Адрес электронной почты"
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = "Привет!" & vbNewLine & xMailBody
.Отобразить или использовать .Отправить
Конец с
По ошибке GoTo 0
Установите xOutMail = Ничего
Установите xOutApp = Ничего
End If
Конец с
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
привет кристалл
спасибо за ваши коды, если возможно, пришлите коды для приведенных ниже деталей

если у нас есть от 8 до 9 столбцов, использующих разные типы истечения срока действия, такие как дата истечения срока действия паспорта, дата истечения срока действия водительских прав, дата истечения срока регистрации транспортного средства, дата истечения срока действия пропуска и т. д., а оповещение по почте должно быть отправлено только 5 указанным лицам.

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

Пожалуйста, сделайте необходимое

заранее спасибо
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,
Мы разместили статью "Как отправить письмо, если в Excel соблюдены сроки?"
Вы можете увидеть, есть ли ответы в этой статье. Чтобы открыть статью, перейдите по этой ссылке: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Спасибо.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте. Если бы я хотел отправить электронное письмо из списка вместо того, чтобы вставлять в код адрес электронной почты, возможно ли это? спасибо
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,
Пожалуйста, попробуйте ниже код VBA, когда указанная ячейка соответствует условию, появится диалоговое окно, выберите ячейку, содержащую адрес электронной почты, на который вы отправили электронное письмо. Надеюсь, это поможет. Спасибо.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Target.Cells.Count > 1, то выйдите из подпрограммы
Установите xRg = Range ("D7")
Если xRg = Target And Target.Value > 200 Тогда
Вызов Mail_small_Text_Outlook
End If
End Sub
Подпрограмма Mail_small_Text_Outlook()
Dim xOutApp как объект
Dim xOutMail как объект
Dim xMailBody как строка
Dim xRgMsg как диапазон
Dim xCell как диапазон
Установите xRgMsg = Application.InputBox («Пожалуйста, выберите ячейки адреса:», «Kutools for Excel», , , , , , 8)
xMailBody = "Привет!" & vbNewLine & vbNewLine & _
"Это строка 1" & vbNewLine & _
"Это линия 2"
On Error Resume Next
Для каждой xCell в xRgMsg
Установите xOutApp = CreateObject("Outlook.Application")
Установите xOutMail = xOutApp.CreateItem(0)
С xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "проверка значения ячейки"
.Body = xMailBody
.Отобразить или использовать .Отправить
Конец с
xOutApp = Ничего
xOutMail = Ничего
Далее
По ошибке GoTo 0
End Sub
Здесь еще нет комментариев
Загрузить ещё
Оставляйте свои комментарии
Публикация как гость
×
Оценить этот пост:
0   Характеристики
Предлагаемые места

Подписывайтесь на Нас

Copyright © 2009 - www.extendoffice.ком. | Все права защищены. Питаться от ExtendOffice, | Карта сайта
Microsoft и логотип Office являются товарными знаками или зарегистрированными товарными знаками Microsoft Corporation в США и / или других странах.
Защищено Sectigo SSL