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

Hoe verzend ik een e-mail als een bepaalde cel is gewijzigd in Excel?

Dit artikel gaat over het verzenden van een e-mail via Outlook wanneer een cel in een bepaald bereik wordt gewijzigd in Excel.

Stuur een e-mail als een cel in een bepaald bereik is gewijzigd met VBA-code


Stuur een e-mail als een cel in een bepaald bereik is gewijzigd met VBA-code


Als u automatisch een nieuwe e-mail moet maken met een actieve werkmap als bijlage wanneer een cel in het bereik A2: E11 in een bepaald werkblad wordt gewijzigd, kan de volgende VBA-code u helpen.

1. In het werkblad dat u e-mail moet verzenden op basis van de gewijzigde cel in een bepaald bereik, klikt u met de rechtermuisknop op de bladtab en klikt u vervolgens op de Bekijk code vanuit het contextmenu. Zie screenshot:

2. In het opduiken Microsoft Visual Basic voor toepassingen venster, kopieer en plak de onderstaande VBA-code in het codevenster.

VBA-code: stuur een e-mail als een cel in een opgegeven bereik is gewijzigd in Excel

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

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

Opmerkingen:

1). In de code, A2: E11 is het bereik waarop u e-mail verzendt op basis van.
2). Wijzig de hoofdtekst van de e-mail in xMailBody regel in de code.
3). Vervang de Email adres met het e-mailadres van de ontvanger in de rij .To = "E-mailadres".
4). Wijzig het onderwerp van de e-mail in de rij .Subject = "Werkblad gewijzigd in" & ThisWorkbook.FullName.

3. druk de anders + Q toetsen tegelijk om het Microsoft Visual Basic voor toepassingen venster.

Vanaf nu wordt elke cel in het bereik A2: E11 gewijzigd, er wordt een nieuwe e-mail gemaakt met de bijgewerkte werkmap als bijlage. En alle gespecificeerde velden zoals onderwerp, ontvanger en e-mailtekst worden in de e-mail vermeld. Stuur de e-mail.

Opmerking:: De VBA-code werkt alleen als u Outlook als uw e-mailprogramma gebruikt.


Gerelateerde artikelen:


De beste tools voor kantoorproductiviteit

Kutools voor Excel lost de meeste van uw problemen op en verhoogt uw productiviteit met 80%

  • visfuik: Snel invoegen complexe formules, grafieken en alles wat je eerder hebt gebruikt; Versleutel cellen met wachtwoord; Maak een mailinglijst en stuur e-mails ...
  • Super Formula-balk (bewerk eenvoudig meerdere regels tekst en formule); Lay-out lezen (gemakkelijk grote aantallen cellen lezen en bewerken); Plakken in gefilterd bereik...
  • Voeg cellen / rijen / kolommen samen zonder gegevens te verliezen; Gespleten cellen inhoud; Combineer dubbele rijen / kolommen... Voorkom dubbele cellen; Vergelijk Ranges...
  • Selecteer Dupliceren of Uniek Rijen; Selecteer lege rijen (alle cellen zijn leeg); Super zoeken en fuzzy zoeken in veel werkboeken; Willekeurige selectie ...
  • Exacte kopie Meerdere cellen zonder de formuleverwijzing te wijzigen; Maak automatisch verwijzingen naar meerdere bladen; Plaats kogels, Selectievakjes en meer ...
  • Extraheer tekst, Tekst toevoegen, Verwijderen op positie, Ruimte verwijderen; Paging-subtotalen maken en afdrukken; Converteren tussen celinhoud en opmerkingen...
  • Super filter (bewaar en pas filterschema's toe op andere bladen); Geavanceerd sorteren per maand / week / dag, frequentie en meer; Speciaal filter door vet, cursief ...
  • Combineer werkmappen en werkbladen; Tabellen samenvoegen op basis van sleutelkolommen; Gegevens splitsen in meerdere bladen; Batch Converteer xls, xlsx en PDF...
  • Meer dan 300 krachtige functies. Ondersteunt Office / Excel 2007-2019 en 365. Ondersteunt alle talen. Eenvoudig te implementeren in uw onderneming of organisatie. Gratis proefperiode van 30 dagen met volledige functies. 60 dagen geld-terug-garantie.
kte tabblad 201905

Office-tabblad Brengt een interface met tabbladen naar Office en maakt uw werk veel gemakkelijker

  • Schakel bewerken en lezen met tabbladen in Word, Excel, PowerPoint in, Publisher, Access, Visio en Project.
  • Open en maak meerdere documenten in nieuwe tabbladen van hetzelfde venster in plaats van in nieuwe vensters.
  • Verhoogt uw productiviteit met 50% en vermindert elke dag honderden muisklikken!
officetab onderkant
Comments (37)
Nog geen beoordelingen. Beoordeel als eerste!
Deze opmerking is gemaakt door de moderator op de site
Ik zit vast in onderstaande VB-code. Ik probeer een e-mailmelding te krijgen van de gebruiker waar de gegevens zijn gewijzigd. E-mail werkt, maar wanneer ik een wijziging aanbreng, wordt de e-mail in één keer gestart, maar ik wil een e-mail wanneer het Excel-blad wordt opgeslagen en gesloten nadat alle wijzigingen zijn aangebracht aan alle gebruikers die van invloed waren. Dit zou ook moeten werken voor elk van de bladen in de hele Excel-werkmap.

Gelieve te helpen ...

Private Sub Workbook_BeforeSave (ByVal SaveAsUI als Boolean, annuleer als Boolean)

'****Declaratie van objecten en variabelen***

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

On Error Resume Next

Spreadsheets ("TargetSheet").Bereik ("TargetRange").Selecteer

Application.ScreenUpdating = Onwaar Application.DisplayAlerts = Onwaar

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

Stel xRg = bereik ("A2:DA1000") in
Stel xRgSel = Intersect (Doel, xRg) in


ActiveWorkbook.Opslaan
'********** Outlook-toepassing openen**********

Als xRgSel niets is, dan is

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

xMailBody = "Cel(en)" & xRgSel.Address(False, False) & _
" in het werkblad '" & Ik.Naam & "' zijn gewijzigd op " & _
Format$(Nu, "mm/dd/jjjj") & " bij " & Format$(Nu, "uu:mm:ss") & _
" door " & Environ$("gebruikersnaam") & "."
'*************** Ontvangerslijst zoeken**********

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

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

End If

Als Cellen(xRgSel.Rij, "A"). Waarde = "Nitin" Dan

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

End If

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

mailTo = "pakxro**@gmail.com"

End If
'************* E-mail opstellen***********

Met xMailItem

.Naar = mailNaar
.Subject = "Werkblad gewijzigd in" & ThisWorkbook.FullName
.Body = xMailBody
'.Bijlagen.Toevoegen (ThisWorkbook.FullName)
.Scherm

Eindigt met

Stel xRgSel = Niets in
Stel xOutApp = Niets in
Stel xMailItem = Niets in

End If

Application.DisplayAlerts = Waar
Application.ScreenUpdating = True
End Sub
Deze opmerking is gemaakt door de moderator op de site
Beste Pankaj Shukla,
Plaats uw Excel-vraag op ons forum: https://www.extendoffice.com/forum.html om meer ondersteuning over Excel te krijgen van onze Excel-professional.
Deze opmerking is gemaakt door de moderator op de site
Ik heb de macro kunnen maken, maar ik heb een probleem. Ik wil graag automatisch een e-mail sturen wanneer een cel een bepaalde drempel bereikt. De cel is een formule. Als de rekensom onder de genoemde drempel komt, doet het niets; als ik echter rechtstreeks in de cel typ, zal het de macro verwerken zoals gepland. Verpest de formule de macro?
Deze opmerking is gemaakt door de moderator op de site
Hallo Sissy Jones,
De methode in dit artikel: Hoe automatisch e-mail verzenden op basis van celwaarde in Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html kan u helpen het probleem op te lossen.
Deze opmerking is gemaakt door de moderator op de site
Beste Admin,


Ik heb je hulp nodig,



Ik heb een Excel om het dagelijkse werk te controleren dat door onze werknemer uit het veld is gedaan, dus is dit mogelijk om een ​​e-mail van een Excel-blad te activeren als die persoon de gegevens in dat Excel-blad op een bepaald tijdstip niet heeft bijgewerkt.
Deze opmerking is gemaakt door de moderator op de site
Hoi,
Kan hier niet mee helpen.
Deze opmerking is gemaakt door de moderator op de site
Als ik de celwaarde wil verzenden in plaats van het adres... wat moet ik dan in de code veranderen?
Deze opmerking is gemaakt door de moderator op de site
Hoi,
U kunt de onderstaande VBA-code proberen.

Particulier subwerkblad_Wijziging (ByVal-doel als bereik)
Dim xRgSel als bereik
Dim xOutApp als object
Dim xMailItem als object
Dim xMailBody als tekenreeks
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Stel xRg = Bereik ("A2:E11") in
Stel xRgSel = Intersect (Doel, xRg) in
ActiveWorkbook.Opslaan
Als xRgSel niets is, dan is
Stel xOutApp = CreateObject ("Outlook.Application") in
Stel xMailItem = xOutApp.CreateItem(0) in
xMailBody = "Cel(en)" & xRgSel.Address(False, False) & _
xRgSel.Value & _
" in het werkblad '" & Ik.Naam & "' zijn gewijzigd op " & _
Format$(Nu, "mm/dd/jjjj") & " bij " & Format$(Nu, "uu:mm:ss") & _
" door " & Environ$("gebruikersnaam") & "."

Met xMailItem
.To = "E-mailadres"
.Subject = "Werkblad gewijzigd in" & ThisWorkbook.FullName
.Body = xMailBody
.Bijlagen.Toevoegen (ThisWorkbook.FullName)
.Scherm
Eindigt met
Stel xRgSel = Niets in
Stel xOutApp = Niets in
Stel xMailItem = Niets in
End If
Application.DisplayAlerts = Waar
Application.ScreenUpdating = True
End Sub
Deze opmerking is gemaakt door de moderator op de site
Wat als we alleen de bijgewerkte opmerkingen in die cel willen en niet de volledige celwaarde. Het zou alleen de laatste opmerkingen moeten tonen die in de cel zijn toegevoegd
Deze opmerking is gemaakt door de moderator op de site
Heb je dit uitgevonden?
Deze opmerking is gemaakt door de moderator op de site
Geweldige informatie.
Vraag over de informatie die aan de e-mail kan worden toegevoegd.
Met behulp van uw voorbeeld hierboven ....

Als u een waarde in F4 had, hoe zou u dan de F4-waarde opnemen in de e-mail die werd gegenereerd toen D4 werd gewijzigd??
Deze opmerking is gemaakt door de moderator op de site
als ik dan die hele rij moet sturen?
Deze opmerking is gemaakt door de moderator op de site
Ik heb bovenstaande VBA-code geprobeerd: stuur een e-mail als de cel in een opgegeven bereik is gewijzigd in Excel. Deze VBA werkt voor mij, behalve het verzenden van e-mail. Wanneer de gegevens in het opgegeven bereik worden gewijzigd, wordt automatisch een e-mail gegenereerd met gewijzigde celdetails. De e-mail wordt echter niet automatisch naar de ontvanger verzonden en de gebruiker moet op de verzendknop in de e-mail klikken. Wat ik hier zoek, is dat de e-mail automatisch naar de ontvangers moet worden verzonden wanneer deze wordt gegenereerd. Help me alstublieft om hiervoor een code te verstrekken. Erg bedankt
Deze opmerking is gemaakt door de moderator op de site
Hallo Jimmy Joseph,
Vervang de regel ".Display" door ".Send". Hoop dat ik kan helpen. Bedankt voor het commentaar.
Deze opmerking is gemaakt door de moderator op de site
hoi; is er een manier om de weergegeven tekst te wijzigen met behulp van informatie uit andere cellen (van de eerste rij en de eerste kolom)? als ik bijvoorbeeld cel K15 verander, wil ik in het bericht informatie opnemen over cellen A15 en K1? wat moet ik veranderen in de code? heel erg bedankt
Deze opmerking is gemaakt door de moderator op de site
hallo Laona. weet je hoe je dit kunt doen?
Deze opmerking is gemaakt door de moderator op de site
Hallo. Hoe pas ik de code aan zodat een e-mail naar een ander e-mailadres wordt gestuurd als een ander celbereik wordt bewerkt?
Deze opmerking is gemaakt door de moderator op de site
Hulp bij dit verzoek? Ik heb hetzelfde probleem. Ik wil meerdere e-mailadressen per rij toevoegen, maar als ik één rij verander, verandert het hele werkblad. Hoe kan ik de wijzigingen beperken tot slechts één rij?
Deze opmerking is gemaakt door de moderator op de site
linie bewerken:
1). In de code is A2:E11 het bereik waarop u e-mail verzendt.
en
3). Vervang het e-mailadres door het e-mailadres van de ontvanger in de regel .To = "E-mailadres".

Werkt prima.
Deze opmerking is gemaakt door de moderator op de site
Kunt u dit alstublieft nader toelichten. Hoe herhaal je de code om naar een ander e-mailadres te sturen op basis van een ander bereik dat wordt gewijzigd. Ik heb geprobeerd de onderstaande code te kopiëren en te plakken en te wijzigen volgens uw opmerking, maar toch lijkt alleen het eerste bereik de opdracht uit te voeren en de e-mail te schrijven.
Deze opmerking is gemaakt door de moderator op de site
Heeft iemand hier een antwoord op?
Deze opmerking is gemaakt door de moderator op de site
Hallo, ik probeerde e-mails op mijn blad te verzenden met één waarde die op het blad was gewijzigd. Als in kolom H de status wordt gewijzigd in ="4", moet de Order-ID aan de linkerkant naar één gebruiker worden verzonden. Het blad werkt dynamisch, dus ik heb een bereik van D9:D140 waar order-ID's worden opgeslagen en statuswijzigingen worden aangebracht in hetzelfde bereik op H9:H140. Hoe kan ik het doel bereiken om dit te doen en de bestellings-ID naar mijn klant sturen wanneer de status is gewijzigd in ="4" ?
Deze opmerking is gemaakt door de moderator op de site
Zou het mogelijk zijn om een ​​andere referentiecel in de xMailBody in dezelfde kolom weer te geven in plaats van het gewijzigde celadres??
Deze opmerking is gemaakt door de moderator op de site
Hallo Sam, bedoel je dat je willekeurig een referentiecel wilt selecteren in dezelfde kolom van het gewijzigde celadres? Of typ je handmatig een referentiecel in de xMailBody-regel van de code? Het is gemakkelijk om handmatig een referentiecel in de code te typen, omsluit de referentiecel gewoon met dubbele aanhalingstekens zoals hieronder weergegeven: xMailBody = "Cell(s) " & "D3" & ", " & "D8" & _

Deze opmerking is gemaakt door de moderator op de site
Is het mogelijk om dit te wijzigen, zodat de e-mail alleen wordt weergegeven als een cel in een bereik is gewijzigd om "Ja" te zeggen. Zou willen dat het niets doet als het een andere waarde heeft.
Deze opmerking is gemaakt door de moderator op de site
Bedankt voor de code, deze code werkt als ik de waarde invoer en op enter druk. Maar in mijn geval wordt de cel automatisch gevuld met formule, en wanneer de waarde is bereikt, wordt de e-mail niet geopend, dus de code werkt in dit geval niet. Dank u bij voorbaat!
Deze opmerking is gemaakt door de moderator op de site
Hallo hakana,
De volgende VBA-code kan u helpen het probleem op te lossen. Probeer het alsjeblieft. Bedankt voor uw feedback.

Private Sub Worksheet_Change (ByVal-doel als bereik)
'Bijgewerkt door' Extendoffice 2022 / 04/ 15
Dim xRgSel als bereik
Dim xOutApp als object
Dim xMailItem als object
Dim xMailBody als tekenreeks
Dim xBoolean als Boolean
Dim xItsRG als bereik
Dim xDD's als bereik
Dim xDs als bereik
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBooleaans = Onwaar
Stel xRg = bereik ("E2:E13") in

Stel xItsRG = Intersect (Doel, xRg) in
Stel xDDs = Intersect (Target.DirectDependents, xRg) in
Stel xDs = Intersect(Target.Dependents, xRg)
Zo niet (xItsRG is niets) Dan
Stel xRgSel = xItsRG in
xBooleaans = Waar
ElseIf Not (xDDs Is Nothing) Dan
Stel xRgSel = xDDs . in
xBooleaans = Waar
ElseIf Not (xDs Is Nothing) Dan
Stel xRgSel = xDs . in
xBooleaans = Waar
End If


ActiveWorkbook.Opslaan
Als xBoolean Dan
Debug.Print xRgSel.Adres


Stel xOutApp = CreateObject ("Outlook.Application") in
Stel xMailItem = xOutApp.CreateItem(0) in
xMailBody = "Cel(en)" & xRgSel.Address(False, False) & _
" in het werkblad '" & Ik.Naam & "' zijn gewijzigd op " & _
Format$(Nu, "mm/dd/jjjj") & " bij " & Format$(Nu, "uu:mm:ss") & _
" door " & Environ$("gebruikersnaam") & "."

Met xMailItem
.To = "E-mailadres"
.Subject = "Werkblad gewijzigd in" & ThisWorkbook.FullName
.Body = xMailBody
.Bijlagen.Toevoegen (ThisWorkbook.FullName)
.Scherm
Eindigt met
Stel xRgSel = Niets in
Stel xOutApp = Niets in
Stel xMailItem = Niets in
End If
Application.DisplayAlerts = Waar
Application.ScreenUpdating = True
End Sub
Deze opmerking is gemaakt door de moderator op de site
Hallo, ik heb een vergelijkbare code gemaakt, maar ik zou graag een voorwaarde willen ***en waarbij als een celwaarde wordt verwijderd, deze geen e-mail zal verzenden wanneer deze wordt opgeslagen / gesloten. Er wordt alleen een e-mail verzonden als er een celwaarde is ingevoerd. Weet jij hoe je dit moet doen? Dit is mijn code:

CODE VOOR AUTOMATISCHE E-MAIL NAAR IEMAND WANNEER EXCEL-WERKBOEK WORDT BIJGEWERKT

BLADCODE:

Optie Expliciet 'Excel-werkblad wijzigingsgebeurtenis Bereik'
Particulier subwerkblad_Wijziging (ByVal-doel als bereik)
Indien niet snijden (doel, bereik ("C3:D62")) is dan niets
'Target.EntireRow.Interior.ColorIndex = 15
Bereik ("XFD1048576"). Waarde = 15
End If
Indien niet snijden (doel, bereik ("I3:J21")) is dan niets
'Target.EntireRow.Interior.ColorIndex = 15
Bereik ("XFD1048576"). Waarde = 15
End If
End Sub


WERKBOEKCODE:

Private Sub Workbook_BeforeClose (Annuleren als Boolean)
If Me.Saved = False Dan Me.Save

Dim xOutApp als object
Dim xMailItem als object
Dim xName als string

Als Bereik ("XFD1048576"). Waarde = 15 Dan
On Error Resume Next
Stel xOutApp = CreateObject ("Outlook.Application") in
Stel xMailItem = xOutApp.CreateItem(0) in
xName = ActiveWorkbook.FullName
Met xMailItem
.Aan = "e-mail"
.CC = ""
.Subject = "bericht"
.Body = "bericht!"
.Bijlagen.*** xNaam
.Scherm
'.versturen
Eindigt met
End If
Stel xMailItem = Niets in
Stel xOutApp = Niets in



End Sub

Private Sub Workbook_Open ()
Bereik ("XFD1048576"). Wissen
End Sub
Deze opmerking is gemaakt door de moderator op de site
Hallo allemaal,

der Code würde gut für mein Vorhaben pass, aber gibt es die Möglichkeit, dass er eine E-Mail beim speichern schreibt mit allen Zellen die geändert wurden? Dus wie es jetzt ist ,würde er jede geänderte Zelle einzeln senden. Dies ist dann 10 wenn zB 10 Zellen angepasst werden was 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.
Deze opmerking is gemaakt door de moderator op de site
Hallo Esser123,
De volgende VBA-codes kunnen helpen. Na het wijzigen van de cellen in het opgegeven bereik en het opslaan van de werkmap, verschijnt er een e-mail met alle gewijzigde cellen in de hoofdtekst van de e-mail en wordt de werkmap ook als bijlage in de e-mail ingevoegd. Volg de volgende stappen:
1. Open het werkblad met de cellen waarop u e-mails wilt verzenden, klik met de rechtermuisknop op de bladtab en klik op Bekijk code vanuit het rechtsklikmenu. Kopieer vervolgens de volgende code naar het blad (code) venster.
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. Dubbelklik in de Visual Basic-editor op Dit Werkboek in het linkerdeelvenster en kopieer vervolgens de volgende VBA-code naar de ThisWorkbook (code) venster.
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
Deze opmerking is gemaakt door de moderator op de site
Ik heb hulp nodig bij het activeren van een e-mail met een kleine wijziging. In plaats van een numerieke waarde of het handmatig invoeren van de informatie in de cel, zullen cellen in kolom B veranderen in 'Y' geactiveerd door een formule in andere cellen in die rij. De formule voor kolom B is =IF([@[Quantity in Stock]]>[@[Reorder Level]],"Y"), wat aangeeft dat de voorraad bijna op is en opnieuw moet worden besteld. Ik moet een automatische e-mail activeren wanneer een celwaarde in kolom B verandert in 'Y', dus ik word automatisch via e-mail op de hoogte gebracht van de lage voorraad. Ik heb alles geprobeerd wat ik kan bedenken om reeds verstrekte codes te wijzigen, maar niets lijkt voor mij te werken... help alstublieft!
Deze opmerking is gemaakt door de moderator op de site
Hallo Kathryn F,
De volgende VBA-code kan u helpen het probleem op te lossen. Probeer het alsjeblieft. Bedankt voor je reactie.
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
Deze opmerking is gemaakt door de moderator op de site
Hallo en bedankt voor deze handleiding.
Een moeilijkheidsgraad voor de toepassing van de plage de recherche.
Dans de code, vraag naar de versie van het plage C2:C4.
Tout fonctionne bien si je modifie C2, C3 of C4 uniquement. Cela fonctionne aussi si je modifie C2+C3+C4 of C2+C3 of C3+C4 mais cela ne fonctionne pas si j'ai un saut dans la plage. Par voorbeeld, si je modifieer C2 en C4 zonder modifier C3.
Wat is er aan de hand?
Bij voorbaat dank.

Particulier subwerkblad_Wijziging (ByVal-doel als bereik)
'Bijgewerkt door' Extendoffice 20220921
Dim xAdres als string
Dim xDRg, xRgSel, xRg als bereik

xAdres = "C2:C4"
Stel xDRg = Bereik (xAdres) in
Stel xRgSel = Intersect (Doel, xDRg) in
Bij fout Ga naar Err1
Als xRgSel niets is, dan is
If ThisWorkbook.gChangeRange = "" Dan
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Anders
Stel xRg = bereik in (ThisWorkbook.gChangeRange)
Stel xRg = Application.Union (xRg, xRgSel) in
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
End If
End If
Exit Sub
Fout1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub


-----

Optie Expliciet
Openbare gChangeRange As String
Private Sub Workbook_AfterSave (ByVal Success As Boolean)
'Bijgewerkt door' Extendoffice 20220921
Dim xRgSel, xRg als bereik
Dim xOutApp als object
Dim xMailItem als object
Dim xMailBody als tekenreeks
'Bij fout Hervatten volgende
Bij fout Ga naar Err1
Stel xRg = bereik in (gChangeBereik)
Als niet xRg niets is, dan
Stel xOutApp = CreateObject ("Outlook.Application") in
Stel xMailItem = xOutApp.CreateItem(0) in
xMailBody = "Cher Jean-Marie, " & vbCrLf & vbCrLf & "Dans le fichier : " & ThisWorkbook.FullName & vbCrLf & "Lage de cellules een eté modifiée :" & xRg.Address(False, False) & vbCrLf & "Cordialement"
Met xMailItem
.To = "x.xxxxxx@xxxx.fr"
.Subject = "Gewijzigde wijzigingen" & ThisWorkbook.Name
.Body = xMailBody
.Bijlagen.Toevoegen (ThisWorkbook.FullName)
.Scherm
Eindigt met
Stel xRgSel = Niets in
Stel xOutApp = Niets in
Stel xMailItem = Niets in
End If
Fout1:
gChangeRange = ""
End Sub
Deze opmerking is gemaakt door de moderator op de site
Ik wil de e-mail naar 5 personen sturen. Welke delineator wordt gebruikt tussen elk e-mailadres?
Deze opmerking is gemaakt door de moderator op de site
Hi Joe,
Gebruik een puntkomma om de e-mailadressen van elkaar te scheiden.
Deze opmerking is gemaakt door de moderator op de site
Hier is nog een vraag. Als een cel verandert, wordt er een e-mail verzonden. als 3 cellen veranderen, verzendt het 3 e-mails. Hoe stop je dit zodat het maar 1 e-mail stuurt als de bewerkingen zijn voltooid?
Deze opmerking is gemaakt door de moderator op de site
Hi Joe,
Stel dat u het bereik hebt opgegeven als "A2:E11" in de code. Hoe kan ik verifiëren wanneer alle bewerkingen zijn voltooid?
Er zijn nog geen reacties geplaatst
Laat uw commentaar
Posten als gast
×
Beoordeel dit bericht:
0   Personages
Voorgestelde locaties