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 = "" і Прихована копія = "" розділи.
5). Нарешті змініть тему електронного листа в рядку .Subject = "відправити тестом значення комірки".

3 Натисніть кнопку інший + Q клавіші разом, щоб закрити Microsoft Visual Basic для додатків вікна.

Відтепер, коли значення, яке ви вводите в комірку D7, перевищує 200, електронна пошта із зазначеними одержувачами та тілом буде автоматично створюватися в Outlook. Ви можете натиснути Відправити , щоб надіслати цей електронний лист. Дивіться знімок екрана:

примітки:

1. Код VBA працює лише тоді, коли ви використовуєте Outlook як програму електронної пошти.

2. Якщо введені дані в комірці D7 є текстовим значенням, також з’явиться вікно електронної пошти.


Легко надсилайте електронну пошту через Outlook на основі полів створеного списку розсилки в Excel:

повне г, повне г,, показали, від, номер, XNUMX Надіслати електронні листи корисність Kutools для Excel допомагає користувачам надсилати електронну пошту через Outlook на основі створеного списку розсилки в Excel.
Завантажте та спробуйте зараз! (30-денний безкоштовний маршрут)


Статті по темі:


Найкращі інструменти для підвищення продуктивності офісу

Kutools для Excel вирішує більшість ваших проблем і збільшує продуктивність на 80%

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

Вкладка Office забезпечує інтерфейс з вкладками для Office і значно спрощує вашу роботу

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (290)
Поки немає оцінок. Оцініть першим!
Цей коментар був мінімізований модератором на сайті
Як слід змінити код, щоб застосувати його до всього діапазону комірок?
Цей коментар був мінімізований модератором на сайті
Шановна Деббі,
Будь ласка, спробуйте нижче код VBA, щоб вирішити проблему.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Якщо (не перетинається(ціль, діапазон("A1:D4")) ніщо) і (цільове значення > 200) тоді
Телефонуйте Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити 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
.Відобразити або використовувати .Send
Кінець з
При помилці GoTo 0
Встановіть xOutMail = Нічого
Встановіть xOutApp = Нічого
End Sub
Цей коментар був мінімізований модератором на сайті
У мене виникають проблеми з отриманням запиту цього коду, якщо значення в комірці змінено опосередковано. Наприклад, якщо рівняння суми автоматично змінює це значення. Коли рівняння виконується, і значення перевищує встановлене значення для запиту електронної пошти, воно цього не робить, якщо я фізично не зміню число. Чи є спосіб зробити запит на електронну пошту, навіть якщо змінено опосередковано?
Цей коментар був мінімізований модератором на сайті
Шановний Йорданія,
Наведений нижче код VBA може допомогти вам вирішити проблему. Будь ласка, не забудьте замінити «Адресу електронної пошти» на адресу електронної пошти одержувача в коді. Дякую.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim xRgPre як діапазон
On Error Resume Next
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Встановити xRg = Діапазон ("D7")
Встановіть xRgPre = xRg.Precedents
Якщо xRg.Value > 200 Тоді
Якщо Target.Address = xRg.Address Тоді
Телефонуйте Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) І (Intersect(Target, xRgPre).Address = Target.Address) Тоді
Телефонуйте Mail_small_Text_Outlook
End If
End If
End Sub
Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити 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
.Відобразити або використовувати .Send
Кінець з
При помилці GoTo 0
Встановіть xOutMail = Нічого
Встановіть xOutApp = Нічого
End Sub
Цей коментар був мінімізований модератором на сайті
Я змінив запропонований код, щоб спробувати змусити його працювати для моєї програми.
Змінено xRg = Range("C2:C40") і якщо xRg.Value = -1.

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

Наперед дякую за допомогу. Я новачок у всьому цьому, але читаючи цю тему, я приблизно 90% там.


Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim xRgPre як діапазон
On Error Resume Next
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Встановіть xRg = діапазон ("C2:C40")
Встановіть xRgPre = xRg.Precedents
Якщо xRg.Value = -1 Тоді
Якщо Target.Address = xRg.Address Тоді
Телефонуйте Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) І (Intersect(Target, xRgPre).Address = Target.Address) Тоді
Телефонуйте Mail_small_Text_Outlook
End If
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Я використав цей код з єдиною зміною: я застосував його до всього стовпця [Set xRg = Range("D4:D13")]. Тепер подія запускається щоразу, коли виконується обчислення, незалежно від того, чи клапан у стовпці D нижче цільового значення. Є уявлення, чому це так?


Dim Xrg As Range
Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim xRgPre як діапазон
On Error Resume Next
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Встановити Xrg = діапазон ("D4:D13")
Встановіть xRgPre = Xrg.Precedents
Якщо Xrg.Value < 1200 Тоді
Якщо Target.Address = Xrg.Address То
Телефонуйте Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) І (Intersect(Target, xRgPre).Address = Target.Address) Тоді
Телефонуйте Mail_small_Text_Outlook
End If
End If
End Sub

Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
Встановіть xOutApp = CreateObject("Outlook.Application")
Встановити xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привіт" & vbNewLine & _
"Test vba" _
& vbNewLine & _
«Рядок 2».
On Error Resume Next
За допомогою xOutMail
.До = ""
.CC = ""
.BCC = ""
.Subject = "Автоматичний тест електронної пошти"
.Body = xMailBody
Відображення
Кінець з
При помилці GoTo 0
Встановіть xOutMail = Нічого
Встановіть xOutApp = Нічого

End Sub


Завдяки.
Цей коментар був мінімізований модератором на сайті
Привіт

У мене виникають проблеми, тому що одержувачів електронної пошти потрібно додавати знову і знову один за іншим. Будь ласка, вкажіть, чи можна додати список одержувачів електронної пошти до цієї функції, щоб функція вибрала адресу електронної пошти зі списку наданих адрес електронної пошти або завантажила список, а функція надіслала електронний лист, уже створений, бажаному одержувачу.
Цей коментар був мінімізований модератором на сайті
Шановний Генрі,
Наведений нижче код VBA може допомогти вам вирішити проблему. Будь ласка, помістіть скрипт VBA у свій модуль робочого аркуша. Коли значення у вказаній клітинці відповідає умові, з’явиться діалогове вікно Kutools для Excel, виберіть клітинки, які містять адреси електронної пошти одержувачів, а потім натисніть кнопку OK. Потім відкриваються листи з вказаними одержувачами. Будь ласка, надішліть їх, як вам потрібно.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Встановити xRg = Діапазон ("D7")
Якщо xRg = Target And Target.Value > 200 Тоді
Телефонуйте Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
Dim xRgMsg як діапазон
Dim xCell As Range
Встановіть xRgMsg = Application.InputBox("Виберіть клітинки адреси:", "Kutools для 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
.Відобразити або використовувати .Send
Кінець з
xOutApp = Нічого
xOutMail = Нічого
Далі
При помилці GoTo 0
End Sub
Цей коментар був мінімізований модератором на сайті
чи буде воно відправлено автоматично поштою, без будь-яких переривань вручну
Цей коментар був мінімізований модератором на сайті
Дорогий Брахма,
Якщо ви хочете безпосередньо надіслати електронний лист без відображення, замініть рядок «.Display» на «.Send» у наведеному вище коді VBA.
Цей коментар був мінімізований модератором на сайті
Привіт, я поставив той самий сценарій, але він не працює, будь ласка, допоможіть мені в 1-й частині

Dim xRg As Range

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Встановити xRg = Діапазон ("D7")
Якщо xRg = Target And Target.Value = 200 Тоді
Телефонуйте Mail_small_Text_Outlook
End If

End Sub
Цей коментар був мінімізований модератором на сайті
Шановний Василь,
Чи є якесь попередження під час запуску коду?
Цей коментар був мінімізований модератором на сайті
Привіт, як можна змінити цей код, щоб перевірити, чи має група клітинок рядок "Не збігається", і надіслати електронний лист, якщо він є.
Цей коментар був мінімізований модератором на сайті
Шановний Хосе,
Будь ласка, спробуйте нижче код VBA. Під час запуску коду з’явиться діалогове вікно, будь ласка, виберіть діапазон, який ви перевірите на наявність рядка, і натисніть кнопку OK. якщо рядок не існує, ви отримаєте діалогове вікно підказки. Якщо рядок існує в діапазоні, відобразиться електронний лист із зазначеним одержувачем, темою та тілом.

Sub SendEmail()
Dim I As Long
Dim J As Long
Dim xRg As Range
Дим xArr
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
Dim xFlag як Boolean
On Error Resume Next
Встановіть xRg = Application.InputBox("Виберіть діапазон", "Kutools для Excel", Selection.Address, , , , , 8)
Якщо xRg — нічого, вийдіть із Sub
xArr = xRg.Значення
xFlag = Неправда
Для I = 1 до UBbound(xArr)
Для J = 1 до UBbound(xArr, 2)
Якщо xArr(I, J) = "Немає відповідності", Тоді
xFlag = Правда
End If
Далі
Далі
Якщо xFlag Тоді
Встановіть xOutApp = CreateObject("Outlook.Application")
Встановити xOutMail = xOutApp.CreateItem(0)
xMailBody = "Привіт" & vbNewLine & vbNewLine & _
"Це рядок 1" & vbNewLine & _
«Це рядок 2»
За допомогою xOutMail
.To = "Адреса електронної пошти"
.CC = ""
.BCC = ""
.Subject = "Збігається"
.Body = xMailBody
.Відобразити або використовувати .Send
Кінець з
Ще
MsgBox "Не знайдено відповідного значення", vbInformation, "KuTools для Excel"
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Як я можу змінити цей код для надсилання оцінок учнів батькам. Де, якщо стовпець A – це оцінка, а стовпець B – батьківська електронна адреса. Я хочу заповнити електронну пошту для кожного учня оцінкою F.
Цей коментар був мінімізований модератором на сайті
Шановний Франк,
Наведений нижче код VBA може допомогти вам вирішити проблему. Дякую.

Sub Mail_small_Text_Outlook()
Dim xRg As Range
Dim I As Long
Dim xRows As Long
Dim xVal як рядок
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
On Error Resume Next
Встановіть xRg = Application.InputBox("Виберіть стовпець оцінки та стовпець електронної пошти (два стовпці)", "Kutools для Excel", Selection.Address, , , , , 8)
Якщо xRg — нічого, вийдіть із Sub
xRows = xRg.Rows.Count
Встановити xRg = xRg(2)
Для I = 1 до x рядків
xVal = xRg.Зсув(I, -1).Текст
Якщо 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
.Відобразити або використовувати .Send
Кінець з
При помилці GoTo 0
Встановіть xOutMail = Нічого
Встановіть xOutApp = Нічого
End If
Далі
End Sub
Цей коментар був мінімізований модератором на сайті
У мене вже є список адрес електронної пошти у файлі Excel, як я можу змінити код, щоб автоматично вибирати адресу електронної пошти людини, якщо його клітинка D7 >200?
Цей коментар був мінімізований модератором на сайті
Хороший день,
Наведений нижче код VBA може допомогти вам вирішити проблему. Будь ласка, помістіть скрипт VBA у свій модуль робочого аркуша. Коли значення у вказаній клітинці відповідає умові, з’явиться діалогове вікно Kutools для Excel, виберіть клітинки, які містять адреси електронної пошти одержувачів, а потім натисніть кнопку OK. Потім відкриваються листи з вказаними одержувачами. Будь ласка, надішліть їх, як вам потрібно.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Встановити xRg = Діапазон ("D7")
Якщо xRg = Target And Target.Value > 200 Тоді
Телефонуйте Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
Dim xRgMsg як діапазон
Dim xCell As Range
Встановіть xRgMsg = Application.InputBox("Виберіть клітинки адреси:", "Kutools для 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
.Відобразити або використовувати .Send
Кінець з
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")". Я хочу відредагувати його та додати діапазон ("D7:F7"). Однак я отримую помилку Run Time Error 13, Type Mismatch, і це приводить мене до If xRg = Target And Target.Value > 2 Then.


Як я можу вирішити цю проблему?
Цей коментар був мінімізований модератором на сайті
Хороший день,
Будь ласка, спробуйте нижче код VBA, щоб вирішити проблему.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Якщо (не перетинається(ціль, діапазон("D7:F7")) нічого) і (цільове значення > 200) тоді
Телефонуйте Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити 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
.Відобразити або використовувати .Send
Кінець з
При помилці 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. Дякуємо за коментар.

Sub Mail_small_Text_Outlook()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim xRows As Long
Dim xCols As Long
Dim xVal як рядок
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити 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 до x рядків
Встановіть 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).Текст
.Subject = "відправити тестом значення комірки"
.Body = xMailBody
.Відобразити або використовувати .Send
Кінець з
При помилці GoTo 0
Встановіть xOutMail = Нічого
Встановіть xOutApp = Нічого
End If
Далі
End Sub
Цей коментар був мінімізований модератором на сайті
кришталь,

Це замінює наступний код:

Додаткова електронна адреса()

Dim xRg As Range

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, це буде в форматі A4 : A 100+ (оскільки ми постійно розширюємо


4) Я використовував невеликі фрагменти від інших користувачів, які згадували про використання списку для тригера для надсилання електронної пошти, але я не впевнений, що на 100% це було правильно, але мені знадобиться, щоб він просканував весь стовпець A... A4: A100
і якщо є 47 клітинок, які містять лише «7», то буде надіслано 47 електронних листів


Щиро дякую, що читаєте, і я сподіваюся, що ви можете допомогти :)
Цей коментар був мінімізований модератором на сайті
Шановний Мартин,
На жаль, не можу допомогти з цим.
Ви можете опублікувати своє запитання на нашому форумі: https://www.extendoffice.com/forum.html щоб отримати додаткову підтримку Excel від нашого технічного персоналу.
Дякуємо за ваш коментар.

З найкращими побажаннями,
кристал
Цей коментар був мінімізований модератором на сайті
привіт,


Що робити, якщо я хочу надіслати електронний лист на основі слова "завершено", доданого до стовпця L?
Цей коментар був мінімізований модератором на сайті
Шановний Джессі,
Наведений нижче код VBA може допомогти вам вирішити проблему. Дякуємо за коментар.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Якщо (Not Intersect(Target, Range("L:L")) Нічого) і (Target.Value = "completed") Тоді
Телефонуйте Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити 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
.Відобразити або використовувати .Send
Кінець з
При помилці GoTo 0
Встановіть xOutMail = Нічого
Встановіть xOutApp = Нічого
End Sub
Цей коментар був мінімізований модератором на сайті
привіт,
Я хотів би, щоб Outlook з’являвся лише тоді, коли дані, які я вставив у діапазон ("D7:F7"), мають принаймні 1 нуль або пробіл.
Я видалив рядок "Якщо Target.Cells.Count > 1, то вийти з підпорядкованого", і тепер Outlook завжди запускається, коли я вставляю будь-яку групу значень у клітинки D7:F7.

Довідка.
Цей коментар був мінімізований модератором на сайті
Шановний Ян,
Наведений нижче сценарій може допомогти вам вирішити проблему. Дякуємо за коментар.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
On Error Resume Next
Якщо Target.Address = Range("D7:F7").Address Then
З Application.WorksheetFunction
Якщо .CountIf(Target, "") > 0 або .CountIf(Target, 0) > 0, то
Встановіть xOutApp = CreateObject("Outlook.Application")
Встановити xOutMail = xOutApp.CreateItem(0)
За допомогою xOutMail
.To = "Адреса електронної пошти"
.CC = ""
.BCC = ""
.Subject = "відправити тестом значення комірки"
.Body = "Привіт"
.Відобразити або використовувати .Send
Кінець з
При помилці GoTo 0
Встановіть xOutMail = Нічого
Встановіть xOutApp = Нічого
End If
Кінець з
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Тож я використав ваше редагування, щоб включити діапазони комірок, але (якщо ми використовуємо приклад з робочим аркушем), мені було цікаво, як додати тип фрукта, дату та кількість до електронного листа HTML з аркуша, якщо вони відповідають критеріям мати згенерований електронний лист. Так би сказав

"Привіт"

Назва фрукта з осередку "Потрібно повернути назад замовлення, оскільки станом на дату замовлення: " дата замовлення з клітинки "ми маємо цю кількість:" кількість з осередку.
Цей коментар був мінімізований модератором на сайті
Привіт Ноемі!
Будь ласка, спробуйте цей сценарій VBA.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim xRg As Range
Dim I, J, K As Long
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
On Error Resume Next
Якщо Target.Address = Range("D7").Address Then
З Application.WorksheetFunction
Якщо IsNumeric(Target.Value) і Target.Value > 200, то
Встановіть xRg = Application.InputBox("Будь ласка, виберіть діапазон комірок, який ви відображатимете в тілі пошти:", "KuTools for Excel", Selection.Address, , , , , 8)
Якщо xRg — нічого, вийдіть із Sub
Для I = 1 До xRg.Rows.Count
Для J = 1 To xRg.Rows(I).Columns.Count
Для K = 1 До xRg.Рядки(I).Стовпці(J).Кільк
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
.Відобразити або використовувати .Send
Кінець з
При помилці 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, коли зазначена клітинка відповідає умові, з’явиться діалогове вікно, будь ласка, виберіть клітинку, що містить адресу електронної пошти, на яку ви надсилаєте електронний лист. Сподіваюся, це може допомогти. Дякую.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Cells.Count > 1, то вийдіть із Sub
Встановити xRg = Діапазон ("D7")
Якщо xRg = Target And Target.Value > 200 Тоді
Телефонуйте Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Зменшіть xOutApp як об’єкт
Змінити xOutMail як об’єкт
Заглушити xMailBody як рядок
Dim xRgMsg як діапазон
Dim xCell As Range
Встановіть xRgMsg = Application.InputBox("Виберіть клітинки адреси:", "Kutools для 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
.Відобразити або використовувати .Send
Кінець з
xOutApp = Нічого
xOutMail = Нічого
Далі
При помилці GoTo 0
End Sub
There are no comments posted here yet
Load More
Залишайте свої коментарі
Публікація як гість
×
Оцініть цю публікацію:
0   Персонажі
Рекомендовані місця