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

Kako samodejno poslati e-pošto na podlagi vrednosti celice v Excelu?

Recimo, da želite poslati e-poštno sporočilo prek Outlooka določenemu prejemniku na podlagi določene vrednosti celice v Excelu. Če je na primer vrednost celice D7 na delovnem listu večja od 200, se e-poštno sporočilo ustvari samodejno. Ta članek predstavlja metodo VBA za hitro reševanje te težave.

Samodejno pošlji e-pošto na podlagi vrednosti celice s kodo VBA


Samodejno pošlji e-pošto na podlagi vrednosti celice s kodo VBA

Naredite naslednje, če želite poslati e-poštno sporočilo na podlagi vrednosti celice v Excelu.

1. Na delovnem listu morate poslati e-pošto na podlagi vrednosti celice (tukaj piše celica D7), z desno miškino tipko kliknite zavihek lista in izberite Ogled kode iz kontekstnega menija. Oglejte si posnetek zaslona:

2. V pojavnem oknu Microsoft Visual Basic za aplikacije okno, kopirajte in prilepite spodnjo kodo VBA v okno s kodo lista.

Koda VBA: Pošljite e-pošto prek Outlooka na podlagi vrednosti celice v 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

Opombe:

1). V kodi VBA, D7 in vrednost> 200 so vrednost celice in celice, na podlagi katere boste poslali e-pošto.
2). Prosimo, spremenite telo e-pošte, kot potrebujete xMailBody vrstico v kodi.
3). Zamenjajte e-poštni naslov z e-poštnim naslovom prejemnika v vrstici .To = "E-poštni naslov".
4). In določite prejemnike Kp in Skp, kot jih potrebujete .CC = "" in Skp = "" oddelkov.
5). Končno spremenite zadevo e-pošte v vrstici .Subject = "pošlji s preskusom vrednosti celice".

3. Pritisnite druga + Q tipke, da zaprete Microsoft Visual Basic za aplikacije okno.

Od zdaj naprej, ko bo vrednost, ki jo vnesete v celico D7, večja od 200, se bo v Outlooku samodejno ustvarilo e-poštno sporočilo z navedenimi prejemniki in telesom. Lahko kliknete Pošlji gumb za pošiljanje tega e-poštnega sporočila. Oglejte si posnetek zaslona:

Opombe:

1. Koda VBA deluje samo, če Outlook uporabljate kot svoj e-poštni program.

2. Če so vneseni podatki v celici D7 besedilna vrednost, se bo izpisalo tudi e-poštno okno.


Preprosto pošiljanje e-pošte prek Outlooka na podlagi polj ustvarjenega poštnega seznama v Excelu:

O Pošlji e-pošto uporabnost Kutools za Excel pomaga uporabnikom, ki pošiljajo e-pošto prek Outlooka na podlagi ustvarjenega poštnega seznama v Excelu.
Prenesite in preizkusite zdaj! (30-dnevna prosta pot)


Sorodni članki:


Najboljša orodja za pisarniško produktivnost

Kutools za Excel rešuje večino vaših težav in poveča vašo produktivnost za 80%

  • Ponovna uporaba: Hitro vstavite zapletene formule, grafikoni in vse, kar ste že uporabljali; Šifriraj celice z geslom; Ustvari poštni seznam in pošiljanje e-pošte ...
  • Vrstica Super Formula (enostavno urejanje več vrstic besedila in formule); Bralna postavitev (enostavno branje in urejanje velikega števila celic); Prilepite v filtrirani obseg...
  • Združi celice / vrstice / stolpce brez izgube podatkov; Vsebina razdeljenih celic; Združi podvojene vrstice / stolpce... prepreči podvojene celice; Primerjaj obsege...
  • Izberite Duplicate ali Unique Vrstice; Izberite prazne vrstice (vse celice so prazne); Super Find in Fuzzy Find v mnogih delovnih zvezkih; Naključna izbira ...
  • Natančna kopija Več celic brez spreminjanja sklica formule; Samodejno ustvarjanje referenc na več listov; Vstavi oznake, Potrditvena polja in še več ...
  • Izvleček besedila, Dodaj besedilo, Odstrani po položaju, Odstrani presledek; Ustvari in natisni vmesne seštevke strani Pretvarjanje med vsebino celic in komentarji...
  • Super filter (shranite in uporabite sheme filtrov za druge liste); Napredno razvrščanje glede na mesec / teden / dan, pogostost in drugo; Poseben filter s krepko, ležeče ...
  • Združite delovne zvezke in delovne liste; Spoji tabele na podlagi ključnih stolpcev; Razdelite podatke na več listov; Paketna pretvorba xls, xlsx in PDF...
  • Več kot 300 zmogljivih funkcij. Podpira Office / Excel 2007-2021 in 365. Podpira vse jezike. Enostavna uvedba v vašem podjetju ali organizaciji. 30-dnevna brezplačna preizkusna različica vseh funkcij. 60-dnevna garancija vračila denarja.
zavihek kte 201905

Kartica Office prinaša vmesnik z zavihki v Office in poenostavi vaše delo

  • Omogočite urejanje in branje z zavihki v Wordu, Excelu, PowerPointu, Publisher, Access, Visio in Project.
  • Odprite in ustvarite več dokumentov v novih zavihkih istega okna in ne v novih oknih.
  • Poveča vašo produktivnost za 50%in vsak dan zmanjša na stotine klikov miške za vas!
dno pisarniške mize
Komentarji (308)
Ocenjeno 5 iz 5 · 1 ocene
Ta komentar je moderator na spletnem mestu minimiziral
Kako je treba kodo spremeniti, da se uporablja za celoten obseg celic?
Ta komentar je moderator na spletnem mestu minimiziral
Draga Debbie,
Za rešitev težave poskusite spodnjo kodo VBA.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če je Target.Cells.Count > 1, potem Exit Sub
Če (Ne seka(Target, Range("A1:D4")) ni nič) in (Target.Value > 200) potem
Pokličite Mail_small_Text_Outlook
Konec Če
End Sub
Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
On Error Resume Next
Z xOutMail
.To = "E-poštni naslov vašega prejemnika"
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Imam težave s to kodo, da me pozove, če se vrednost v celici spremeni posredno. Na primer, če imam enačbo vsote, ki samodejno spremeni to vrednost. Ko se enačba zažene in vrednost preseže nastavljeno vrednost za poziv k e-pošti, tega ne stori, razen če sam fizično spremenim številko. Ali obstaja način, da nastavite e-poštni poziv, tudi če se spremeni posredno?
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Jordan,
Naslednja koda VBA vam lahko pomaga rešiti težavo. Prosimo, ne pozabite zamenjati "E-poštni naslov" z e-poštnim naslovom prejemnika v kodi. Hvala vam.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Dim xRgPre As Range
On Error Resume Next
Če je Target.Cells.Count > 1, potem Exit Sub
Nastavi xRg = obseg ("D7")
Nastavite xRgPre = xRg.Precedents
Če je xRg.Value > 200 Potem
Če je Target.Address = xRg.Address Potem
Pokličite Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) In (Intersect(Target, xRgPre).Address = Target.Address) Potem
Pokličite Mail_small_Text_Outlook
Konec Če
Konec Če
End Sub
Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
On Error Resume Next
Z xOutMail
.To = "E-poštni naslov"
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Spremenil sem predlagano kodo, da bi poskusil, da deluje za mojo aplikacijo.
Spremenjeno xRg = Range("C2:C40") in če je xRg.Value = -1.

Težava, ki jo imam, je, da kadar koli pride do spremembe katere koli celice in dokler je ena od celic v mojem obsegu = -1, bo poklicala Mail_small_Text_Outlook.
Poskušam klicati samo, če je katera koli celica v mojem obsegu posredno spremenjena v -1.
Spraševal sem se tudi, ali in kako bi bilo mogoče, da bi izpolnjeval dva kriterija.
Kot preverjanje obsega A in obsega B in če izpolnjujeta kriterije, pokličite funkcijo.

Vnaprej hvala za pomoč. Sem nov pri vsem tem, vendar sem ob branju te teme približno 90% tam.


Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Dim xRgPre As Range
On Error Resume Next
Če je Target.Cells.Count > 1, potem Exit Sub
Nastavite xRg = Obseg ("C2:C40")
Nastavite xRgPre = xRg.Precedents
Če je xRg.Value = -1 Potem
Če je Target.Address = xRg.Address Potem
Pokličite Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) In (Intersect(Target, xRgPre).Address = Target.Address) Potem
Pokličite Mail_small_Text_Outlook
Konec Če
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
To kodo sem uporabil, edina sprememba je bila, da sem jo uporabil za celoten stolpec [Set xRg = Range("D4:D13")]. Zdaj se dogodek sproži vsakič, ko se izvede izračun, ne glede na to, ali je ventil v stolpcu D pod ciljno vrednostjo. Kakšna ideja zakaj je tako?


Dim Xrg As Range
Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Dim xRgPre As Range
On Error Resume Next
Če je Target.Cells.Count > 1, potem Exit Sub
Nastavite Xrg = Obseg ("D4:D13")
Nastavite xRgPre = Xrg.Precedents
Če je Xrg.Value < 1200 Potem
Če je Target.Address = Xrg.Address Potem
Pokličite Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) In (Intersect(Target, xRgPre).Address = Target.Address) Potem
Pokličite Mail_small_Text_Outlook
Konec Če
Konec Če
End Sub

Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & _
"Test vba" _
& vbNewLine & _
"2. vrstica."
On Error Resume Next
Z xOutMail
.Do = ""
.CC = ""
.BCC = ""
.Subject = "Samodejni preizkus e-pošte"
.Telo = xMailBody
.Prikaz
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič

End Sub


Hvala.
Ta komentar je moderator na spletnem mestu minimiziral
Živijo

Imam težave, ker je treba prejemnika e-pošte vedno znova dodajati enega za drugim. Prosimo, povejte, ali je mogoče tej funkciji dodati seznam prejemnikov e-pošte, tako da bo funkcija izbrala e-poštni naslov s seznama posredovanih e-poštnih naslovov ali seznama naložila in funkcija poslala e-pošto, ki je že sestavljena, želenemu prejemniku.
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Henry,
Naslednja koda VBA vam lahko pomaga rešiti težavo. Prosimo, postavite skript VBA v svoj modul delovnega lista. Ko vrednost v navedeni celici izpolni pogoj, se prikaže pogovorno okno Kutools za Excel, izberite celice, ki vsebujejo e-poštne naslove prejemnikov, in nato kliknite gumb V redu. Nato se odprejo e-poštna sporočila z določenimi prejemniki. Pošljite jih po potrebi.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če je Target.Cells.Count > 1, potem Exit Sub
Nastavi xRg = obseg ("D7")
Če je xRg = Target And Target.Value > 200 Potem
Pokličite Mail_small_Text_Outlook
Konec Če
End Sub
Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Dim xRgMsg kot obseg
Zatemni xCell kot obseg
Nastavite xRgMsg = Application.InputBox("Izberite naslovne celice:", "Kutools za Excel", , , , , , 8)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
On Error Resume Next
Za vsako xCell v xRgMsg
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
xOutApp = Nič
xOutMail = Nič
Naslednji
Ob napaki Pojdi na 0
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
ali bo samodejno poslano po pošti, brez kakršne koli ročne prekinitve
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Brahma,
Če želite neposredno poslati e-pošto brez prikaza, v zgornji kodi VBA zamenjajte vrstico ".Display" s ".Send".
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, dal sem isti skript, vendar ne deluje, prosim, pomagajte mi v 1. delu

Dim xRg As Range

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če je Target.Cells.Count > 1, potem Exit Sub
Nastavi xRg = obseg ("D7")
Če je xRg = Target In Target.Value = 200 Potem
Pokličite Mail_small_Text_Outlook
Konec Če

End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Draga bazilika,
Ali je pri izvajanju kode kakšno opozorilo?
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni, kako bi spremenili to kodo, da bi preverili, ali ima skupina celic niz »Ni ujemanja« in poslali e-pošto, če je.
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Jose,
Poskusite spodnjo kodo VBA. Ko zaženete kodo, se prikaže pogovorno okno, izberite obseg, ki ga boste preverili za niz, in kliknite gumb V redu. če niz ne obstaja, se prikaže pogovorno okno s pozivom. Če niz obstaja v obsegu, se prikaže e-poštno sporočilo z določenim prejemnikom, zadevo in telesom.

Sub SendEmail()
Dim I As Long
Dim J Tako dolgo
Dim xRg As Range
Dim xArr
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Dim xFlag kot logična vrednost
On Error Resume Next
Nastavite xRg = Application.InputBox("Prosim, izberite obseg", "Kutools for Excel", Selection.Address, , , , , 8)
Če xRg ni nič, zapustite Sub
xArr = xRg.Vrednost
xFlag = False
Za I = 1 do UBound(xArr)
Za J = 1 do UBound(xArr, 2)
Če je xArr(I, J) = "Ni ujemanja", potem
xFlag = Res
Konec Če
Naslednji
Naslednji
Če xFlag Potem
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
Z xOutMail
.To = "E-poštni naslov"
.CC = ""
.BCC = ""
.Subject = "Ujemanje"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Else
MsgBox "Najdeno ni ujemajoče vrednosti", vbInformation, "KuTools za Excel"
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Kako bi lahko spremenil to kodo za pošiljanje ocen učencev staršem. Če je stolpec A ocena, stolpec B pa nadrejeni e-poštni naslov. Za vsakega študenta želim zapolniti e-poštno sporočilo z oceno F.
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Frank,
Spodnja koda VBA vam lahko pomaga rešiti težavo. Hvala vam.

Sub Mail_small_Text_Outlook()
Dim xRg As Range
Dim I As Long
Zatemni xvrstice tako dolgo
Dim xVal kot niz
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
On Error Resume Next
Nastavite xRg = Application.InputBox("Prosim, izberite stolpec ocene in stolpec e-pošte (dva stolpca)", "Kutools for Excel", Selection.Address, , , , , 8)
Če xRg ni nič, zapustite Sub
xRows = xRg.Rows.Count
Nastavi xRg = xRg(2)
Za I = 1 do x vrstic
xVal = xRg.Odmik(I, -1).Besedilo
Če je xVal = "F" Potem
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je ocena vašega otroka" & xRg.Offset(I, -1).Besedilo
Z xOutMail
.to = xRg.Odmik(I, 0).Besedilo
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
Konec Če
Naslednji
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Imam seznam e-poštnih naslovov že v datoteki excel, kako lahko spremenim kodo, da samodejno izbere e-poštni naslov osebe, če je njena celica D7 >200?
Ta komentar je moderator na spletnem mestu minimiziral
Dober dan,
Naslednja koda VBA vam lahko pomaga rešiti težavo. Prosimo, postavite skript VBA v svoj modul delovnega lista. Ko vrednost v navedeni celici izpolni pogoj, se prikaže pogovorno okno Kutools za Excel, izberite celice, ki vsebujejo e-poštne naslove prejemnikov, in nato kliknite gumb V redu. Nato se odprejo e-poštna sporočila z določenimi prejemniki. Pošljite jih po potrebi.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če je Target.Cells.Count > 1, potem Exit Sub
Nastavi xRg = obseg ("D7")
Če je xRg = Target And Target.Value > 200 Potem
Pokličite Mail_small_Text_Outlook
Konec Če
End Sub
Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Dim xRgMsg kot obseg
Zatemni xCell kot obseg
Nastavite xRgMsg = Application.InputBox("Izberite naslovne celice:", "Kutools za Excel", , , , , , 8)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
On Error Resume Next
Za vsako xCell v xRgMsg
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
xOutApp = Nič
xOutMail = Nič
Naslednji
Ob napaki Pojdi na 0
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Imam težave s pošiljanjem pošte prek Outlooka. Dobim sporočilo o napaki, ki pravi "Program poskuša poslati e-pošto v vašem imenu. Če je nepričakovano, zavrnite in preverite, ali je vaša protivirusna programska oprema posodobljena"
Prosim za pomoč, ker tega ne znam avtomatizirati.
Ta komentar je moderator na spletnem mestu minimiziral
Oprosti mayank,
Koda v mojem primeru deluje dobro. Zdi se, da je v vašem Outlooku konfigurirano nekaj o funkciji "pošlji v imenu". Prosim preveri.
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni, katero kodo bi uporabil, če poskušam poslati e-pošto upravitelju, ki ima seznam sadja, katerega količina je > 200 enkrat na mesec (glede na vaš primer) ali poteče kmalu (glede na datume)
Ta komentar je moderator na spletnem mestu minimiziral
Good Day
Morda je metoda v tem članku "Kako poslati e-pošto, če je bil v Excelu izpolnjen rok?" vam lahko pomaga
Sledite tej povezavi: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Ta komentar je moderator na spletnem mestu minimiziral
Kako lahko uredim kodo za pošiljanje e-pošte na podlagi datuma v celici. Na primer, moram dokument pregledati vsakih 15 mesecev in želim po 12 mesecih poslati e-pošto na e-poštni naslov, v katerem piše, da je treba dokument pregledati. Zdaj imam možnost, da samodejno pošljem e-pošto tako, da spremenim .Display v .Send in deluje odlično, kot je napisano, vendar kaj moram spremeniti, da uporabim funkcijo datuma namesto celega števila??
Ta komentar je moderator na spletnem mestu minimiziral
Kako lahko dodate več obsegov v "Set xRg = Range("D7")". Želim ga urediti in dodati obseg ("D7:F7"). Vendar pa dobivam napako Run Time Error 13, Type Mismatch in me vodi do If xRg = Target And Target.Value > 2 Then.


Kako lahko rešim to težavo?
Ta komentar je moderator na spletnem mestu minimiziral
Dober dan,
Za rešitev težave poskusite spodnjo kodo VBA.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če je Target.Cells.Count > 1, potem Exit Sub
Če (Ne seka(Target, Range("D7:F7")) ni nič) in (Target.Value > 200) potem
Pokličite Mail_small_Text_Outlook
Konec Če
End Sub
Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
On Error Resume Next
Z xOutMail
.To = "E-poštni naslov vašega prejemnika"
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
delalo odlično.. Hvala..:):)
Ta komentar je moderator na spletnem mestu minimiziral
Pri meni ne deluje, saj je vrednost v D7 rezultat formalne. Kaj pa, če celica D7 vsebuje formulo, npr. D7 =2*120? Še vedno izpolnjuje pogoje, vendar se nič ne dogaja. Prosim pomagajte
Ta komentar je moderator na spletnem mestu minimiziral
kako ustaviti izvajanje kode, tj. ne zahtevati e-pošte, ko pogoj ni izpolnjen?

tudi ko je D7 < 200, še vedno dobim poziv po e-pošti.
Ta komentar je moderator na spletnem mestu minimiziral
Dober dan,
Koda je posodobljena v objavi z rešeno težavo. Hvala za vaš komentar.
Ta komentar je moderator na spletnem mestu minimiziral
Hi

Najlepša hvala za objavo te kode VBA in navodil. Ko sem ga našel, sem se počutil, kot da sem dobil loto. Vendar sem obtičal pri nečem, zato upam, da mi lahko pomagate (sem nov v VBA, imam le zelo osnovno razumevanje).

Kopiral sem kodo in spremenil vrednost celice in celice, da izberem iz obsega, če so kriteriji izpolnjeni. Preizkusil sem in deluje, in prejel sem e-poštno sporočilo za Outlook glede na merila.

1) Vendar se mi zdi, da ne morem ugotoviti, kako naj se koda VBA samodejno zažene, ko odprem Excelov delovni list, namesto da moram klikniti aplikacijo VBA in izbrati Zaženi. Ali lahko svetujete, ali obstaja dodaten poziv za vnos zgornje kode VBA, ki bo to storil, ali pa je to treba narediti ločeno.

2) Ali obstaja tudi način, da dobim kodo VBA za pošiljanje pošte osebi, če je rok za določen izdelek da, kot je prikazano v spodnjem primeru.
skriti stolpec po e-pošti
Ime

Postopek
Postopek št. 1 rok da
Postopek št. 2 rok št

V preglednici bi imel veliko ljudi (ki gredo vodoravno v vrsti) in "Da" bi lahko poudaril za različne zapadle postopke (naveden navpično v stolpcu A. Ali obstaja način za ustvarjanje kode VBA, ki deluje za nekaj takega - če je "Da" za "Oseba 1", potem po e-pošti pošljite "osebi 1" s "postopkom št." (ali številkami) in datumom(-i). V e-pošti lahko navedete vse postopke in njihove poznejše roke.

Ne bi imel nič proti, če bi moral za vsako osebo nastaviti ločeno kodo VBA, če je poslala pošto z vsemi dokumenti, ki so zapadli za to osebo, in datumi zapadlosti.

Upam, da lahko pomagate
Ta komentar je moderator na spletnem mestu minimiziral
Draga Ann,
Prosimo, poskusite s spodnjo kodo VBA. Hvala za vaš komentar.

Sub Mail_small_Text_Outlook()
Dim xRg As Range
Zatemni xCell kot obseg
Dim I As Long
Zatemni xvrstice tako dolgo
Dim xCols As Long
Dim xVal kot niz
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
On Error Resume Next
Nastavite xRg = Application.InputBox("Izberite obseg, ki vsebuje vrednost celice, na podlagi katere boste pošiljali e-pošto:", "Kutools for Excel", Selection.Address, , , , , 8)
Če xRg ni nič, zapustite Sub
xRows = xRg.Rows.Count
xCols = xRg.Columns.Count
Za I = 1 do x vrstic
Nastavi xCell = xRg(I, xCols)
Če je xCell.Value = "Da" Potem
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To so vaši podatki: " & vbNewLine & xCell.Offset(0, -1).Text & vbNewLine & xCell.Offset(0, -2).Text
Z xOutMail
.To = xCell.Offset(0, -4).Besedilo
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
Konec Če
Naslednji
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
kristal,

To nadomesti naslednjo kodo:

Pod e-poštni naslov ()

Dim xRg As Range

Dim xRgEach kot obseg

Zatemni xEmail_Subject, xEmail_Send_Form,;itd.
Ta komentar je moderator na spletnem mestu minimiziral
Kam točno vstavimo to kodo?
Ta komentar je moderator na spletnem mestu minimiziral
Dober dan,
Kodo morate postaviti v okno kode delovnega lista.
Odprite okno Microsoft Visual Basic za aplikacije, dvokliknite ime lista v levem podoknu, da odprete urejevalnik kode.
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo,


Trenutno imam male težave s kodiranjem (nov v tem - morda sem odgriznil več, kot lahko prežvečim)


Trenutno imam preglednico z naslednjim, da potrebujem pomoč pri avtomatizaciji in pošiljanju e-pošte za napake, ki so na naših lastnostih za naše podjetje


Trenutno potrebujem kodo, ki bo uporabljala naslednje podatke:


1) Naslov in težava ( 2 "splošni" celici, ki sta bili združeni prek ((V celici D1)) " = =CONCAT(B1," "C1,) "
Naslov v B1 bo vedno enak (bolj ali manj)
Medtem ko se bo C1 vedno spreminjal, odvisno od napake na nepremičnini.


2) E-poštno sporočilo, ki bo poslano na isti e-poštni naslov (ali lahko uporabim na primer $E$1 ali moram uporabiti E1 - E1) ali lahko v vrstico kode samo vnesem "TheEmailAdress@.co.uk"


3) Telo e-pošte, ki se izpolni na podoben način kot točka 1) ...... ((V celici F1)) " =CONCAT(G1," ",H1)
Ti se bodo nenehno spreminjali, saj predstavljajo podjetje (G1) in kaj počnejo, popravljajo, citirajo itd. (H1)

4) Sprožilec za pošiljanje e-pošte, jaz bi bila številka 7, list se posodablja vsak dan (7 dni v tednu)
kot tak potrebujem sprožilec za pošiljanje e-pošte na dan 7, vendar ne nenehno kot na dan 8, 9, 10+ itd. in ne prej kot 1-6, to bi bilo v A4 : A 100+ (ker se nenehno širimo


4) Uporabil sem majhne izrezke drugih uporabnikov, ki so omenili uporabo seznama za sprožilec za pošiljanje e-pošte, vendar nisem prepričan, ali je 100 % pravilen, vendar bi ga potreboval za skeniranje skozi ves stolpec A... A4: A100
in če je 47 celic, ki vsebujejo samo "7", bo poslanih 47 e-poštnih sporočil


Najlepša hvala za branje in upam, da lahko pomagate :)
Ta komentar je moderator na spletnem mestu minimiziral
Dragi martyn,
Pri tem žal ne morem pomagati.
Svoje vprašanje lahko objavite na našem forumu: https://www.extendoffice.com/forum.html da pridobite več podpore za Excel od našega tehničnega osebja.
Hvala za komentar.

S spoštovanjem,
Crystal
Ta komentar je moderator na spletnem mestu minimiziral
Hi,


Kaj pa, če bi želel poslati e-pošto na podlagi dodane besede »dokončano« v stolpec L?
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Jesse,
Naslednja koda VBA vam lahko pomaga rešiti težavo. Hvala za vaš komentar.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če je Target.Cells.Count > 1, potem Exit Sub
Če (Not Intersect(Target, Range("L:L")) ni nič) in (Target.Value = "completed") potem
Pokličite Mail_small_Text_Outlook
Konec Če
End Sub
Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
On Error Resume Next
Z xOutMail
.To = "E-poštni naslov vašega prejemnika"
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Hi,
Želim, da se Outlook pojavi samo, če imajo podatki, ki sem jih prilepil v obseg (»D7:F7«), vsaj 1 ničlo ali prazno.
Odstranil sem vrstico »Če Target.Cells.Count > 1, potem izidi pod« in zdaj se Outlook vedno zažene, ko prilepim katero koli skupino vrednosti v celice D7:F7.

Pomoč.
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Jan,
Naslednji skript vam lahko pomaga rešiti težavo. Hvala za vaš komentar.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
On Error Resume Next
Če je Target.Address = Obseg("D7:F7").Naslov Potem
S funkcijo Application.WorksheetFunction
Če je .CountIf(Target, "") > 0 Ali .CountIf(Target, 0) > 0, potem
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.To = "E-poštni naslov"
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Body = "Živjo"
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
Konec Če
Končaj s
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Zato sem uporabil vaš popravek, da sem vključil obsege celic, vendar (če uporabljamo primer delovnega lista) sem se spraševal, kako dodati vrsto sadja, datum in količino v e-poštno sporočilo HTML z delovnega lista, če ustrezajo merilom za imeti ustvarjeno e-pošto. Tako bi rekli

"Zdravo,"

Ime sadja iz celice "Naročilo ga je treba vrniti, ker od datuma naročila: " datum naročila iz celice "imamo to količino:" količino iz celice.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Noemi,
Poskusite ta skript VBA.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Dim xRg As Range
Dim I, J, K As Long
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
On Error Resume Next
Če je Target.Address = Obseg("D7").Naslov Potem
S funkcijo Application.WorksheetFunction
Če je Numeric(Target.Value) in Target.Value > 200, potem
Nastavite xRg = Application.InputBox("Prosim, izberite obseg celic, ki ga boste prikazali v telesu pošte:", "KuTools for Excel", Selection.Address, , , , , 8)
Če xRg ni nič, zapustite Sub
Za I = 1 Do xRg.Rows.Count
Za J = 1 Do xRg.Vrstice(I).Število stolpcev
Za K = 1 Do xRg. Vrstice (I). Stolpci (J). Število
xMailBody = xMailBody & " " & xRg.Rows(I).Stolpci(J).Cells(K).Besedilo
Naslednji
Naslednji
xMailBody = xMailBody & vbNewLine
Naslednji
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.To = "E-poštni naslov"
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Body = "Živjo " & vbNewLine & xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
Ob napaki Pojdi na 0
Nastavite xOutMail = Nič
Nastavite xOutApp = Nič
Konec Če
Končaj s
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
zdravo kristal
hvala za vaše kode, če je mogoče, pošljite kode za spodaj navedene podrobnosti

če imamo 8 do 9 barv, ki uporabljajo različne vrste poteka veljavnosti, kot so datum poteka veljavnosti potnega lista, datum poteka veljavnosti vozniškega dovoljenja, datum poteka veljavnosti registracije vozila, datum poteka veljavnosti vozovnice itd., in mora biti opozorilo po pošti poslano samo 5 danim osebam.

kot je naš datumski list z več kot 300 zaposlenimi, je potekel rok in rok uporabnosti v 15 dneh v rdeči barvi in ​​mora biti poslano opozorilo po e-pošti.

prijazno naredi potrebno

Hvala vnaprej
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo,
Objavili smo članek "Kako poslati e-pošto, če je bil v Excelu izpolnjen rok?"
V tem članku si lahko ogledate, ali obstajajo odgovori. Za odpiranje članka sledite tej povezavi: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Hvala.
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni- Če bi želel poslati na e-pošto s seznama, namesto da bi v kodo dodal dejanski email addy, ali je to mogoče? hvala
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo,
Poskusite pod kodo VBA, ko navedena celica izpolnjuje pogoj, se prikaže pogovorno okno, izberite celico, ki vsebuje e-poštni naslov, na katerega boste poslali e-pošto. Upam, da lahko pomaga. Hvala vam.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če je Target.Cells.Count > 1, potem Exit Sub
Nastavi xRg = obseg ("D7")
Če je xRg = Target And Target.Value > 200 Potem
Pokličite Mail_small_Text_Outlook
Konec Če
End Sub
Sub Mail_small_Text_Outlook()
Zatemnite xOutApp kot objekt
Zatemni xOutMail kot objekt
Zatemni xMailBody kot niz
Dim xRgMsg kot obseg
Zatemni xCell kot obseg
Nastavite xRgMsg = Application.InputBox("Izberite naslovne celice:", "Kutools za Excel", , , , , , 8)
xMailBody = "Živjo" & vbNewLine & vbNewLine & _
"To je vrstica 1" & vbNewLine & _
"To je vrstica 2"
On Error Resume Next
Za vsako xCell v xRgMsg
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xOutMail = xOutApp.CreateItem(0)
Z xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "pošlji s preskusom vrednosti celice"
.Telo = xMailBody
.Prikaži ali uporabi .Pošlji
Končaj s
xOutApp = Nič
xOutMail = Nič
Naslednji
Ob napaki Pojdi na 0
End Sub
Tu še ni objavljenih komentarjev
Obremenitev Več
Pustite vaše komentarje
Objava kot gost
×
Ocenite to objavo:
0   Znaki
Predlagane lokacije

Sledi nam

Copyright © 2009 - www.extendoffice.com. | Vse pravice pridržane. Poganja ga ExtendOffice. | Kazalo
Microsoft in logotip Office sta blagovni znamki ali registrirani blagovni znamki družbe Microsoft Corporation v ZDA in / ali drugih državah.
Zaščiteno s Sectigo SSL