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

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

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

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


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

Если вам нужно автоматически создать новое электронное письмо с активной рабочей книгой, когда ячейка в диапазоне A2: E11 изменяется на определенном листе, вам может помочь следующий код VBA.

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

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

Код VBA: отправить электронное письмо, если ячейка в указанном диапазоне изменена в Excel

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("A2:E11")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Cell(s) " & xRgSel.Address(False, False) & _
            " in the worksheet '" & Me.Name & "' were modified on " & _
            Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
            " by " & Environ$("username") & "."

        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Заметки:

1). В коде A2: E11 это диапазон, на основе которого вы будете отправлять электронную почту.
2). Пожалуйста, измените текст сообщения электронной почты, как вам нужно в xMailBody строка в коде.
3). Заменить Ваш e-mail с адресом электронной почты получателя в строке .To = "Адрес электронной почты".
4). Измените тему электронного письма в строке .Subject = "Рабочий лист изменен в" & ThisWorkbook.FullName.

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

С этого момента любая ячейка в диапазоне A2: E11 будет изменена, будет создано новое электронное письмо с прикрепленной обновленной книгой. И все указанные поля, такие как тема, получатель и тело письма, будут перечислены в письме. Отправьте электронное письмо.

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


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


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

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

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

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

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
офисный дно
Сортировать комментарии по
Комментарии (37)
Оценок пока нет. Оцените первым!
Этот комментарий был сведен к минимуму модератором на сайте
Я застрял в коде ниже VB. Я пытаюсь получить уведомление по электронной почте пользователю, где данные были изменены. Электронная почта работает, но когда я вношу какие-либо изменения, электронная почта инициируется сразу, но я хочу получать электронную почту, когда лист Excel сохраняется и закрывается после внесения всех изменений для всех пользователей, которые повлияли. Также это должно работать для любого из листов во всей книге Excel.

Пожалуйста, помогите ...

Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)

'****Объявление объектов и переменных******

Dim xRgSel As Range Dim xOutApp As Object Dim xMailItem As Object Dim xMailBody As String Dim mailTo As String

On Error Resume Next

Sheets("TargetSheet").Range("TargetRange").Select

Application.ScreenUpdating = False Application.DisplayAlerts = False

'Установить xRg = Range("A" & Rows.Count).End(xlUp).Row

Установить xRg = диапазон ("A2:DA1000")
Установите xRgSel = Intersect (Цель, xRg)


ActiveWorkbook.Save
'**********Открытие приложения Outlook***********

Если не xRgSel, то ничто

Установите xOutApp = CreateObject("Outlook.Application")
Установить xMailItem = xOutApp.CreateItem(0)

xMailBody = "Ячейка (я)" & xRgSel.Address(False, False) & _
" на листе '" & Me.Name & "' были изменены на " & _
Формат$(Теперь, "мм/дд/гггг") & " at " & Формат$(Теперь, "чч:мм:сс") & _
" by " & Environ$("имя пользователя") & "."
'***********Поиск списка получателей************

Если Ячейки(xRgSel.Row, "A").Value = "Pankaj" Тогда

mailTo = "pank12***@gmail.com"

End If

Если Ячейки(xRgSel.Row, "A").Value = "Нитин" Тогда

mailTo = "pank****@gmail.com"

End If

Если Ячейки(xRgSel.Row, "A").Value = "Чандан" Тогда

mailTo = "pakxro**@gmail.com"

End If
'*************Составление электронной почты***************

С xMailItem

.Кому = почтаКому
.Subject = "Рабочий лист изменен в" & ThisWorkbook.FullName
.Body = xMailBody
'.Attachments.Add (ThisWorkbook.FullName)
.Отображать

Конец с

Установить xRgSel = Ничего
Установите xOutApp = Ничего
Установить xMailItem = Ничего

End If

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Уважаемый Панкадж Шукла,
Разместите свой вопрос по Excel на нашем форуме: https://www.extendoffice.com/forum.html чтобы получить дополнительную поддержку по Excel от нашего специалиста по Excel.
Этот комментарий был сведен к минимуму модератором на сайте
Я смог создать макрос, однако у меня возникла проблема. Я хотел бы автоматически отправлять электронное письмо, когда ячейка достигает определенного порога. Ячейка - это формула. Когда сумма вычислений становится ниже указанного порога, она ничего не делает; однако, если я наберу прямо в ячейку, макрос будет обработан, как и планировалось. Формула портит макрос?
Этот комментарий был сведен к минимуму модератором на сайте
Привет Сисси Джонс,
Метод в этой статье: Как автоматически отправлять электронную почту на основе значения ячейки в Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html может помочь вам решить проблему.
Этот комментарий был сведен к минимуму модератором на сайте
Уважаемый Администратор,


Мне нужна твоя помощь,



У меня есть excel для отслеживания деталей ежедневной работы, проделанной нашим работником на местах, поэтому возможно ли вызвать письмо из листа excel, если этот парень не смог обновить данные в этом листе excel в заданное время.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,
Не могу помочь с этим.
Этот комментарий был сведен к минимуму модератором на сайте
Если я хочу отправить значение ячейки вместо адреса... то что мне изменить в коде?
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,
Вы можете попробовать приведенный ниже код VBA.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRgSel как диапазон
Dim xOutApp как объект
Dim xMailItem как объект
Dim xMailBody как строка
On Error Resume Next
Приложение.ScreenUpdating = False
Приложение.DisplayAlerts = False
Установить xRg = диапазон ("A2: E11")
Установите xRgSel = Intersect (Цель, xRg)
ActiveWorkbook.Save
Если не xRgSel, то ничто
Установите xOutApp = CreateObject("Outlook.Application")
Установить xMailItem = xOutApp.CreateItem(0)
xMailBody = "Ячейка (я)" & xRgSel.Address(False, False) & _
xRgSel.Value и _
" на листе '" & Me.Name & "' были изменены на " & _
Формат$(Теперь, "мм/дд/гггг") & " at " & Формат$(Теперь, "чч:мм:сс") & _
" by " & Environ$("имя пользователя") & "."

С xMailItem
.To = "Адрес электронной почты"
.Subject = "Рабочий лист изменен в" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Отображать
Конец с
Установить xRgSel = Ничего
Установите xOutApp = Ничего
Установить xMailItem = Ничего
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Что, если нам нужны только обновленные комментарии в этой ячейке, а не все значение ячейки. Должны отображаться только последние комментарии, добавленные в ячейку.
Этот комментарий был сведен к минимуму модератором на сайте
Вы поняли это?
Этот комментарий был сведен к минимуму модератором на сайте
Отличная информация.
Вопрос по поводу информации, которую можно добавить в письмо.
Используя ваш пример выше....

Если бы у вас было значение в F4, как бы вы включили значение F4 в электронное письмо, которое было создано при изменении D4??
Этот комментарий был сведен к минимуму модератором на сайте
если я должен отправить всю эту строку тогда?
Этот комментарий был сведен к минимуму модератором на сайте
Я пробовал выше код VBA: отправить электронное письмо, если ячейка в указанном диапазоне изменена в Excel. Этот VBA работает для меня, кроме отправки электронной почты. Когда данные изменяются в заданном диапазоне, автоматически создается электронное письмо с измененными данными ячейки. Однако электронное письмо не отправляется автоматически получателю, и пользователь должен нажать кнопку отправки в электронном письме. Я смотрю здесь, электронная почта должна автоматически отправляться получателям при ее создании. Пожалуйста, помогите мне предоставить код для этого. Большое спасибо
Этот комментарий был сведен к минимуму модератором на сайте
Привет, Джимми Джозеф,
Пожалуйста, замените строку ".Display" на ".Send". Надеюсь, я смогу помочь. Спасибо за комментарий.
Этот комментарий был сведен к минимуму модератором на сайте
Привет; есть ли способ изменить отображаемый текст, используя информацию из других ячеек (из первой строки и первого столбца)? например, если я изменяю ячейку K15, я хочу включить в сообщение информацию о ячейках A15 и K1? что мне изменить в коде? большое спасибо
Этот комментарий был сведен к минимуму модератором на сайте
привет Лаона. узнать, как это сделать?
Этот комментарий был сведен к минимуму модератором на сайте
Привет. Как изменить код, чтобы электронное письмо отправлялось на другой адрес электронной почты, если редактируется другой диапазон ячеек?
Этот комментарий был сведен к минимуму модератором на сайте
Любая помощь по этому запросу? У меня такая же проблема. Я хочу добавить несколько адресов электронной почты в строку, но когда я меняю одну строку, меняется весь рабочий лист. Как я могу ограничить изменения только одной строкой?
Этот комментарий был сведен к минимуму модератором на сайте
Редактировать строку:
1). В коде A2:E11 — это диапазон, на основе которого вы будете отправлять электронную почту.
и
3). Замените адрес электронной почты адресом электронной почты получателя в строке .To = "Адрес электронной почты".

Работает отлично.
Этот комментарий был сведен к минимуму модератором на сайте
Не могли бы вы объяснить это дальше. Как вы повторяете код для отправки на другой адрес электронной почты на основе изменения другого диапазона. Я попытался скопировать и вставить приведенный ниже код и изменить его в соответствии с вашим комментарием, но, похоже, только первый диапазон выполняет команду и пишет электронное письмо.
Этот комментарий был сведен к минимуму модератором на сайте
Есть ли у кого-нибудь на это ответ?
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте, я пытался отправить электронные письма на свой лист, используя одно значение, измененное на листе. Если в столбце H статус будет изменен на ="4", идентификатор заказа слева должен быть отправлен одному пользователю. Лист работает динамически, поэтому у меня есть диапазон от D9: D140, где хранятся идентификаторы заказов, а изменения статуса выполняются в том же диапазоне на H9: H140. Как я могу достичь цели, чтобы сделать это и отправить идентификатор заказа моему клиенту, когда статус был изменен на = "4"?
Этот комментарий был сведен к минимуму модератором на сайте
Можно ли отображать другую ссылочную ячейку в xMailBody в том же столбце вместо модифицированных адресов ячеек?
Этот комментарий был сведен к минимуму модератором на сайте
Привет, Сэм. Вы имеете в виду случайный выбор ссылочной ячейки в том же столбце измененного адреса ячейки? Или вручную ввести ссылочную ячейку в строке xMailBody кода? Легко вручную ввести ссылочную ячейку в коде, просто заключите ссылочную ячейку в двойные кавычки, как показано ниже: xMailBody = "Cell(s)" & "D3" & ", " & "D8" & _

Этот комментарий был сведен к минимуму модератором на сайте
Можно ли изменить это так, чтобы электронная почта отображалась только в том случае, если ячейка в диапазоне была изменена, чтобы сказать «Да». Хотелось бы, чтобы он ничего не делал, если это любое другое значение.
Этот комментарий был сведен к минимуму модератором на сайте
Спасибо за код, этот код работает, когда я ввожу значение и нажимаю ввод. Но в моем случае ячейка автоматически заполняется формулой, и когда значение достигнуто, электронное письмо не открывается, поэтому код в этом случае не работает. Заранее спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Привет Хакана,
Следующий код VBA может помочь вам решить проблему. Пожалуйста, попробуйте. Спасибо за ваш отзыв.

Private Sub Worksheet_Change (Цель ByVal как диапазон)
'Обновлено Extendoffice 2022/04/15
Dim xRgSel как диапазон
Dim xOutApp как объект
Dim xMailItem как объект
Dim xMailBody как строка
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs как диапазон
On Error Resume Next
Приложение.ScreenUpdating = False
Приложение.DisplayAlerts = False
xBoolean = Ложь
Установите xRg = диапазон ("E2: E13")

Установите xItsRG = Intersect (Цель, xRg)
Установите xDDs = Intersect (Target.DirectDependents, xRg)
Установите xDs = Intersect (Target.Dependents, xRg)
Если нет (xItsRG ничего не значит), то
Установить xRgSel = xItsRG
xBoolean = Истина
ИначеЕсли Нет (xDD ничего не значит), то
Установите xRgSel = xDDs
xBoolean = Истина
ElseIf Not (xDs Is Nothing) Then
Установите xRgSel = xDs
xBoolean = Истина
End If


ActiveWorkbook.Save
Если xBoolean Тогда
Debug.Print xRgSel.Address


Установите xOutApp = CreateObject("Outlook.Application")
Установить xMailItem = xOutApp.CreateItem(0)
xMailBody = "Ячейка (я)" & xRgSel.Address(False, False) & _
" на листе '" & Me.Name & "' были изменены на " & _
Формат$(Теперь, "мм/дд/гггг") & " at " & Формат$(Теперь, "чч:мм:сс") & _
" by " & Environ$("имя пользователя") & "."

С xMailItem
.To = "Адрес электронной почты"
.Subject = "Рабочий лист изменен в" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Отображать
Конец с
Установить xRgSel = Ничего
Установите xOutApp = Ничего
Установить xMailItem = Ничего
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте, я создал аналогичный код, но я хотел бы *** условие, при котором, если значение ячейки удалено, оно не будет отправлять электронное письмо при сохранении/закрытии. Он будет отправлять электронное письмо только после ввода значения ячейки. Вы знаете, как это сделать? Это мой код:

КОД ДЛЯ АВТОМАТИЧЕСКОЙ ЭЛЕКТРОННОЙ ПОЧТЫ ПРИ ОБНОВЛЕНИИ КНИГИ EXCEL

КОД ЛИСТА:

Option Explicit 'Диапазон событий изменения рабочего листа Excel
Private Sub Worksheet_Change (ByVal Target As Range)
Если Не пересекаться(Цель, Диапазон("C3:D62")) Ничего, Тогда
'Цель.EntireRow.Interior.ColorIndex = 15
Диапазон ("XFD1048576"). Значение = 15
End If
Если Не Пересекать(Цель, Диапазон("I3:J21")) Ничего, Тогда
'Цель.EntireRow.Interior.ColorIndex = 15
Диапазон ("XFD1048576"). Значение = 15
End If
End Sub


КОД РАБОЧЕЙ ТЕТРАДИ:

Private Sub Workbook_BeforeClose (Отменить как логическое)
Если Me.Saved = False, то Me.Save

Dim xOutApp как объект
Dim xMailItem как объект
Dim xName как строка

Если Диапазон("XFD1048576").Значение = 15 Тогда
On Error Resume Next
Установите xOutApp = CreateObject("Outlook.Application")
Установить xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.ПолноеИмя
С xMailItem
.Кому = "электронная почта"
.CC = ""
.Тема = "сообщение"
.Body = "сообщение!"
.Приложения.*** xName
.Отображать
'.Отправить
Конец с
End If
Установить xMailItem = Ничего
Установите xOutApp = Ничего



End Sub

Private Sub Workbook_Open ()
Диапазон("XFD1048576").Очистить
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Привет всем,

der Code würde gut für mein Vorhaben passen, aber gibt es die Möglichkeit, dass er eine E-Mail beim speichern schreibt mit allen Zellen die geändert wurden? So wie es jetzt ist, würde er jede geänderte Zelle einzeln senden. Dies ist dann Problematisch Wenn zB 10 Zellen angepasst werden was 10 E-Mails bedeuten würde. Und gibt es die Möglichkeit, die gesamte geänderte Zelle bei mir von A bis Y in einer E-Mail zu senden? Bisher haut der ja die Zellnummer in die E-Mail, wenn aber jemand Anders Filtert wird er die Änderung nicht mehr finden.
Этот комментарий был сведен к минимуму модератором на сайте
Привет Эссер123,
Следующие коды VBA могут помочь. После изменения ячеек в указанном диапазоне и сохранения рабочей книги появится всплывающее сообщение электронной почты со списком всех измененных ячеек в теле электронной почты, и рабочая книга также будет вставлена ​​в электронное письмо в виде вложения. Пожалуйста, выполните следующие действия:
1. Откройте рабочий лист, содержащий ячейки, на основе которых вы хотите отправлять электронные письма, щелкните правой кнопкой мыши вкладку листа и выберите Просмотреть код из контекстного меню. Затем скопируйте следующий код в окно листа (кода).
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220921
Dim xAddress As String
Dim xDRg, xRgSel, xRg As Range

xAddress = "A1:A8"
Set xDRg = Range(xAddress)
Set xRgSel = Intersect(Target, xDRg)
On Error GoTo Err1
If Not xRgSel Is Nothing Then
If ThisWorkbook.gChangeRange = "" Then
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Else
Set xRg = Range(ThisWorkbook.gChangeRange)
Set xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
End If
End If
Exit Sub
Err1:
      ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub

2. В редакторе Visual Basic дважды щелкните Эта рабочая тетрадь на левой панели, затем скопируйте следующий код VBA в ThisWorkbook (Код) окно.
Option Explicit
Public gChangeRange As String
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
'On Error Resume Next
On Error GoTo Err1
Set xRg = Range(gChangeRange)
If Not xRg Is Nothing Then
   Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Email Body: " & vbCrLf & "The following cells were modified:" & xRg.Address(False, False)
        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
End If
Err1:
gChangeRange = ""
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Мне нужна помощь с запуском электронной почты с небольшим изменением. Вместо числового значения или ввода информации в ячейку вручную ячейки в столбце B изменятся на «Y», вызванные формулой в других ячейках этой строки. Формула для столбца B: =IF([@[Количество на складе]]>[@[Уровень повторного заказа]],,"Y"), показывает, что запасов мало на складе и требуется повторный заказ. Мне нужно вызвать автоматическое электронное письмо, когда значение ячейки в столбце B изменится на «Y», поэтому я автоматически уведомляюсь по электронной почте о низком запасе. Я перепробовал все, что мог придумать для изменения уже предоставленных кодов, но, похоже, у меня ничего не работает... пожалуйста, помогите!
Этот комментарий был сведен к минимуму модератором на сайте
Привет Кэтрин Ф,
Следующий код VBA может помочь вам решить проблему. Пожалуйста, попробуйте. Спасибо за ваш комментарий.
Dim xRg As Range
'Update by Extendoffice 20221019
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("B:B"), Target)
If xRg Is Nothing Then Exit Sub
If Target.Value = "Y" 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

Private Sub Worksheet_Calculate()
Dim xTarget As String
Dim xRg As Range
'Set xRg = Application.Range("B:B")
Set xRg = Intersect(Range("B:B"), Selection.EntireRow)
On Error GoTo Err01
If xRg.Value = "Y" Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Привет и спасибо за этот учебник.
J'ai cependant une hardé pour l'application de la plage de recherche.
По коду, требуемому для проверки пляжа C2:C4.
Tout fonctionne bien si je modifie C2, C3 или C4 уникален. Cela fonctionne aussi si je modifie C2+C3+C4 ou C2+C3 ou C3+C4 mais cela ne fonctionne pas si j'ai un saut dans la plage. Например, с модификатором C2 и C4 без модификатора C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur?
Merci d'Avance.

Private Sub Worksheet_Change (ByVal Target As Range)
'Обновлено Extendoffice 20220921
Dim xAddress как строка
Dim xDRg, xRgSel, xRg As Range

xAddress = "C2:C4"
Установите xDRg = диапазон (xAddress)
Установите xRgSel = Intersect (Цель, xDRg)
При ошибке Перейти к Err1
Если не xRgSel, то ничто
Если ThisWorkbook.gChangeRange = "" Тогда
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Еще
Установите xRg = диапазон (ThisWorkbook.gChangeRange)
Установите xRg = Application.Union (xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
End If
End If
Exit Sub
Ошибка1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub


-----

Вариант Явный
Публичный gChangeRange как строка
Частная подпрограмма Workbook_AfterSave (успех ByVal как логическое значение)
'Обновлено Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp как объект
Dim xMailItem как объект
Dim xMailBody как строка
'При ошибке возобновить дальше
При ошибке Перейти к Err1
Установите xRg = диапазон (gChangeRange)
Если не xRg - ничто, то
Установите xOutApp = CreateObject("Outlook.Application")
Установить xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cher Jean-Marie," & vbCrLf & vbCrLf & "Dans le fichier:" & ThisWorkbook.FullName & vbCrLf & "La plage de cellules a été modifiee:" & xRg.Address(False, False) & vbCrLf & vbCrLf & "Радость"
С xMailItem
.To = "x.xxxxxx@xxxx.fr"
.Subject = "Изменения Données" & ThisWorkbook.Name
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Отображать
Конец с
Установить xRgSel = Ничего
Установите xOutApp = Ничего
Установить xMailItem = Ничего
End If
Ошибка1:
gChangeRange = ""
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Я хотел бы отправить электронное письмо 5 людям. Какой разделитель используется между каждым адресом электронной почты?
Этот комментарий был сведен к минимуму модератором на сайте
Привет Джо,
Используйте точку с запятой для разделения адресов электронной почты.
Этот комментарий был сведен к минимуму модератором на сайте
Вот еще вопрос. Если одна ячейка изменяется, она отправляет электронное письмо. если 3 ячейки меняются, он отправляет 3 письма. Как вы остановите это, чтобы оно отправляло только 1 электронное письмо, когда изменения сделаны?
Этот комментарий был сведен к минимуму модератором на сайте
Привет Джо,
Предположим, вы указали в коде диапазон как "A2:E11". Как я могу проверить, когда все правки сделаны?
Здесь еще нет комментариев
Оставляйте свои комментарии
Публикация как гость
×
Оценить этот пост:
0   Характеристики
Предлагаемые места

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

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