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

Jak wysłać wiadomość e-mail, jeśli określona komórka zostanie zmodyfikowana w programie Excel?

W tym artykule omówiono wysyłanie wiadomości e-mail za pośrednictwem programu Outlook, gdy komórka z określonego zakresu jest modyfikowana w programie Excel.

Wyślij wiadomość e-mail, jeśli komórka w określonym zakresie zostanie zmodyfikowana kodem VBA


Wyślij wiadomość e-mail, jeśli komórka w określonym zakresie zostanie zmodyfikowana kodem VBA

Jeśli chcesz automatycznie utworzyć nową wiadomość e-mail z dołączonym aktywnym skoroszytem, ​​gdy komórka z zakresu A2: E11 zostanie zmodyfikowana w określonym arkuszu, poniższy kod VBA może ci pomóc.

1. W arkuszu, do którego chcesz wysłać wiadomość e-mail na podstawie zmodyfikowanej komórki w określonym zakresie, kliknij prawym przyciskiem myszy kartę arkusza, a następnie kliknij Wyświetl kod z menu kontekstowego. Zobacz zrzut ekranu:

2. W wyskakującym okienku Microsoft Visual Basic for Applications należy skopiować i wkleić poniższy kod VBA do okna kodu.

Kod VBA: wyślij wiadomość e-mail, jeśli komórka w określonym zakresie zostanie zmodyfikowana w programie 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

Uwagi:

1). W kodzie A2: E11 to zakres, na podstawie którego wyślesz e-mail.
2). Zmień treść wiadomości e-mail zgodnie z potrzebą xMailBody wiersz w kodzie.
3). Zastąp Adres e-mail z adresem e-mail odbiorcy .To = "Adres e-mail".
4). Zmień temat wiadomości e-mail w wierszu .Subject = "Arkusz roboczy zmodyfikowany w" & ThisWorkbook.FullName.

3. wciśnij inny + Q klawisze jednocześnie, aby zamknąć Microsoft Visual Basic for Applications okno.

Odtąd dowolna komórka w zakresie A2: E11 zostanie zmodyfikowana, zostanie utworzony nowy e-mail z załączonym zaktualizowanym skoroszytem. Wszystkie określone pola, takie jak temat, odbiorca i treść wiadomości e-mail, zostaną wymienione w wiadomości e-mail. Proszę wysłać e-mail.

Uwagi: Kod VBA działa tylko wtedy, gdy używasz Outlooka jako programu pocztowego.


Podobne artykuły:


Najlepsze narzędzia biurowe

Kutools dla programu Excel rozwiązuje większość problemów i zwiększa produktywność o 80%

  • Ponowne użycie: Szybko włóż złożone wzory, wykresy i wszystko, czego używałeś wcześniej; Szyfruj komórki z hasłem; Utwórz listę mailingową i wysyłaj e-maile ...
  • Pasek Super Formula (łatwo edytować wiele wierszy tekstu i formuły); Układ do czytania (łatwe odczytywanie i edytowanie dużej liczby komórek); Wklej do filtrowanego zakresu...
  • Scal komórki / wiersze / kolumny bez utraty danych; Podziel zawartość komórek; Połącz zduplikowane wiersze / kolumny... Zapobiegaj zduplikowanym komórkom; Porównaj zakresy...
  • Wybierz Duplikat lub Unikalny Wydziwianie; Wybierz puste wiersze (wszystkie komórki są puste); Super Find i Fuzzy Find w wielu zeszytach ćwiczeń; Losowy wybór ...
  • Dokładna kopia Wiele komórek bez zmiany odwołania do formuły; Automatyczne tworzenie odniesień do wielu arkuszy; Wstaw punktory, Pola wyboru i nie tylko ...
  • Wyodrębnij tekst, Dodaj tekst, Usuń według pozycji, Usuń przestrzeń; Tworzenie i drukowanie podsumowań stronicowania; Konwertuj zawartość komórek i komentarze...
  • Super filtr (zapisz i zastosuj schematy filtrów do innych arkuszy); Zaawansowane sortowanie według miesiąca / tygodnia / dnia, częstotliwości i innych; Specjalny filtr pogrubieniem, kursywą ...
  • Połącz skoroszyty i arkusze robocze; Scal tabele na podstawie kluczowych kolumn; Podziel dane na wiele arkuszy; Konwersja wsadowa xls, xlsx i PDF...
  • Ponad 300 zaawansowanych funkcji. Obsługuje Office / Excel 2007-2021 i 365. Obsługuje wszystkie języki. Łatwe wdrażanie w przedsiębiorstwie lub organizacji. Pełne funkcje 30-dniowa bezpłatna wersja próbna. 60-dniowa gwarancja zwrotu pieniędzy.
karta kte 201905

Karta Office wprowadza interfejs z zakładkami do pakietu Office i znacznie ułatwia pracę

  • Włącz edycję i czytanie na kartach w programach Word, Excel, PowerPoint, Publisher, Access, Visio i Project.
  • Otwieraj i twórz wiele dokumentów w nowych kartach tego samego okna, a nie w nowych oknach.
  • Zwiększa produktywność o 50% i redukuje setki kliknięć myszką każdego dnia!
officetab dół
Sortuj komentarze według
Komentarze (37)
Brak ocen. Oceń jako pierwszy!
Ten komentarz został zminimalizowany przez moderatora na stronie
Utknąłem w poniższym kodzie VB. Próbuję otrzymać powiadomienie e-mailem do użytkownika, w którym dane zostały zmienione. Poczta e-mail działa, ale po wprowadzeniu zmian e-mail zainicjowanych od razu, ale chcę otrzymać wiadomość e-mail, gdy arkusz Excela zostanie zapisany i zamknięty po wprowadzeniu wszystkich zmian do wszystkich użytkowników, których dotyczy. Powinno to również działać dla dowolnego arkusza w całym skoroszycie programu Excel.

Proszę o pomoc ...

Private Sub Workbook_BeforeSave (ByVal SaveAsUI jako Boolean, Anuluj jako Boolean)

'****Deklaracja obiektów i zmiennych******

Dim xRgSel jako zakres Dim xOutApp jako obiekt Dim xMailItem jako obiekt Dim xMailBody jako ciąg Dim mailTo jako ciąg

On Error Resume Next

Arkusze("TargetSheet").Range("TargetRange").Wybierz

Application.ScreenUpdating = Fałsz Application.DisplayAlerts = Fałsz

'Ustaw xRg = Range("A" & Rows.Count).End(xlUp).Row

Ustaw xRg = Zakres("A2:DA1000")
Ustaw xRgSel = Przecięcie (cel, xRg)


ActiveWorkbook.Save
'**********Otwieranie aplikacji Outlook***********

Jeśli nie xRgSel jest niczym, to

Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xMailItem = xOutApp.CreateItem(0)

xMailBody = "Komórki" & xRgSel.Address (Fałsz, Fałsz) & _
„ w arkuszu „” & Me.Name & „” zostały zmodyfikowane w dniu „ & _
Format$(Teraz, "mm/dd/rrrr") & " o " & Format$(Teraz "hh:mm:ss") & _
" by " & Environ$("nazwa użytkownika") & "."
'*************Znajdowanie listy odbiorców*************

If Cells(xRgSel.Row, "A").Value = "Pankaj" Wtedy

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

End If

If Cells(xRgSel.Row, "A").Value = "Nitin" Then

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

End If

If Cells(xRgSel.Row, "A").Value = "Chandan" Then

mailTo = "pakxro**@gmail.com"

End If
'***************Tworzenie wiadomości e-mail*************

Z xMailItem

.Do = pocztaDo
.Subject = "Arkusz roboczy zmodyfikowany w" & ThisWorkbook.FullName
.Body = xMailBody
'.Attachments.Add (ThisWorkbook.FullName)
.Pokaz

Kończyć z

Ustaw xRgSel = Nic
Ustaw xOutApp = Nic
Ustaw xMailItem = Nic

End If

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Pankaju Shukla,
Opublikuj swoje pytanie dotyczące programu Excel na naszym forum: https://www.extendoffice.com/forum.html aby uzyskać więcej wsparcia na temat programu Excel od naszego specjalisty ds. Excela.
Ten komentarz został zminimalizowany przez moderatora na stronie
Udało mi się stworzyć makro, jednak mam problem. Chciałbym automatycznie wysłać wiadomość e-mail, gdy komórka osiągnie określony próg. Komórka to formuła. Kiedy suma obliczeniowa spadnie poniżej wspomnianego progu, nic nie robi; jeśli jednak wpiszę bezpośrednio do komórki, makro przetworzy zgodnie z planem. Czy formuła psuje makro?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Sissy Jones,
Metoda opisana w tym artykule: Jak automatycznie wysyłać wiadomości e-mail na podstawie wartości komórki w programie Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html może pomóc w rozwiązaniu problemu.
Ten komentarz został zminimalizowany przez moderatora na stronie
Szanowny Admin,


Potrzebuję twojej pomocy,



Mam excela do monitorowania szczegółów codziennej pracy wykonanej przez naszego pracownika w terenie, więc czy jest to możliwe, aby wywołać pocztę z arkusza Excela, jeśli ten facet nie zaktualizował danych w tym arkuszu Excela w określonym czasie.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,
Nie mogę w tym pomóc.
Ten komentarz został zminimalizowany przez moderatora na stronie
Jeśli chcę wysłać wartość komórki zamiast adresu... to co mam zmienić w kodzie?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,
Możesz wypróbować poniższy kod VBA.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Dim xRgSel jako zakres
Dim xOutApp jako obiekt
Dim xMailItem jako obiekt
Dim xMailBody jako ciąg
On Error Resume Next
Application.ScreenUpdating = Fałsz
Application.DisplayAlerts = False
Ustaw xRg = Zakres("A2:E11")
Ustaw xRgSel = Przecięcie (cel, xRg)
ActiveWorkbook.Save
Jeśli nie xRgSel jest niczym, to
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xMailItem = xOutApp.CreateItem(0)
xMailBody = "Komórki" & xRgSel.Address (Fałsz, Fałsz) & _
xRgSel.Wartość i _
„ w arkuszu „” & Me.Name & „” zostały zmodyfikowane w dniu „ & _
Format$(Teraz, "mm/dd/rrrr") & " o " & Format$(Teraz "hh:mm:ss") & _
" by " & Environ$("nazwa użytkownika") & "."

Z xMailItem
.To = "Adres e-mail"
.Subject = "Arkusz roboczy zmodyfikowany w" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Pokaz
Kończyć z
Ustaw xRgSel = Nic
Ustaw xOutApp = Nic
Ustaw xMailItem = Nic
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Co jeśli chcemy tylko zaktualizowanych komentarzy w tej komórce, a nie całej wartości komórki Powinna ona pokazywaćtylko najnowsze komentarze dodane w komórce
Ten komentarz został zminimalizowany przez moderatora na stronie
Zrozumiałeś to?
Ten komentarz został zminimalizowany przez moderatora na stronie
Świetna informacja.
Pytanie dotyczące informacji, które można dodać do e-maila.
Korzystając z powyższego przykładu....

Gdybyś miał wartość w F4, jak uwzględniłbyś wartość F4 w wiadomości e-mail, która została wygenerowana po zmodyfikowaniu D4?
Ten komentarz został zminimalizowany przez moderatora na stronie
jeśli mam wysłać cały rząd?
Ten komentarz został zminimalizowany przez moderatora na stronie
Wypróbowałem powyższy kod VBA: wyślij wiadomość e-mail, jeśli komórka w określonym zakresie zostanie zmodyfikowana w programie Excel. Ten VBA działa dla mnie z wyjątkiem wysyłania wiadomości e-mail. Gdy dane są modyfikowane w podanym zakresie, automatycznie generowany jest e-mail ze zmodyfikowanymi szczegółami komórki. Jednak wiadomość e-mail nie jest automatycznie wysyłana do odbiorcy i użytkownik musi kliknąć przycisk wyślij w wiadomości e-mail. Czego tutaj szukam, to wiadomość e-mail musi zostać wysłana do odbiorców automatycznie po wygenerowaniu. Pomóż mi podać kod do tego. Wielkie dzięki
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Jimmy Joseph,
Zamień wiersz „.Display” na „.Send”. Mam nadzieję, że mogę pomóc. Dzięki za komentowanie.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć; czy istnieje sposób na zmianę wyświetlanego tekstu przy użyciu informacji z innych komórek (z pierwszego wiersza i pierwszej kolumny)? na przykład, jeśli zmienię komórkę K15, chcę dołączyć do wiadomości informacje o komórkach A15 i K1? co powinienem zmienić w kodzie? dziękuję bardzo
Ten komentarz został zminimalizowany przez moderatora na stronie
cześć Laona. dowiesz się, jak to zrobić?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć. Jak zmodyfikować kod, aby wiadomość e-mail była wysyłana na inny adres e-mail w przypadku edycji innego zakresu komórek?
Ten komentarz został zminimalizowany przez moderatora na stronie
Jakaś pomoc w tej prośbie? Mam ten sam problem. Chcę dodać wiele adresów e-mail w wierszu, ale gdy zmienię jeden wiersz, zmieni się cały arkusz. Jak mogę ograniczyć zmiany tylko do jednego wiersza?
Ten komentarz został zminimalizowany przez moderatora na stronie
Edytuj linię:
1). W kodzie A2: E11 to zakres, na podstawie którego wyślesz e-mail.
i
3). Zastąp adres e-mail adresem e-mail odbiorcy w wierszu .To = „Adres e-mail”.

Działa w porządku.
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy możesz wyjaśnić to dalej. Jak powtórzyć kod do wysłania na inny e-mail na podstawie innego modyfikowanego zakresu. Próbowałem skopiować i wkleić poniższy kod i zmienić go zgodnie z twoim komentarzem, ale nadal tylko pierwszy zakres wydaje się wykonywać polecenie i pisać e-mail.
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy ktoś ma na to odpowiedź?
Ten komentarz został zminimalizowany przez moderatora na stronie
Witam, próbowałem wysłać e-maile na moim arkuszu, używając jednej wartości zmienionej w arkuszu. Jeśli w kolumnie H status zmieni się na ="4" ID zamówienia po lewej stronie należy przesłać do jednego użytkownika. Arkusz działa dynamicznie, więc mam zakres od D9:D140, w którym przechowywane są identyfikatory zamówień, a zmiany statusu są dokonywane w tym samym zakresie na H9:H140. Jak mogę osiągnąć cel, aby to zrobić i wysłać identyfikator zamówienia do mojego klienta, gdy status został zmieniony na ="4"?
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy byłoby możliwe wyświetlenie innej komórki referencyjnej w xMailBody w tej samej kolumnie zamiast zmodyfikowanego adresu komórki?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Sam, Czy masz na myśli losowe wybranie komórki referencyjnej w tej samej kolumnie zmodyfikowanego adresu komórki? Lub ręcznie wpisać komórkę referencyjną w linii kodu xMailBody? Łatwo jest ręcznie wpisać komórkę referencyjną w kodzie, po prostu zamknij komórkę odniesienia podwójnymi cudzysłowami, jak pokazano poniżej: xMailBody = "Cell(s)" & "D3" & ", " & "D8" i _

Ten komentarz został zminimalizowany przez moderatora na stronie
Czy można to zmienić, aby wyświetlał wiadomość e-mail tylko wtedy, gdy komórka w zakresie została zmieniona na „Tak”. Chciałbym, żeby nic nie robiło, jeśli jest to jakakolwiek inna wartość.
Ten komentarz został zminimalizowany przez moderatora na stronie
Dziękuję za kod, ten kod działa jak wpisuję wartość i wciskam enter. Ale w moim przypadku komórka wypełnia się automatycznie formułą, a po osiągnięciu wartości nie otwiera się e-mail, więc kod w tym przypadku nie działa. Z góry dziękuję!
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć hakano,
Poniższy kod VBA może pomóc w rozwiązaniu problemu. Proszę spróbować. Dziękujemy za twoją opinię.

Private Sub Worksheet_Change (ByVal Target As Range)
'Aktualizowany przez Extendoffice 2022 / 04 / 15
Dim xRgSel jako zakres
Dim xOutApp jako obiekt
Dim xMailItem jako obiekt
Dim xMailBody jako ciąg
Dim xBoolean Jako wartość logiczna
Dim xItsRG jako zakres
Przyciemnij xDD jako zakres
Dim xDs jako zakres
On Error Resume Next
Application.ScreenUpdating = Fałsz
Application.DisplayAlerts = False
xBoolean = Fałsz
Ustaw xRg = Zakres("E2:E13")

Ustaw xItsRG = Przecięcie (cel, xRg)
Ustaw xDDs = Intersect(Target.DirectDependents, xRg)
Ustaw xDs = Intersect(Target.Dependents, xRg)
Jeśli nie (xItsRG to nic), to
Ustaw xRgSel = xItsRG
xBoolean = Prawda
W przeciwnym razie (xDD to nic) Wtedy
Ustaw xRgSel = xDDs
xBoolean = Prawda
W przeciwnym razie (xDs to nic) Wtedy
Ustaw xRgSel = xDs
xBoolean = Prawda
End If


ActiveWorkbook.Save
Jeśli xBoolean Wtedy
Debug.Drukuj xRgSel.Adres


Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xMailItem = xOutApp.CreateItem(0)
xMailBody = "Komórki" & xRgSel.Address (Fałsz, Fałsz) & _
„ w arkuszu „” & Me.Name & „” zostały zmodyfikowane w dniu „ & _
Format$(Teraz, "mm/dd/rrrr") & " o " & Format$(Teraz "hh:mm:ss") & _
" by " & Environ$("nazwa użytkownika") & "."

Z xMailItem
.To = "Adres e-mail"
.Subject = "Arkusz roboczy zmodyfikowany w" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Pokaz
Kończyć z
Ustaw xRgSel = Nic
Ustaw xOutApp = Nic
Ustaw xMailItem = Nic
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Witam, stworzyłem podobny kod, ale chciałbym *** warunek, w którym jeśli wartość komórki zostanie usunięta, to nie wyśle ​​​​wiadomości e-mail po jej zapisaniu/zamknięciu. Wysyła wiadomość e-mail tylko po wprowadzeniu wartości komórki. Czy wiesz, jak to zrobić? Oto mój kod:

KOD DLA AUTOMATYCZNEGO E-MAILA DO KOGOŚ, KIEDY SKOROSZYT EXCEL JEST AKTUALIZOWANY

KOD ARKUSZY:

Opcja Jawna 'Zakres zdarzeń zmiany arkusza Excel'
Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli nie przecina(cel, zakres("C3:D62")) jest niczym wtedy
'Cel.Cały wiersz.Wnętrze.Wskaźnik koloru = 15
Zakres("XFD1048576").Wartość = 15
End If
Jeśli nie przecina(cel, zakres("I3:J21")) jest niczym wtedy
'Cel.Cały wiersz.Wnętrze.Wskaźnik koloru = 15
Zakres("XFD1048576").Wartość = 15
End If
End Sub


KOD SKOROSZYTU:

Prywatny skoroszyt pomocniczy_BeforeClose (Anuluj jako Boolean)
Jeśli ja.zapisany = Fałsz, to ja.zapisz

Dim xOutApp jako obiekt
Dim xMailItem jako obiekt
Dim xName jako ciąg

Jeśli zakres("XFD1048576").Value = 15 Wtedy
On Error Resume Next
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xMailItem = xOutApp.CreateItem(0)
xName = Aktywny skoroszyt.Pełna nazwa
Z xMailItem
.Do = "e-mail"
.CC = „”
.Temat = "wiadomość"
.Body = "wiadomość!"
.Załączniki.*** xName
.Pokaz
'.wysłać
Kończyć z
End If
Ustaw xMailItem = Nic
Ustaw xOutApp = Nic



End Sub

Private Sub Workbook_Open ()
Zakres ("XFD1048576"). Wyczyść
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Witam wszystkich,

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.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Esser123,
Pomocne mogą być następujące kody VBA. Po zmodyfikowaniu komórek w określonym zakresie i zapisaniu skoroszytu pojawi się wiadomość e-mail z listą wszystkich zmodyfikowanych komórek w treści wiadomości e-mail, a skoroszyt zostanie również wstawiony jako załącznik do wiadomości e-mail. Wykonaj następujące kroki:
1. Otwórz arkusz roboczy zawierający komórki, na podstawie których chcesz wysyłać wiadomości e-mail, kliknij prawym przyciskiem myszy kartę arkusza i kliknij Wyświetl kod z menu prawego przycisku myszy. Następnie skopiuj następujący kod do okna sheet(code).
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. W edytorze Visual Basic kliknij dwukrotnie Ten zeszyt w lewym okienku, a następnie skopiuj następujący kod VBA do ThisWorkbook (kod) okno.
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
Ten komentarz został zminimalizowany przez moderatora na stronie
Potrzebuję pomocy przy uruchamianiu wiadomości e-mail z niewielką zmianą. Zamiast wartości liczbowej lub ręcznego wprowadzania informacji do komórki, komórki w kolumnie B zmienią się na „Y” wyzwolone z formuły w innych komórkach w tym wierszu. Formuła dla kolumny B to =JEŻELI([@[Ilość w magazynie]]>[@[Poziom ponownego zamówienia]],,"Y"), co oznacza, że ​​zapasy są na wyczerpaniu i wymagają ponownego zamówienia. Muszę wyzwolić automatyczną wiadomość e-mail, gdy wartość komórki w kolumnie B zmieni się na „Y”, więc jestem automatycznie powiadamiany e-mailem o niskim stanie zapasów. Próbowałem wszystkiego, co przychodziło mi do głowy, zmieniając już dostarczone kody, ale wydaje się, że nic nie działa dla mnie ... proszę o pomoc!
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Kathryn F,
Poniższy kod VBA może pomóc w rozwiązaniu problemu. Proszę spróbować. Dziękuję za Twój komentarz.
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
Ten komentarz został zminimalizowany przez moderatora na stronie
Witam i dziękuję za ten samouczek.
J'ai cependant unetrudne pour l'aplikacja de la plage de recherche.
Dans le code, j'ai demandé à vérifier la plage C2:C4.
Tout fonctionne bien si je modifie C2, C3 lub C4 uniquement. Cela fonctionne aussi si je modifie C2+C3+C4 lub C2+C3 lub C3+C4 mais cela ne fonctionne pas si j'ai un saut dans la plage. Na przykład, si je modify C2 et C4 bez modyfikatora C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur ?
Z góry dziękuję.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
'Aktualizowany przez Extendoffice 20220921
Dim xAddress jako ciąg
Dim xDRg, xRgSel, xRg jako zakres

xAdres = "C2:C4"
Ustaw xDRg = Zakres (xAdres)
Ustaw xRgSel = Przecięcie (cel, xDRg)
W przypadku błędu Przejdź do Err1
Jeśli nie xRgSel jest niczym, to
Jeśli ThisWorkbook.gChangeRange = "" Wtedy
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(Fałsz, Fałsz, xlA1, Prawda, Fałsz)
Więcej
Ustaw xRg = Zakres(ThisWorkbook.gChangeRange)
Ustaw xRg = Aplikacja.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(Fałsz, Fałsz, xlA1, Prawda, Fałsz)
End If
End If
Exit Sub
Błąd1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(Fałsz, Fałsz, xlA1, Prawda, Fałsz)
End Sub


-----

Opcja Jawna
Publiczna gChangeRange jako ciąg
Private Sub Workbook_AfterSave (ByVal Success as Boolean)
'Aktualizowany przez Extendoffice 20220921
Dim xRgSel, xRg jako zakres
Dim xOutApp jako obiekt
Dim xMailItem jako obiekt
Dim xMailBody jako ciąg
„Po błędzie wznowienia Dalej”
W przypadku błędu Przejdź do Err1
Ustaw xRg = Zakres (gZmieńZakres)
Jeśli nie xRg jest niczym, to
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cher Jean-Marie, " & vbCrLf & vbCrLf & "Dans le fichier : " & ThisWorkbook.FullName & vbCrLf & "La plage de cellules a été modifiée :" & xRg.Address(False, vbCrLf & vbCrLf) & & "Cordiament"
Z xMailItem
.Do = "x.xxxxxx@xxxx.fr"
.Subject = "Modyfikacje Données " & ThisWorkbook.Name
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Pokaz
Kończyć z
Ustaw xRgSel = Nic
Ustaw xOutApp = Nic
Ustaw xMailItem = Nic
End If
Błąd1:
gZmieńZakres = ""
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Chciałbym wysłać maila do 5 osób. Jaki separator jest używany między każdym adresem e-mail?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Joe,
Użyj średnika, aby oddzielić adresy e-mail.
Ten komentarz został zminimalizowany przez moderatora na stronie
Oto kolejne pytanie. Jeśli zmieni się jedna komórka, wysyła wiadomość e-mail. jeśli zmienią się 3 komórki, wysyła 3 e-maile. Jak to zatrzymać, aby po zakończeniu edycji wysyłał tylko jednego e-maila?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Joe,
Załóżmy, że w kodzie określiłeś zakres jako „A2:E11”. Jak mogę sprawdzić, kiedy wszystkie zmiany zostały zakończone?
Nie ma tu jeszcze żadnych komentarzy
Zostaw swój komentarz
Publikowanie jako gość
×
Oceń ten post:
0   Postacie
Sugerowane lokalizacje

Bądż na bieżąco

Prawa autorskie © 2009 - www.extendoffice.com. | Wszelkie prawa zastrzeżone. Zasilany przez ExtendOffice, | Mapa strony
Microsoft i logo Office są znakami towarowymi lub zastrzeżonymi znakami towarowymi Microsoft Corporation w Stanach Zjednoczonych i / lub innych krajach.
Chronione przez Sectigo SSL