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

Kako poslati e-pošto, če je določena celica spremenjena v Excelu?

Ta članek govori o pošiljanju e-pošte prek Outlooka, ko je celica v določenem obsegu spremenjena v Excelu.

Pošljite e-pošto, če je celica v določenem obsegu spremenjena s kodo VBA


Pošljite e-pošto, če je celica v določenem obsegu spremenjena s kodo VBA

Če morate samodejno ustvariti novo e-pošto s priloženim aktivnim delovnim zvezkom, ko se na določenem delovnem listu spremeni celica v obsegu A2:E11, vam lahko pomaga naslednja koda VBA.

1. Na delovnem listu, ki mu morate poslati e-pošto na podlagi njegove spremenjene celice v določenem obsegu, z desno miškino tipko kliknite zavihek lista in nato kliknite 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 Code.

Koda VBA: Pošljite e-pošto, če je celica v določenem obsegu spremenjena v Excelu

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

Opombe:

1). V kodi, A2: E11 je obseg, na katerem boste poslali e-pošto.
2). Prosimo, spremenite telo e-pošte, kot potrebujete xMailBody vrstico v kodi.
3). Zamenjajte Email naslov z e-poštnim naslovom prejemnika v vrstici .To = "E-poštni naslov".
4). V vrstici spremenite zadevo e-pošte .Subject = "Delovni list spremenjen v" & ThisWorkbook.FullName.

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

Od zdaj naprej se spreminja katera koli celica v območju A2: E11, ustvari se novo e-poštno sporočilo s priloženim posodobljenim delovnim zvezkom. Vsa navedena polja, kot so zadeva, prejemnik in telo e-pošte, bodo navedena v e-poštnem sporočilu. Pošljite e-pošto.

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


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 (37)
Ocene še ni. Bodite prvi in ​​ocenite!
Ta komentar je moderator na spletnem mestu minimiziral
Obtičal sem pod VB kodo. Poskušam prejeti e-poštno obvestilo uporabnika, kjer so bili podatki spremenjeni. E-pošta deluje, toda ko naredim kakršno koli spremembo, se e-pošta sproži naenkrat, vendar želim e-pošto, ko je Excelov list shranjen in zaprt, potem ko sem izvedel vse spremembe za vse uporabnike, ki so vplivali. To bi moralo delovati tudi za katerega koli od listov v celotnem delovnem zvezku Excel.

Prosim pomagajte...

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

'****Deklaracija predmetov in spremenljivk******

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

On Error Resume Next

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

Application.ScreenUpdating = False Application.DisplayAlerts = False

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

Nastavite xRg = razpon ("A2:DA1000")
Nastavi xRgSel = preseči (cilj, xRg)


ActiveWorkbook.Save
'********** Odpiranje aplikacije Outlook**********

Če ne, potem je xRgSel nič

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

xMailBody = "Celica(e)" & xRgSel.Address(False, False) & _
" na delovnem listu "" & Me.Ime & "" sta bila spremenjena na " & _
Format$(Zdaj, "mm/dd/llll") & " at " & Format$(Zdaj, "hh:mm:ss") & _
" od " & Environ$("uporabniško ime") & "."
'********** Iskanje seznama prejemnikov**************

Če celice(xRgSel.Row, "A").Value = "Pankaj" Potem

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

Konec Če

Če Cells(xRgSel.Row, "A").Value = "Nitin" Potem

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

Konec Če

Če celice(xRgSel.Row, "A").Value = "Chandan" Potem

mailTo = "pakxro**@gmail.com"

Konec Če
'************** Sestavljanje e-pošte**************

Z xMailItemom

.Za = mailTo
.Subject = "Delovni list spremenjen v" & ThisWorkbook.FullName
.Telo = xMailBody
'.Priloge.Dodaj (Ta delovni zvezek.FullName)
.Prikaz

Končaj s

Nastavite xRgSel = Nič
Nastavite xOutApp = Nič
Nastavite xMailItem = Nič

Konec Če

Application.DisplayAlerts = True
Application.ScreenUpdating = Res
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Pankaj Shukla,
Objavite svoje vprašanje o Excelu na našem forumu: https://www.extendoffice.com/forum.html za več podpore o Excelu od našega strokovnjaka za Excel.
Ta komentar je moderator na spletnem mestu minimiziral
Lahko sem ustvaril makro, vendar imam težavo. Rad bi samodejno poslal e-pošto, ko celica doseže določen prag. Celica je formula. Ko vsota izračuna pade pod omenjeni prag, ne naredi ničesar; če pa vpišem neposredno v celico, bo makro obdelal po načrtih. Ali formula pokvari makro?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Sissy Jones,
Metoda v tem članku: Kako samodejno poslati e-pošto na podlagi vrednosti celice v Excelu?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html vam lahko pomaga rešiti težavo.
Ta komentar je moderator na spletnem mestu minimiziral
Spoštovani skrbnik,


Rabim vašo pomoč,



Imam excel za spremljanje podrobnosti dnevnega dela našega delavca na terenu, tako da je to mogoče sprožiti e-pošto iz excelovega lista, če ta tip v določenem času ni posodobil podatkov v tem excelovem listu.
Ta komentar je moderator na spletnem mestu minimiziral
Hi,
Ne morem pomagati s tem.
Ta komentar je moderator na spletnem mestu minimiziral
Če želim namesto naslova poslati vrednost celice.. kaj naj spremenim v kodi?
Ta komentar je moderator na spletnem mestu minimiziral
Hi,
Lahko poskusite s spodnjo kodo VBA.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Dim xRgSel As Range
Zatemnite xOutApp kot objekt
Zatemni xMailItem kot objekt
Zatemni xMailBody kot niz
On Error Resume Next
Application.ScreenUpdating = Napačno
Application.DisplayAlerts = False
Nastavite xRg = Obseg ("A2:E11")
Nastavi xRgSel = preseči (cilj, xRg)
ActiveWorkbook.Save
Če ne, potem je xRgSel nič
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xMailItem = xOutApp.CreateItem(0)
xMailBody = "Celica(e)" & xRgSel.Address(False, False) & _
xRgSel.Value & _
" na delovnem listu "" & Me.Ime & "" sta bila spremenjena na " & _
Format$(Zdaj, "mm/dd/llll") & " at " & Format$(Zdaj, "hh:mm:ss") & _
" od " & Environ$("uporabniško ime") & "."

Z xMailItemom
.To = "E-poštni naslov"
.Subject = "Delovni list spremenjen v" & ThisWorkbook.FullName
.Telo = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Prikaz
Končaj s
Nastavite xRgSel = Nič
Nastavite xOutApp = Nič
Nastavite xMailItem = Nič
Konec Če
Application.DisplayAlerts = True
Application.ScreenUpdating = Res
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Kaj pa, če želimo samo posodobljene komentarje v tej celici in ne celotne vrednosti celice. Prikazati bi moral samo najnovejše komentarje, dodane v celico
Ta komentar je moderator na spletnem mestu minimiziral
Ste to ugotovili?
Ta komentar je moderator na spletnem mestu minimiziral
Odlične informacije.
Vprašanje glede informacij, ki jih je mogoče dodati v e-pošto.
Z uporabo vašega zgornjega primera....

Če bi imeli vrednost v F4, kako bi vključili vrednost F4 v e-poštno sporočilo, ki je bilo ustvarjeno, ko je bil D4 spremenjen??
Ta komentar je moderator na spletnem mestu minimiziral
če moram potem poslati celotno vrstico?
Ta komentar je moderator na spletnem mestu minimiziral
Preizkusil sem zgornjo kodo VBA: Pošlji e-pošto, če je celica v določenem obsegu spremenjena v Excelu. Ta VBA deluje zame, razen za pošiljanje e-pošte. Ko se podatki spremenijo v danem obsegu, se samodejno ustvari e-poštno sporočilo s spremenjenimi podrobnostmi celice. Vendar se e-pošta ne pošlje samodejno prejemniku in uporabnik mora v e-poštnem sporočilu klikniti gumb za pošiljanje. Tukaj iščem, da se mora e-pošta samodejno poslati prejemnikom, ko je ustvarjena. Prosim, pomagajte mi, da navedem kodo za to. Najlepša hvala
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Jimmy Joseph,
Prosimo, zamenjajte vrstico ".Display" s ".Send". Upam, da lahko pomagam. Hvala za komentar.
Ta komentar je moderator na spletnem mestu minimiziral
zdravo; ali obstaja način za spreminjanje prikazanega besedila z uporabo informacij iz drugih celic (iz prve vrstice in prvega stolpca)? na primer, če spremenim celico K15, želim v sporočilo vključiti informacije o celicah A15 in K1? kaj naj spremenim v kodi? najlepša hvala
Ta komentar je moderator na spletnem mestu minimiziral
zdravo Laona. ali ugotovite, kako lahko to storite?
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo. Kako spremenim kodo, tako da se e-pošta pošlje na drug e-poštni naslov, če se ureja drug obseg celic?
Ta komentar je moderator na spletnem mestu minimiziral
Kakšna pomoč glede te zahteve? imam isto težavo. Na vrstico želim dodati več e-poštnih naslovov, a ko spremenim eno vrstico, se spremeni celoten delovni list. Kako lahko omejim spremembe samo na eno vrstico?
Ta komentar je moderator na spletnem mestu minimiziral
Uredi vrstico:
1). V kodi je A2:E11 obseg, na podlagi katerega boste pošiljali e-pošto.
in
3). E-poštni naslov zamenjajte z e-poštnim naslovom prejemnika v vrstici .To = "E-poštni naslov".

Dobro deluje.
Ta komentar je moderator na spletnem mestu minimiziral
Ali lahko prosim to dodatno razložite. Kako ponovite kodo za pošiljanje na drugo e-pošto na podlagi drugega obsega, ki se spreminja. Poskušal sem kopirati in prilepiti spodnjo kodo ter jo spremeniti v skladu z vašim komentarjem, vendar se zdi, da samo prvi obseg izvede ukaz in napiše e-pošto.
Ta komentar je moderator na spletnem mestu minimiziral
Ima kdo odgovor na to?
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni, poskušal sem poslati e-pošto na svoj list z uporabo ene vrednosti, spremenjene na listu. Če bo v stolpcu H status spremenjen na ="4", je treba ID naročila na levi poslati enemu uporabniku. List deluje dinamično, tako da imam razpon od D9:D140, kjer so shranjeni ID-ji naročila in spremembe statusa so narejene v istem obsegu na H9:H140. Kako lahko dosežem cilj in pošljem ID naročila svoji stranki, ko je status spremenjen na ="4"?
Ta komentar je moderator na spletnem mestu minimiziral
Ali bi bilo mogoče prikazati drugo referenčno celico v xMailBody v istem stolpcu namesto spremenjenega naslova celice??
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Sam, ali mislite naključno izbrati referenčno celico v istem stolpcu spremenjenega naslova celice? Ali pa ročno vnesite referenčno celico v vrstico xMailBody kode? Referenčno celico je enostavno vnesti v kodo, samo priložite referenčno celico z dvojnimi narekovaji, kot je prikazano spodaj: xMailBody = "Cell(s)" & "D3" & ", " & "D8" & _

Ta komentar je moderator na spletnem mestu minimiziral
Ali je mogoče to spremeniti, tako da prikaže e-pošto samo, če je bila celica v obsegu spremenjena tako, da reče "Da". Rad bi, da nič ne naredi, če je kakšna druga vrednost.
Ta komentar je moderator na spletnem mestu minimiziral
Hvala za kodo, ta koda deluje, ko vnesem vrednost in pritisnem enter. Toda v mojem primeru se celica samodejno polni s formulo in ko je vrednost dosežena, ne odpre e-pošte, tako da koda v tem primeru ne deluje. Hvala v naprej!
Ta komentar je moderator na spletnem mestu minimiziral
Živjo hakana,
Naslednja koda VBA vam lahko pomaga rešiti težavo. Prosim, poskusite. Hvala za vaše mnenje.

Zasebni pod delovni list_Change(ByVal Target As Range)
'Posodobil Extendoffice 2022 / 04 / 15
Dim xRgSel As Range
Zatemnite xOutApp kot objekt
Zatemni xMailItem kot objekt
Zatemni xMailBody kot niz
Dim xBoolean Kot Boolean
Dim xItsRG kot obseg
Zatemni xDD kot obseg
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = Napačno
Application.DisplayAlerts = False
xBoolean = False
Nastavite xRg = Obseg("E2:E13")

Nastavi xItsRG = seči (Cilj, xRg)
Nastavite xDDs = Intersect(Target.DirectDependents, xRg)
Nastavi xDs = seči (Target.Dependents, xRg)
Če ne (xItsRG ni nič) Potem
Nastavite xRgSel = xItsRG
xBoolean = Res
ElseIf Not (xDDs Is Nothing) Potem
Nastavite xRgSel = xDDs
xBoolean = Res
ElseIf Not (xDs Is Nothing) Potem
Nastavite xRgSel = xDs
xBoolean = Res
Konec Če


ActiveWorkbook.Save
Če je xBoolean Potem
Debug.Print xRgSel.Address


Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xMailItem = xOutApp.CreateItem(0)
xMailBody = "Celica(e)" & xRgSel.Address(False, False) & _
" na delovnem listu "" & Me.Ime & "" sta bila spremenjena na " & _
Format$(Zdaj, "mm/dd/llll") & " at " & Format$(Zdaj, "hh:mm:ss") & _
" od " & Environ$("uporabniško ime") & "."

Z xMailItemom
.To = "E-poštni naslov"
.Subject = "Delovni list spremenjen v" & ThisWorkbook.FullName
.Telo = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Prikaz
Končaj s
Nastavite xRgSel = Nič
Nastavite xOutApp = Nič
Nastavite xMailItem = Nič
Konec Če
Application.DisplayAlerts = True
Application.ScreenUpdating = Res
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni, ustvaril sem podobno kodo, vendar bi rad *** pogoj, pri katerem, če je vrednost celice izbrisana, ne bo poslala e-pošte, ko je shranjena/zaprta. E-poštno sporočilo bo poslalo le, ko je bila vnesena vrednost celice. Ali veste, kako to storiti? To je moja koda:

KODA ZA SAMODEJNO E-POŠTO NEKOMU, KO JE POSODOBLJEN EXCEL WORKBOOK

KODA LISTA:

Možnost Eksplicitno 'Obseg dogodka spremembe delovnega lista Excel
Zasebni poddelovni list_Spremeni (ByVal Target As Range)
Če se ne seka(Cilj, obseg("C3:D62")) potem ni nič
'Target.EntireRow.Interior.ColorIndex = 15
Obseg("XFD1048576").Vrednost = 15
Konec Če
Če se ne seka (Target, Range("I3:J21")) je potem nič
'Target.EntireRow.Interior.ColorIndex = 15
Obseg("XFD1048576").Vrednost = 15
Konec Če
End Sub


KODA DELOVNEGA ZVEZKA:

Private Sub Workbook_BeforeClose(Prekliči kot Boolean)
Če Me.Saved = False, potem Me.Save

Zatemnite xOutApp kot objekt
Zatemni xMailItem kot objekt
Dim xName kot niz

Če je obseg("XFD1048576").Vrednost = 15 Potem
On Error Resume Next
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
Z xMailItemom
.To = "e-pošta"
.CC = ""
.Subject = "sporočilo"
.Body = "sporočilo!"
.Priponke.*** xIme
.Prikaz
'.pošlji
Končaj s
Konec Če
Nastavite xMailItem = Nič
Nastavite xOutApp = Nič



End Sub

Zasebni delovni zvezek_Open()
Obseg("XFD1048576"). Počisti
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Hi all,

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.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Esser123,
Naslednje kode VBA so lahko v pomoč. Ko spremenite celice v določenem obsegu in shranite delovni zvezek, se prikaže e-poštno sporočilo s seznamom vseh spremenjenih celic v telesu e-poštnega sporočila, delovni zvezek pa bo v e-poštno sporočilo vstavljen tudi kot priloga. Sledite naslednjim korakom:
1. Odprite delovni list, ki vsebuje celice, na podlagi katerih želite poslati e-pošto, z desno miškino tipko kliknite zavihek lista in kliknite Ogled kode iz menija z desnim klikom. Nato kopirajte naslednjo kodo v okno lista (koda).
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. V urejevalniku Visual Basic dvokliknite Ta delovni zvezek v levem podoknu, nato kopirajte naslednjo kodo VBA v ThisWorkbook (koda) 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
Ta komentar je moderator na spletnem mestu minimiziral
Potrebujem pomoč pri sprožitvi e-pošte z majhno spremembo. Namesto številske vrednosti ali ročnega vnosa informacij v celico se bodo celice v stolpcu B spremenile v »Y«, ki jih sproži formula v drugih celicah v tej vrstici. Formula za stolpec B je =IF([@[Količina na zalogi]]>[@[Raven ponovnega naročila]],,"Y"), kar kaže, da je zaloge malo in jo je treba ponovno naročiti. Sprožiti moram samodejno e-pošto, ko se vrednost celice v stolpcu B spremeni v »Y«, tako da sem po e-pošti samodejno obveščen o nizki zalogi. Poskusil sem vse, kar se mi je zdelo pri spreminjanju kod, ki so že bile na voljo, vendar se mi zdi, da nič ne deluje ... prosim za pomoč!
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Kathryn F,
Naslednja koda VBA vam lahko pomaga rešiti težavo. Prosim poskusite. Hvala za vaš komentar.
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
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni in hvala za vadnico.
J'ai cependant une difficulté pour l'application 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 ali C4 edinstveno. Cela fonctionne aussi si je modifie C2+C3+C4 ou C2+C3 ou C3+C4 mais cela ne fonctionne pas si j'ai un saut dans la plage. Na primer, ste spremenili C2 in C4 brez modifikatorja C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur ?
Merci d'avance.

Zasebni poddelovni list_Spremeni (ByVal Target As Range)
'Posodobil Extendoffice 20220921
Dim xAddress kot niz
Dim xDRg, xRgSel, xRg As Range

xNaslov = "C2:C4"
Nastavite xDRg = obseg (xnaslov)
Nastavite xRgSel = presek (target, xDRg)
Ob napaki Pojdi na Err1
Če ne, potem je xRgSel nič
Če je ThisWorkbook.gChangeRange = "" Potem
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Else
Nastavi xRg = Range(ThisWorkbook.gChangeRange)
Nastavite xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
Konec Če
Konec Če
Exit Sub
Err1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub


-----

Option Explicit
Javni gChangeRange kot niz
Private Sub Workbook_AfterSave(ByVal Uspeh kot Boolean)
'Posodobil Extendoffice 20220921
Dim xRgSel, xRg As Range
Zatemnite xOutApp kot objekt
Zatemni xMailItem kot objekt
Zatemni xMailBody kot niz
'Ob napaki Nadaljuj naprej
Ob napaki Pojdi na Err1
Nastavi xRg = Range(gChangeRange)
Če ne, potem je xRg nič
Nastavi xOutApp = CreateObject("Outlook.Application")
Nastavi 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, False) & vbCrLf & vbCrLf & "Srčnost"
Z xMailItemom
.To = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées " & ThisWorkbook.Name
.Telo = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Prikaz
Končaj s
Nastavite xRgSel = Nič
Nastavite xOutApp = Nič
Nastavite xMailItem = Nič
Konec Če
Err1:
gChangeRange = ""
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
E-pošto bi rad poslal 5 osebam. Kateri ločilnik se uporablja med posameznimi e-poštnimi naslovi?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Joe,
E-poštne naslove ločite s podpičjem.
Ta komentar je moderator na spletnem mestu minimiziral
Tukaj je še eno vprašanje. Če se ena celica spremeni, pošlje e-pošto. če se spremenijo 3 celice, pošlje 3 e-poštna sporočila. Kako to ustaviti, da pošlje samo 1 e-pošto, ko so urejanja končana?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Joe,
Recimo, da ste v kodi določili obseg kot "A2:E11". Kako lahko preverim, kdaj so končana vsa urejanja?
Tu še ni objavljenih komentarjev
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