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

Jak automatycznie wysyłać wiadomości e-mail na podstawie wartości komórki w programie Excel?

Przypuśćmy, że chcesz wysłać wiadomość e-mail za pośrednictwem programu Outlook do określonego odbiorcy na podstawie określonej wartości komórki w programie Excel. Na przykład, jeśli wartość komórki D7 w arkuszu jest większa niż 200, wiadomość e-mail jest tworzona automatycznie. W tym artykule przedstawiono metodę VBA umożliwiającą szybkie rozwiązanie tego problemu.

Automatycznie wysyłaj wiadomości e-mail na podstawie wartości komórki z kodem VBA


Automatycznie wysyłaj wiadomości e-mail na podstawie wartości komórki z kodem VBA

Wykonaj następujące czynności, aby wysłać wiadomość e-mail na podstawie wartości komórki w programie Excel.

1. W arkuszu roboczym musisz wysłać wiadomość e-mail na podstawie wartości komórki (tutaj jest to komórka D7), kliknij prawym przyciskiem myszy kartę arkusza i wybierz Wyświetl kod z menu kontekstowego. Zobacz zrzut ekranu:

2. W wyskakującym okienku Microsoft Visual Basic for Applications okno, skopiuj i wklej poniższy kod VBA do okna kodu arkusza.

Kod VBA: wysyłaj wiadomości e-mail przez Outlooka na podstawie wartości komórki w Excelu

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

Uwagi:

1). W kodzie VBA D7 i wartość> 200 to komórka i wartość komórki, na podstawie której wyślesz wiadomość e-mail.
2). Zmień treść wiadomości e-mail zgodnie z potrzebą xMailBody wiersz w kodzie.
3). Zastąp adres e-mail adresem e-mail odbiorcy w linii .To = "Adres e-mail".
4). I określ odbiorców w polach DW i UDW zgodnie z potrzebami w .CC = „” i UDW = „” działy.
5). Na koniec zmień temat wiadomości e-mail w linii .Subject = "wyślij przez test wartości komórki".

3. wciśnij inny + Q klucze razem, aby zamknąć Microsoft Visual Basic for Applications okno.

Odtąd, gdy wartość wprowadzona w komórce D7 jest większa niż 200, wiadomość e-mail z określonymi odbiorcami i treścią zostanie utworzona automatycznie w Outlooku. Możesz kliknąć Wyślij przycisk, aby wysłać tę wiadomość e-mail. Zobacz zrzut ekranu:

Uwagi:

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

2. Jeśli wprowadzone dane w komórce D7 są wartością tekstową, okno wiadomości e-mail również zostanie wyskakujące.


Z łatwością wysyłaj wiadomości e-mail przez Outlooka na podstawie pól utworzonej listy mailingowej w Excelu:

Podróż Ruta de la Plata w liczbach Wysyłać emaile użyteczność Kutools dla programu Excel pomaga użytkownikom wysyłać wiadomości e-mail przez Outlooka na podstawie utworzonej listy mailingowej w Excelu.
Pobierz i wypróbuj teraz! (30-dzień wolny szlak)


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 (308)
Znamionowy 5 z 5 · 1 oceny
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak należy zmodyfikować kod, aby zastosować go do całego zakresu komórek?
Ten komentarz został zminimalizowany przez moderatora na stronie
Droga Debbie,
Wypróbuj poniższy kod VBA, aby rozwiązać problem.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
If (Not Intersect(Target, Range("A1:D4")) jest niczym) i (Target.Value > 200) Wtedy
Zadzwoń do Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
On Error Resume Next
Z xOutMail
.To = "Adres e-mail odbiorcy"
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Mam problem z uzyskaniem tego kodu w celu wyświetlenia monitu o pośrednią zmianę wartości w komórce. Na przykład, jeśli mam równanie Sum, automatycznie zmienia tę wartość. Gdy równanie jest uruchamiane, a wartość przekracza ustawioną wartość, aby wyświetlić wiadomość e-mail, nie robi tego, chyba że sam fizycznie zmienię liczbę. Czy istnieje sposób na wyświetlenie monitu e-mail, nawet jeśli zmieniono go pośrednio?
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Jordanie,
Poniższy kod VBA może pomóc w rozwiązaniu problemu. Nie zapomnij zastąpić „Adresu e-mail” adresem e-mail odbiorcy w kodzie. Dziękuję Ci.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Dim xRgPre jako zakres
On Error Resume Next
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
Ustaw xRg = Range („D7”)
Ustaw xRgPre = xRg.Precedenty
Jeśli xRg.Wartość > 200 Wtedy
Jeśli Target.Address = xRg.Address Wtedy
Zadzwoń do Mail_small_Text_Outlook
ElseIf (Not xRgPre nie jest niczym) And (Intersect(Target, xRgPre).Address = Target.Address) Then
Zadzwoń do Mail_small_Text_Outlook
End If
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
On Error Resume Next
Z xOutMail
.To = "Adres e-mail"
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Zmodyfikowałem sugerowany kod tak, aby działał w mojej aplikacji.
Zmieniono xRg = Range("C2:C40") i If xRg.Value = -1.

Problem, który mam, polega na tym, że za każdym razem, gdy następuje zmiana w dowolnej komórce, i dopóki jedna z komórek w moim zakresie ma wartość = -1, wywoła wywołanie Mail_small_Text_Outlook.
Próbuję dzwonić tylko wtedy, gdy jakakolwiek komórka w moim zakresie zmieni się pośrednio na -1.
Zastanawiałem się też, czy i jak byłoby możliwe, aby spełniał dwa kryteria.
Na przykład sprawdź zakres A i zakres B i czy spełniają kryteria wywołaj funkcję.

Z góry dziękuję za pomoc. Jestem nowy w tym wszystkim, ale czytanie tego wątku ma tam około 90%.


Prywatny Sub Worksheet_Change (ByVal Target As Range)
Dim xRgPre jako zakres
On Error Resume Next
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
Ustaw xRg = Zakres("C2:C40")
Ustaw xRgPre = xRg.Precedenty
Jeśli xRg.Value = -1 Wtedy
Jeśli Target.Address = xRg.Address Wtedy
Zadzwoń do Mail_small_Text_Outlook
ElseIf (Not xRgPre nie jest niczym) And (Intersect(Target, xRgPre).Address = Target.Address) Then
Zadzwoń do Mail_small_Text_Outlook
End If
End If
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Użyłem tego kodu z jedyną zmianą, którą zastosowałem do całej kolumny [Set xRg = Range("D4:D13")]. Teraz zdarzenie jest wyzwalane za każdym razem, gdy wykonywane są obliczenia, niezależnie od tego, czy zawór w kolumnie D jest poniżej wartości docelowej. Jakiś pomysł, dlaczego tak jest?


Dim Xrg jako zakres
Prywatny Sub Worksheet_Change (ByVal Target As Range)
Dim xRgPre jako zakres
On Error Resume Next
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
Ustaw Xrg = Zakres("D4:D13")
Ustaw xRgPre = Xrg.Precedenty
Jeśli Xrg.Value < 1200 Wtedy
Jeśli Target.Address = Xrg.Address Wtedy
Zadzwoń do Mail_small_Text_Outlook
ElseIf (Not xRgPre nie jest niczym) And (Intersect(Target, xRgPre).Address = Target.Address) Then
Zadzwoń do Mail_small_Text_Outlook
End If
End If
End Sub

Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & _
"Testuj vba" _
& vbNowaLinia & _
"Linia 2."
On Error Resume Next
Z xOutMail
.Do = ""
.CC = „”
.BCC = „”
.Subject = "Automatyczny test e-mail"
.Body = xMailBody
.Pokaz
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic

End Sub


Dzięki.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć

Mam problem, ponieważ odbiorca wiadomości e-mail musi być dodawany raz za razem. Proszę wskazać, czy można dodać listę odbiorców e-mail do tej funkcji, aby funkcja wybrała adres e-mail z podanej listy adresów e-mail lub załadowania listy, a funkcja wysłała e-mail już skomponowany do żądanego odbiorcy.
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Henryku,
Poniższy kod VBA może pomóc w rozwiązaniu problemu. Umieść skrypt VBA w module arkusza roboczego. Gdy wartość w określonej komórce spełnia warunek, pojawi się okno dialogowe Kutools for Excel, wybierz komórki zawierające adresy e-mail odbiorców, a następnie kliknij przycisk OK przycisk. Następnie otwierają się e-maile z określonymi adresatami. Prześlij je według potrzeb.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
Ustaw xRg = Range („D7”)
Jeśli xRg = wartość docelowa i wartość docelowa > 200 wtedy
Zadzwoń do Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Dim xRgMsg jako zakres
Przyciemnij xCell jako zakres
Ustaw xRgMsg = Application.InputBox("Wybierz komórki adresowe:", "Kutools for Excel", , , , , , 8)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
On Error Resume Next
Dla każdej komórki xCell w xRgMsg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.Do = xKomórka.Wartość
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
xOutApp = Nic
xOutMail = Nic
Dalej
Przy błędzie GoTo 0
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
czy zostanie automatycznie wysłana pocztą, bez żadnych ręcznych przerw?
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Brahmo,
Jeśli chcesz bezpośrednio wysłać wiadomość e-mail bez wyświetlania, zamień wiersz „.Display” na „.Send” w powyższym kodzie VBA.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć, umieściłem ten sam skrypt, ale nie działa, pomóż mi w pierwszej części

Dim xRg jako zakres

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
Ustaw xRg = Range („D7”)
Jeśli xRg = Target And Target.Value = 200 Wtedy
Zadzwoń do Mail_small_Text_Outlook
End If

End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Droga Bazyli,
Czy jest jakieś ostrzeżenie podczas uruchamiania kodu?
Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj, jak zmodyfikujesz ten kod, aby sprawdzić, czy grupa komórek ma ciąg „Brak dopasowania” i wysłać e-mail, jeśli tak.
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Jose,
Spróbuj poniżej kodu VBA. Podczas uruchamiania kodu pojawi się okno dialogowe, wybierz zakres, w którym chcesz sprawdzić ciąg, i kliknij przycisk OK. jeśli ciąg nie istnieje, pojawi się okno dialogowe. Jeśli ciąg znajduje się w zakresie, zostanie wyświetlony e-mail z określonym odbiorcą, tematem i treścią.

Sub Wyślij e-mail()
Dim I tak długo
Dim J jak długo
Dim xRg jako zakres
Przyciemnij xArr
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Dim xFlag jako wartość logiczna
On Error Resume Next
Set xRg = Application.InputBox("Proszę wybrać zakres", "Kutools for Excel", Selection.Address, , , , , 8)
Jeśli xRg jest niczym, wyjdź z Sub
xArr = xRg.Wartość
xFlag = Fałsz
Dla I = 1 To UBound(xArr)
Dla J = 1 To UBound(xArr, 2)
Jeśli xArr(I, J) = „Brak dopasowania” Wtedy
xFlag = Prawda
End If
Dalej
Dalej
Jeśli xFlag to
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
Z xOutMail
.To = "Adres e-mail"
.CC = „”
.BCC = „”
.Temat = "Dopasuj"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Więcej
MsgBox „Nie znaleziono dopasowanej wartości”, vbInformation, „KuTools for Excel”
End If
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak mogę zmienić ten kod do wysyłania ocen uczniów do rodziców. Gdzie, jeśli kolumna A to ocena, a kolumna B to nadrzędny adres e-mail. Chcę wypełnić e-mail dla każdego ucznia z oceną F.
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Franku,
Poniższy kod VBA może pomóc w rozwiązaniu problemu. Dziękuję Ci.

Sub Mail_small_Text_Outlook()
Dim xRg jako zakres
Dim I tak długo
Dim xRows tak długo
Dim xVal jako ciąg
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
On Error Resume Next
Ustaw xRg = Application.InputBox("Wybierz kolumnę oceny i kolumnę e-mail (dwie kolumny)", "Kutools for Excel", Selection.Address, , , , , 8)
Jeśli xRg jest niczym, wyjdź z Sub
xRows = xRg.Rows.Liczba
Ustaw xRg = xRg(2)
Dla I = 1 To xRows
xVal = xRg.Offset(I, -1).Tekst
Jeśli xVal = „F” Wtedy
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
„To jest ocena Twojego dziecka” i xRg.Offset(I,-1).Text
Z xOutMail
.to = xRg.Przesunięcie(I, 0).Tekst
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End If
Dalej
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Mam już listę adresów e-mail w pliku excel, jak mogę zmodyfikować kod, aby automatycznie wybrać adres e-mail osoby, jeśli jej komórka D7 ma >200?
Ten komentarz został zminimalizowany przez moderatora na stronie
Dobry dzień,
Poniższy kod VBA może pomóc w rozwiązaniu problemu. Umieść skrypt VBA w module arkusza roboczego. Gdy wartość w określonej komórce spełnia warunek, pojawi się okno dialogowe Kutools for Excel, wybierz komórki zawierające adresy e-mail odbiorców, a następnie kliknij przycisk OK przycisk. Następnie otwierają się e-maile z określonymi adresatami. Prześlij je według potrzeb.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
Ustaw xRg = Range („D7”)
Jeśli xRg = wartość docelowa i wartość docelowa > 200 wtedy
Zadzwoń do Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Dim xRgMsg jako zakres
Przyciemnij xCell jako zakres
Ustaw xRgMsg = Application.InputBox("Wybierz komórki adresowe:", "Kutools for Excel", , , , , , 8)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
On Error Resume Next
Dla każdej komórki xCell w xRgMsg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.Do = xKomórka.Wartość
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
xOutApp = Nic
xOutMail = Nic
Dalej
Przy błędzie GoTo 0
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Mam problem z wysyłaniem poczty przez Outlooka. Otrzymuję komunikat o błędzie „Program próbuje wysłać wiadomość e-mail w Twoim imieniu. Jeśli jest to nieoczekiwane, odrzuć i sprawdź, czy oprogramowanie antywirusowe jest aktualne”
Proszę o pomoc, ponieważ nie jestem w stanie tego zautomatyzować.
Ten komentarz został zminimalizowany przez moderatora na stronie
Przepraszam mayank,
Kod działa dobrze w moim przypadku. Wygląda na to, że w Twoim Outlooku skonfigurowano funkcję „wyślij w imieniu”. Proszę to sprawdzić.
Ten komentarz został zminimalizowany przez moderatora na stronie
Witam, jakiego kodu użyłbym, jeśli próbuję wysłać wiadomość e-mail do menedżera, który ma listę owoców, których ilość jest > 200 raz w miesiącu (na podstawie twojego przykładu) lub wkrótce wygaśnie (na podstawie dat)
Ten komentarz został zminimalizowany przez moderatora na stronie
dzień dobry
Może być metodą opisaną w tym artykule „Jak wysłać wiadomość e-mail, jeśli termin płatności został dotrzymany w programie Excel?” może Ci pomóc.
Proszę kliknąć ten link: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak mogę edytować kod, aby wysłać e-mail na podstawie daty w komórce. Na przykład potrzebuję przeglądu dokumentu co 15 miesięcy i chcę wyrzucić wiadomość e-mail po 12 miesiącach na adres e-mail z informacją, że dokument wymaga przeglądu. Mam teraz automatyczne wysyłanie wiadomości e-mail, zmieniając .Display na .Send i działa świetnie, jak napisano, ale co muszę zmienić, aby użyć funkcji daty zamiast liczby całkowitej?
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak dodać wiele zakresów do "Ustaw xRg = Zakres("D7")". Chcę go edytować i dodać Range("D7:F7"). Jednak otrzymuję błąd Run Time Error 13, Type Mismatch i prowadzi mnie do If xRg = Target And Target.Value> 2 Then.


Jak mogę rozwiązać ten problem?
Ten komentarz został zminimalizowany przez moderatora na stronie
Dobry dzień,
Wypróbuj poniższy kod VBA, aby rozwiązać problem.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
If (Not Intersect(Target, Range("D7:F7")) jest niczym) i (Target.Value > 200) Wtedy
Zadzwoń do Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
On Error Resume Next
Z xOutMail
.To = "Adres e-mail odbiorcy"
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
działało idealnie.. Dziękuję..:):)
Ten komentarz został zminimalizowany przez moderatora na stronie
U mnie to nie działa, ponieważ wartość w D7 jest wynikiem formuły. Co jeśli komórka D7 zawiera formułę, np. D7 =2*120? Wciąż spełnia warunek, ale nic się nie dzieje. Proszę pomóż
Ten komentarz został zminimalizowany przez moderatora na stronie
jak zatrzymać kod przed uruchomieniem, tj. nie monitować wiadomości e-mail, gdy warunek nie jest spełniony?

nawet gdy D7 < 200, nadal otrzymuję monit o e-mail.
Ten komentarz został zminimalizowany przez moderatora na stronie
Dobry dzień,
Kod jest aktualizowany w poście z rozwiązaniem problemu. Dziękuję za Twój komentarz.
Ten komentarz został zminimalizowany przez moderatora na stronie
Hi

Dziękuję bardzo za opublikowanie tego kodu VBA i instrukcji. Kiedy go znalazłem, poczułem się, jakbym wygrał lotto. Jednak utknąłem na czymś, więc mam nadzieję, że możesz pomóc (jestem nowy w VBA, mam tylko bardzo podstawową wiedzę).

Skopiowałem kod i zmieniłem komórkę i wartość komórki, aby wybrać z zakresu, jeśli spełnione są kryteria. Wypróbowałem i przetestowałem i działa i otrzymałem wiadomość e-mail do programu Outlook w oparciu o kryteria.

1) Jednak wydaje mi się, że nie mogę znaleźć sposobu na automatyczne uruchomienie kodu VBA po otwarciu arkusza programu Excel, zamiast klikania aplikacji VBA i wybierania uruchamiania. Czy możesz doradzić, czy istnieje dodatkowy monit o wpisanie powyższego kodu VBA, który to zrobi, czy też należy to zrobić osobno.

2) Czy istnieje również sposób na uzyskanie kodu VBA w celu wysłania wiadomości do osoby, jeśli termin płatności jest tak dla określonego przedmiotu, jak pokazano w poniższym przykładzie.
ukryta kolumna e-mail
Imię lub Nazwa Firmy

Procedura
Procedura nr 1 termin realizacji tak
Procedura nr. 2 termin nie

Miałbym wiele osób w arkuszu kalkulacyjnym (przechodząc poziomo w rzędzie), a „Tak” mogłoby być podświetlone dla różnych zaległych procedur (wymienionych pionowo w kolumnie A. Czy istnieje sposób na utworzenie kodu VBA, który działa dla czegoś takiego - jeśli „Tak” dla „Osoby 1”, wyślij wiadomość e-mail do „osoby 1” z „procedurą nr #” (lub numerami) i terminem(-ami). Możliwość wymienienia w wiadomości e-mail wszystkich procedur i ich kolejnych terminów.

Nie miałbym nic przeciwko, gdybym musiał ustawić osobny kod VBA dla każdej osoby, o ile wysłała maila ze wszystkimi zaległymi dokumentami dla tej osoby i terminami płatności.

Mam nadzieję, że możesz pomóc
Ten komentarz został zminimalizowany przez moderatora na stronie
Droga Aniu,
Wypróbuj poniższy kod VBA. Dziękuję za Twój komentarz.

Sub Mail_small_Text_Outlook()
Dim xRg jako zakres
Przyciemnij xCell jako zakres
Dim I tak długo
Dim xRows tak długo
Dim xCols tak długo
Dim xVal jako ciąg
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
On Error Resume Next
Set xRg = Application.InputBox("Wybierz zakres zawierający wartość komórki, na podstawie której będziesz wysyłać wiadomości e-mail:", "Kutools for Excel", Selection.Address, , , , , 8)
Jeśli xRg jest niczym, wyjdź z Sub
xRows = xRg.Rows.Liczba
xKolumny = xRg.Kolumny.Liczba
Dla I = 1 To xRows
Ustaw xCell = xRg(I, xCols)
Jeśli xCell.Value = „Tak” Wtedy
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To są Twoje informacje: " & vbNewLine & xCell.Offset(0, -1).Text & vbNewLine & xCell.Offset(0, -2).Text
Z xOutMail
.To = xCell.Offset(0, -4).Tekst
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End If
Dalej
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Kryształ,

Zastępuje następujący kod:

Podrzędny adres e-mail ()

Dim xRg jako zakres

Dim xRgEach jako zakres

Dim xEmail_Subject, xEmail_Send_Form itp.
Ten komentarz został zminimalizowany przez moderatora na stronie
Gdzie dokładnie wstawiamy ten kod?
Ten komentarz został zminimalizowany przez moderatora na stronie
Dzień dobry,
Musisz umieścić kod w oknie kodu arkusza roboczego.
Otwórz okno Microsoft Visual Basic for Applications, kliknij dwukrotnie nazwę arkusza w lewym okienku, aby otworzyć edytor kodu.
Ten komentarz został zminimalizowany przez moderatora na stronie
Witam,


Obecnie mam mały problem z kodowaniem (nowość w tym - może odgryzłem więcej, niż mogę przeżuć)


Obecnie posiadam arkusz kalkulacyjny z następującymi informacjami, w których potrzebuję pomocy w zautomatyzowaniu i wysłaniu wiadomości e-mail dotyczących usterek, które znajdują się w naszych nieruchomościach dla naszej firmy


Obecnie potrzebuję kodu, który będzie wykorzystywał następujące dane:


1) Adres i problem ( 2 „ogólne” komórki, które zostały połączone za pomocą ((w komórce D1)) „ = = CONCAT(B1,” „C1,)”
Adres w B1 zawsze będzie taki sam (mniej więcej)
Podczas gdy C1 zawsze będzie się zmieniał w zależności od usterki w nieruchomości.


2) E-mail, który zostanie wysłany na ten sam adres e-mail (czy mogę użyć na przykład $E$1 lub muszę użyć E1 - E1 .) lub czy mogę po prostu wpisać „TheEmailAdress@.co.uk” w wierszu kodu


3) Treść wiadomości e-mail, która ma zostać wypełniona w sposób podobny do punktu 1) ...... ((W komórce F1)) " = CONCAT (G1," ", H1)
Będą się one ciągle zmieniać, ponieważ reprezentują firmę (G1) i to, co robią, naprawiają, cytują itp. (H1)

4) Spust do wysłania e-maila, byłbym numerem 7, arkusz jest aktualizowany codziennie (7 dni w tygodniu)
w związku z tym potrzebuję wyzwalacza, aby wysłać wiadomość e-mail w dniu 7, ale nie stale, jak w dniu 8, 9, 10+ ect. a nie wcześniej jak 1-6, to byłoby w A4 : A 100+ (ponieważ stale się rozwijamy)


4) Użyłem krótkich fragmentów od innych użytkowników, którzy wspomnieli o używaniu listy wyzwalacza do wysłania wiadomości e-mail, ale nie jestem pewien, czy jest w 100% poprawny, ale potrzebuję go do skanowania wszystkich Collum A... A4: A100
a jeśli istnieje 47 komórek zawierających tylko „7”, zostanie wysłanych 47 e-maili


Bardzo dziękuję za przeczytanie i mam nadzieję, że możesz pomóc :)
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Martyniu,
Przepraszam, nie mogę w tym pomóc.
Możesz zamieścić swoje pytanie na naszym forum: https://www.extendoffice.com/forum.html aby uzyskać więcej wsparcia Excel od naszego personelu technicznego.
Dziękuję za Twój komentarz.

Z poważaniem,
Kryształ
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,


Co jeśli chcę wysłać wiadomość e-mail na podstawie słowa „zakończono” dodanego do kolumny L?
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Jesse,
Poniższy kod VBA może pomóc w rozwiązaniu problemu. Dziękuję za Twój komentarz.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
If (Not Intersect(Target, Range("L:L")) Is Nothing) And (Target.Value = "completed") Wtedy
Zadzwoń do Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
On Error Resume Next
Z xOutMail
.To = "Adres e-mail odbiorcy"
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,
Chciałbym, aby program Outlook wyskakiwał tylko wtedy, gdy dane, które wkleiłem do zakresu ("D7:F7"), mają co najmniej 1 zero lub puste.
Usunąłem wiersz „If Target.Cells.Count > 1 Then Exit Sub”, a teraz Outlook zawsze uruchamia się po wklejeniu dowolnej grupy wartości do komórek D7:F7.

Pomoc.
Ten komentarz został zminimalizowany przez moderatora na stronie
Drogi Janie,
Poniższy skrypt może pomóc w rozwiązaniu problemu. Dziękuję za Twój komentarz.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
On Error Resume Next
Jeśli Target.Address = Range("D7:F7").Adres Wtedy
Z Application.Worksheet Function
Jeśli .CountIf(Target, "") > 0 Lub .CountIf(Target, 0) > 0 Wtedy
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.To = "Adres e-mail"
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = "Cześć"
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End If
Kończyć z
End If
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Użyłem więc twojej edycji, aby uwzględnić zakresy komórek, ale (jeśli korzystamy z przykładu arkusza roboczego) zastanawiałem się, jak dodać rodzaj owocu, datę i ilość do wiadomości e-mail HTML z arkusza roboczego, jeśli spełniają kryteria mieć wygenerowany e-mail. Więc to by powiedziało

"Siemanko,"

Nazwa owocu z komórki "Należy umieścić na zamówieniu wstecznym, ponieważ na dzień zamówienia: " data zamówienia z komórki " mamy taką ilość: " ilość z komórki.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Noemi,
Spróbuj tego skryptu VBA.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Dim xRg jako zakres
Dim I, J, K tak długo
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
On Error Resume Next
Jeśli Target.Address = Range("D7").Adres Wtedy
Z Application.Worksheet Function
Jeśli IsNumeric(Target.Value) i Target.Value > 200, to
Set xRg = Application.InputBox("Wybierz zakres komórek, który będzie wyświetlany w treści wiadomości:", "KuTools for Excel", Selection.Address, , , , , 8)
Jeśli xRg jest niczym, wyjdź z Sub
Dla I = 1 To xRg.Rows.Count
Dla J = 1 To xRg.Rows(I).Columns.Count
Dla K = 1 To xRg.Rows(I).Columns(J).Count
xMailBody = xMailBody & " " & xRg.Rows(I).Columns(J).Cells(K).Text
Dalej
Dalej
xMailBody = xMailBody i vbNewLine
Dalej
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.To = "Adres e-mail"
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = "Cześć" & vbNewLine & xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
Przy błędzie GoTo 0
Ustaw xOutMail = Nic
Ustaw xOutApp = Nic
End If
Kończyć z
End If
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
cześć kryształ!
dziękuję za kody, jeśli to możliwe, wyślij kody na poniższe dane!

jeśli mamy od 8 do 9 kolorów z różnymi rodzajami przedawnienia, takimi jak data ważności paszportu, data ważności prawa jazdy, data ważności rejestracji pojazdu, data ważności przepustki bramowej itp., a alert mailowy należy wysłać tylko do 5 wskazanych osób.

podobnie jak nasz arkusz z datami obejmuje ponad 300 pracowników, wygaśnięcie i data wygaśnięcia z 15 dni w kolorze czerwonym i alert e-mailem powinien zostać wysłany.

Prosimy zrobić, co konieczne

z góry dzięki
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,
Opublikowaliśmy artykuł „Jak wysłać wiadomość e-mail, jeśli termin został dotrzymany w programie Excel?”
Możesz zobaczyć, czy są odpowiedzi w tym artykule. Kliknij ten link, aby otworzyć artykuł: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Dziękuję Ci.
Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj - Czy jeśli chcę wysłać na e-mail z listy zamiast umieszczać w kodzie rzeczywisty dodatek e-mail, czy jest to możliwe? dzięki
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,
Spróbuj poniżej kodu VBA, gdy określona komórka spełnia warunek, pojawi się okno dialogowe, wybierz komórkę zawierającą adres e-mail, na który wyślesz wiadomość e-mail. Mam nadzieję, że to może pomóc. Dziękuję Ci.

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Target.Cells.Count > 1, to wyjdź z Sub
Ustaw xRg = Range („D7”)
Jeśli xRg = wartość docelowa i wartość docelowa > 200 wtedy
Zadzwoń do Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp jako obiekt
Dim xOutMail jako obiekt
Dim xMailBody jako ciąg
Dim xRgMsg jako zakres
Przyciemnij xCell jako zakres
Ustaw xRgMsg = Application.InputBox("Wybierz komórki adresowe:", "Kutools for Excel", , , , , , 8)
xMailBody = "Cześć" & vbNewLine & vbNewLine & _
"To jest linia 1" & vbNewLine & _
„To jest wiersz 2”
On Error Resume Next
Dla każdej komórki xCell w xRgMsg
Ustaw xOutApp = CreateObject("Outlook.Application")
Ustaw xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.Do = xKomórka.Wartość
.CC = „”
.BCC = „”
.Subject = "wyślij przez test wartości komórki"
.Body = xMailBody
.Wyświetl 'lub użyj .Wyślij
Kończyć z
xOutApp = Nic
xOutMail = Nic
Dalej
Przy błędzie GoTo 0
End Sub
Nie ma tu jeszcze żadnych komentarzy
Pokaż więcej
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