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

Hur skickar man automatiskt e-post baserat på cellvärde i Excel?

Antar att du vill skicka ett e-postmeddelande via Outlook till en viss mottagare baserat på ett angivet cellvärde i Excel. Till exempel, när värdet på cell D7 i ett kalkylblad är större än 200, skapas ett e-postmeddelande automatiskt. Den här artikeln introducerar en VBA-metod för dig att snabbt lösa problemet.

Skicka automatiskt e-post baserat på cellvärde med VBA-kod


Skicka automatiskt e-post baserat på cellvärde med VBA-kod

Gör så här för att skicka ett e-postmeddelande baserat på cellvärde i Excel.

1. I kalkylbladet måste du skicka e-post baserat på dess cellvärde (här står cellen D7), högerklicka på arkfliken och välj Visa kod från snabbmenyn. Se skärmdump:

2. I pop-up Microsoft Visual Basic för applikationer kopiera och klistra in nedanstående VBA-kod i arkfönstret.

VBA-kod: Skicka e-post via Outlook baserat på cellvärde i Excel

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

Anmärkningar:

1). I VBA-koden, D7 och värde> 200 är det cell- och cellvärde du skickar e-post baserat på.
2). Ändra e-postadressen efter behov xMailBody raden i koden.
3). Ersätt e-postadressen med mottagarens e-postadress i rad .To = "E-postadress".
4). Och ange mottagare för kopia och hemlig kopia som du behöver i .CC = "" och Bcc = "" sektioner.
5). Äntligen ändra e-postämnet i rad .Subject = "skicka med cellvärde test".

3. tryck på andra + Q knapparna tillsammans för att stänga Microsoft Visual Basic för applikationer fönster.

Från och med nu, när värdet du anger i cell D7 är större än 200, skapas ett e-postmeddelande med angivna mottagare och kropp automatiskt i Outlook. Du kan klicka på Skicka knappen för att skicka detta e-postmeddelande. Se skärmdump:

Anmärkningar:

1. VBA-koden fungerar bara när du använder Outlook som ditt e-postprogram.

2. Om de inmatade uppgifterna i cell D7 är ett textvärde kommer e-postfönstret att visas också.


Skicka enkelt e-post via Outlook baserat på fält i den skapade e-postlistan i Excel:

Du har nu möjlighet Skicka e-mail nytta av Kutools för Excel hjälper användare att skicka e-post via Outlook baserat på skapad e-postlista i Excel.
Ladda ner och prova nu! (30- dag gratis spår)


Relaterade artiklar:


De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (308)
Klassad 5 av 5 · 1 betyg
Denna kommentar minimerades av moderatoren på webbplatsen
Hur ska koden modifieras för att gälla ett helt cellområde?
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Debbie,
Försök nedan VBA-kod för att lösa problemet.

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Cells.Count > 1 Avsluta Sub
Om (Not Intersect(Target, Range("A1:D4")) är ingenting) och (Target.Value > 200) Då
Ring Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
On Error Resume Next
Med xOutMail
.To = "Din mottagares e-postadress"
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har problem med att få den här koden att fråga om värdet i cellen ändras indirekt. Till exempel, om jag har summaekvationen ändrar jag detta värde automatiskt. När ekvationen körs och värdet går över det inställda värdet för att uppmana e-postmeddelandet, gör det inte det, såvida jag inte fysiskt ändrar numret själv. Finns det något sätt att göra e-postmeddelandet även om det ändras indirekt?
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Jordan,
Följande VBA-kod kan hjälpa dig att lösa problemet. Glöm inte att ersätta "E-postadressen" med mottagarens e-postadress i koden. Tack.

Privata delarkivsförändring (ByVal-mål som område)
Dim xRgPre As Range
On Error Resume Next
Om Target.Cells.Count > 1 Avsluta Sub
Ställ in xRg = Range ("D7")
Ställ in xRgPre = xRg.Precedents
Om xRg.Value > 200 Då
Om Target.Address = xRg.Address Då
Ring Mail_small_Text_Outlook
ElseIf (Inte xRgPre Is Nothing) Och (Skära(Target, xRgPre).Address = Target.Address) Då
Ring Mail_small_Text_Outlook
End If
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
On Error Resume Next
Med xOutMail
.To = "E-postadress"
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har ändrat den föreslagna koden för att försöka få den att fungera för min applikation.
Ändrad xRg = Range("C2:C40") och If xRg.Value = -1.

Problemet som jag har är när som helst det sker en förändring av en cell och så länge en av cellerna i mitt intervall är = -1 kommer den att anropa Mail_small_Text_Outlook.
Jag försöker bara ringa om någon cell i mitt intervall ändras indirekt till -1.
Jag undrade också om och hur det skulle vara möjligt att få det att uppfylla två kriterier.
Som att kontrollera intervall A och intervall B och om de uppfyller kriterierna ring funktion.

Tack på förhand för hjälpen. Jag är ny på allt detta, men när jag läser igenom den här tråden finns jag där till 90 %.


Privata delarkivsförändring (ByVal-mål som område)
Dim xRgPre As Range
On Error Resume Next
Om Target.Cells.Count > 1 Avsluta Sub
Ställ in xRg = Range("C2:C40")
Ställ in xRgPre = xRg.Precedents
Om xRg.Value = -1 Då
Om Target.Address = xRg.Address Då
Ring Mail_small_Text_Outlook
ElseIf (Inte xRgPre Is Nothing) Och (Skära(Target, xRgPre).Address = Target.Address) Då
Ring Mail_small_Text_Outlook
End If
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Jag använde den här koden med den enda ändringen att jag har tillämpat den på en hel kolumn [Set xRg = Range("D4:D13")]. Nu utlöses händelsen när en beräkning görs oavsett om ventilen i kolumn D är under målvärdet. Någon aning om varför det är så?


Dim Xrg As Range
Privata delarkivsförändring (ByVal-mål som område)
Dim xRgPre As Range
On Error Resume Next
Om Target.Cells.Count > 1 Avsluta Sub
Ställ in Xrg = Range("D4:D13")
Ställ in xRgPre = Xrg.Precedents
Om Xrg.Value < 1200 Då
Om Target.Address = Xrg.Address Då
Ring Mail_small_Text_Outlook
ElseIf (Inte xRgPre Is Nothing) Och (Skära(Target, xRgPre).Address = Target.Address) Då
Ring Mail_small_Text_Outlook
End If
End If
End Sub

Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej" & vbNewLine & _
"Testa vba" _
& vbNewLine & _
"Linje 2."
On Error Resume Next
Med xOutMail
.Till = ""
.CC = ""
.BCC = ""
.Subject = "Automatisk e-posttest"
.Body = xMailBody
.Visa
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting

End Sub


Tack.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej

Jag har problem eftersom e-postmottagare måste läggas till om och om igen en efter en. Vänligen vägleda om en lista över e-postmottagare kan läggas till den här funktionen så att funktionen kommer att välja e-postadressen från listan över angivna e-postadresser eller ladda upp listan och funktionen skickar e-postmeddelandet, som redan har skapats till den önskade mottagaren.
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Henry,
Följande VBA-kod kan hjälpa dig att lösa problemet. Vänligen placera VBA-skriptet i din kalkylbladsmodul. När värdet i den angivna cellen uppfyller villkoret, kommer en Kutools för Excel-dialogruta att dyka upp, välj cellerna som innehåller mottagarnas e-postadresser och klicka sedan på OK-knappen. Då öppnas e-postmeddelanden med angivna mottagare. Skicka dem efter behov.

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Cells.Count > 1 Avsluta Sub
Ställ in xRg = Range ("D7")
Om xRg = Target And Target.Value > 200 Då
Ring Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Dim xRgMsg As Range
Dim xCell As Range
Set xRgMsg = Application.InputBox("Välj adresscellerna:", "Kutools for Excel", , , , , , 8)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
On Error Resume Next
För varje xCell In xRgMsg
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
Med xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
xOutApp = Ingenting
xOutMail = Ingenting
Nästa
På Fel GoTo 0
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
kommer det att skickas automatiskt med e-post, utan några manuella avbrott
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Brahma,
Om du vill skicka e-postmeddelandet direkt utan att visa, vänligen ersätt raden ".Display" med ".Send" i ovanstående VBA-kod.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag satte samma skript men det fungerar inte, snälla hjälp mig i den första delen

Dim xRg As Range

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Cells.Count > 1 Avsluta Sub
Ställ in xRg = Range ("D7")
Om xRg = Target And Target.Value = 200 Då
Ring Mail_small_Text_Outlook
End If

End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Kära basilika,
Finns det någon varning när du kör koden?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, hur skulle du ändra den här koden för att kontrollera om en grupp celler har strängen "No match" och skicka ett e-postmeddelande om den har det.
Denna kommentar minimerades av moderatoren på webbplatsen
Kära José,
Försök nedan VBA-kod. När du kör koden, dyker en dialogruta upp, välj intervallet du vill kontrollera efter sträng och klicka på OK-knappen. om strängen inte finns får du upp en dialogruta. Om strängen finns i intervallet kommer ett e-postmeddelande med angiven mottagare, ämne och brödtext att visas.

Sub SendEmail()
Dim I As Long
Dim J As Long
Dim xRg As Range
Dim xArr
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Dim xFlagga som Boolean
On Error Resume Next
Set xRg = Application.InputBox("Välj intervall", "Kutools för Excel", Selection.Address, , , , , 8)
Om xRg är ingenting, avsluta Sub
xArr = xRg.Value
xFlagga = Falskt
För I = 1 Till UBound(xArr)
För J = 1 Till UBound(xArr, 2)
Om xArr(I, J) = "Ingen matchning" Då
xFlagga = Sant
End If
Nästa
Nästa
Om xFlagga Då
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
Med xOutMail
.To = "E-postadress"
.CC = ""
.BCC = ""
.Subject = "Match"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
annars
MsgBox "Found No matched value", vbInformation, "KuTools for Excel"
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hur kunde jag ändra den här koden för att skicka elevbetyg till föräldrar. Där om kolumn A är betyget och kolumn B är den överordnade e-postadressen. Jag vill fylla i ett mejl för varje elev med ett F som betyg.
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Frank,
VBA-koden nedan kan hjälpa dig att lösa problemet. Tack.

Sub Mail_small_Text_Outlook()
Dim xRg As Range
Dim I As Long
Dim xRows As Long
Dim xVal As String
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
On Error Resume Next
Set xRg = Application.InputBox("Välj betygskolumnen och e-postkolumnen (två kolumner)", "Kutools för Excel", Selection.Address, , , , , 8)
Om xRg är ingenting, avsluta Sub
xRows = xRg.Rows.Count
Ställ in xRg = xRg(2)
För I = 1 Till xRows
xVal = xRg.Offset(I, -1).Text
Om xVal = "F" Då
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är ditt barns betyg" & xRg.Offset(I, -1). Text
Med xOutMail
.to = xRg.Offset(I, 0).Text
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End If
Nästa
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har en lista över e-postadresser som redan finns i en excel-fil, hur kan jag ändra koden för att automatiskt välja e-postadressen till personen om hans cell D7 är >200?
Denna kommentar minimerades av moderatoren på webbplatsen
God dag,
Följande VBA-kod kan hjälpa dig att lösa problemet. Vänligen placera VBA-skriptet i din kalkylbladsmodul. När värdet i den angivna cellen uppfyller villkoret, kommer en Kutools för Excel-dialogruta att dyka upp, välj cellerna som innehåller mottagarnas e-postadresser och klicka sedan på OK-knappen. Då öppnas e-postmeddelanden med angivna mottagare. Skicka dem efter behov.

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Cells.Count > 1 Avsluta Sub
Ställ in xRg = Range ("D7")
Om xRg = Target And Target.Value > 200 Då
Ring Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Dim xRgMsg As Range
Dim xCell As Range
Set xRgMsg = Application.InputBox("Välj adresscellerna:", "Kutools for Excel", , , , , , 8)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
On Error Resume Next
För varje xCell In xRgMsg
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
Med xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
xOutApp = Ingenting
xOutMail = Ingenting
Nästa
På Fel GoTo 0
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har problem med att skicka e-post via outlook. Jag får felmeddelandet "Ett program försöker skicka ett e-postmeddelande å dina vägnar. Om det är oväntat, vänligen neka och kontrollera att ditt antivirusprogram är uppdaterat"
Snälla hjälp eftersom jag inte kan automatisera det.
Denna kommentar minimerades av moderatoren på webbplatsen
Förlåt Mayank,
Koden fungerar bra i mitt fall. Det verkar som att något om "skicka för räkning"-funktionen är konfigurerad i din Outlook. Kolla gärna efter det.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej vilken kod skulle jag använda om jag försöker skicka ett e-postmeddelande till en chef som har en lista över frukten som har en kvantitet > 200 en gång per månad (baserat på ditt exempel) eller som löper ut snart (baserat på datum)
Denna kommentar minimerades av moderatoren på webbplatsen
God dag
Kan vara metoden i den här artikeln "Hur skickar man e-post om förfallodatum har uppfyllts i Excel?" kan hjälpa dig.
Följ denna länk: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Denna kommentar minimerades av moderatoren på webbplatsen
Hur kan jag redigera koden för att skicka ett e-postmeddelande baserat på ett datum i cellen. Till exempel behöver jag ett dokument som granskas var 15:e månad och jag vill skicka ett e-postmeddelande efter 12 månader till en e-postadress som säger att dokumentet måste granskas. Jag har nu för att automatiskt skicka ett mail genom att ändra .Display till .Send och det fungerar utmärkt som skrivet, men vad behöver jag ändra för att använda en datumfunktion istället för ett heltal??
Denna kommentar minimerades av moderatoren på webbplatsen
Hur kan du lägga till Multiple Range till "Set xRg = Range("D7")". Jag vill redigera den och lägga till Range("D7:F7"). Men jag får felet Run Time Error 13, Typ Mismatch och det tar mig till If xRg = Target And Target.Value > 2 Then.


Hur kan jag lösa detta problem?
Denna kommentar minimerades av moderatoren på webbplatsen
God dag,
Försök nedan VBA-kod för att lösa problemet.

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Cells.Count > 1 Avsluta Sub
Om (Not Intersect(Target, Range("D7:F7")) är ingenting) och (Target.Value > 200) Då
Ring Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
On Error Resume Next
Med xOutMail
.To = "Din mottagares e-postadress"
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
fungerade utmärkt.. Tack..:):)
Denna kommentar minimerades av moderatoren på webbplatsen
Det fungerar inte för mig eftersom värdet i D7 är ett resultat av en formel. Vad händer om cell D7 innehåller en formel, t.ex. D7 =2*120? Den uppfyller fortfarande villkoret men ingenting händer. Snälla hjälp
Denna kommentar minimerades av moderatoren på webbplatsen
hur stoppar man koden från att köras, dvs frågar inte e-postmeddelandet när villkoret inte är uppfyllt?

även när D7 < 200 får jag fortfarande e-postmeddelandet.
Denna kommentar minimerades av moderatoren på webbplatsen
God dag,
Koden uppdateras i inlägget med problemet löst. Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Hi

Tack så mycket för att du publicerade denna VBA-kod och instruktioner. När jag hittade den kände jag att jag hade vunnit på lotto. Men jag har fastnat för något så jag hoppas att du kan hjälpa (jag är ny på VBA, har bara mycket grundläggande förståelse).

Jag har kopierat koden och ändrat cell- och cellvärdet för att välja från ett intervall om ett kriterium är uppfyllt. Jag har provat och testat och det fungerar och jag fick ett mail till outlook baserat på kriterierna.

1) Jag verkar dock inte kunna ta reda på hur jag får VBA-koden att köras automatiskt när jag öppnar excel-kalkylbladet, istället för att behöva klicka på VBA-applikationen och välja kör. Kan du ge råd om det finns en ytterligare uppmaning att skriva in i VBA-koden ovan som kommer att göra detta eller måste det göras separat.

2) Finns det också ett sätt att få VBA-koden för att skicka ett mail till en person om förfallodatumet är ja för en viss vara som visas i exemplet nedan.
e-post dold kolumn
Namn

Tillvägagångssätt
Procedur nr.1 förfallodatum ja
Procedur nr. 2 förfallodag nr

Jag skulle ha många personer i kalkylarket (som går över horisontellt i rad) och "Ja" skulle kunna markeras för olika försenade procedurer (listade vertikalt i kolumn A. Finns det något sätt att skapa en VBA-kod som körs för något sånt här - om 'Ja' för 'Person 1', e-posta 'person 1' med 'procedur nr #' (eller nummer) och förfallodatum. Att kunna lista i e-postmeddelandet alla procedurer och deras efterföljande förfallodatum.

Jag skulle inte ha något emot om jag var tvungen att ställa in en separat VBA-kod för varje person så länge den skickade ett mail med alla dokument som är försenade för den personen och förfallodatum.

Hoppas du kan hjälpa till
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Ann,
Försök med VBA-koden nedan. Tack för din kommentar.

Sub Mail_small_Text_Outlook()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim xRows As Long
Dim xCols As Long
Dim xVal As String
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
On Error Resume Next
Set xRg = Application.InputBox("Välj intervallet innehåller cellvärdet du kommer att skicka e-post baserat på:", "Kutools for Excel", Selection.Address, , , , , 8)
Om xRg är ingenting, avsluta Sub
xRows = xRg.Rows.Count
xCols = xRg.Columns.Count
För I = 1 Till xRows
Ställ in xCell = xRg(I, xCols)
Om xCell.Value = "Ja" Då
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är din information: " & vbNewLine & xCell.Offset(0, -1).Text & vbNewLine & xCell.Offset(0, -2).Text
Med xOutMail
.To = xCell.Offset(0, -4).Text
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End If
Nästa
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Kristall,

Detta ersätter följande kod:

Underordnad e-post()

Dim xRg As Range

Dim xRgEach As Range

Dim xEmail_Subject, xEmail_Send_Form,;etc.
Denna kommentar minimerades av moderatoren på webbplatsen
Var exakt infogar vi denna kod?
Denna kommentar minimerades av moderatoren på webbplatsen
God dag,
Du måste placera koden i kalkylbladets kodfönster.
Öppna fönstret Microsoft Visual Basic for Applications, dubbelklicka på arknamnet i den vänstra rutan för att öppna kodredigeraren.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej där,


Jag har för närvarande lite problem med kodningen (ny på detta - kan ha bitit av mer än jag kan tugga)


Jag har för närvarande ett kalkylblad med följande som jag behöver hjälp med att automatisera och skicka e-post för fel som finns på våra fastigheter för vår verksamhet


Jag behöver för närvarande en kod som använder följande data:


1) En adress och problemet ( 2 "allmänna" celler som har slagits samman via ((I cell D1)) " = =CONCAT(B1," "C1,) "
Adressen i B1 kommer alltid att vara densamma (mer eller mindre)
Medan C1 alltid kommer att förändras beroende på felet på fastigheten.


2) Ett e-postmeddelande som ska skickas med samma e-postadress, (kan jag använda $E$1 eller måste jag använda E1 - E1 till exempel) eller kan jag bara mata in "TheEmailAdress@.co.uk" i kodraden


3) E-posttexten som ska fyllas i på samma sätt som punkt 1) ...... ((I cell F1)) " =CONCAT(G1," ",H1)
Dessa kommer att förändras hela tiden eftersom de representerar företaget (G1) och vad de gör, fixar, citerar ect (H1)

4) Utlösaren för att skicka e-postmeddelandet, jag skulle vara nummer 7, arket uppdateras dagligen (7 dagar i veckan)
som sådan behöver jag triggern för att skicka e-postmeddelandet på dag 7, men inte ständigt som på dag 8, 9, 10+ ect. och inte innan som 1-6, detta skulle vara i A4 : A 100+ (eftersom vi ständigt expanderar


4) Jag har använt små utdrag från andra användare som nämnt om att använda en lista för utlösaren för att skicka e-postmeddelandet, men jag är inte säker på att det var 100 % korrekt, men jag skulle behöva det för att skanna igenom alla Collum A... A4: A100
och om det finns 47 celler som bara innehåller " 7 " kommer 47 e-postmeddelanden att skickas


Tack så mycket för att du läser och jag hoppas att du kan hjälpa dig :)
Denna kommentar minimerades av moderatoren på webbplatsen
Kära martyn,
Jag kan tyvärr inte hjälpa till med detta.
Du kan ställa din fråga i vårt forum: https://www.extendoffice.com/forum.html för att få mer Excel-stöd från vår tekniska personal.
Tack för din kommentar.

Bästa hälsningar,
Kristall
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,


Vad händer om jag ville skicka e-postmeddelandet baserat på att ordet "slutfört" läggs till i kolumn L?
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Jesse,
Följande VBA-kod kan hjälpa dig att lösa problemet. Tack för din kommentar.

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Cells.Count > 1 Avsluta Sub
Om (Not Intersect(Target, Range("L:L")) Is Nothing) Och (Target.Value = "completed") Då
Ring Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
On Error Resume Next
Med xOutMail
.To = "Din mottagares e-postadress"
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Jag skulle vilja att Outlook bara dyker upp när data som jag har klistrat in i Range ("D7:F7") har minst 1 nolla eller en tom.
Jag har tagit bort raden 'If Target.Cells.Count > 1 Then Exit Sub' och nu startar Outlook alltid när jag klistrar in en grupp av värden i cellerna D7:F7.

Hjälp.
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Jan,
Följande skript kan hjälpa dig att lösa problemet. Tack för din kommentar.

Privata delarkivsförändring (ByVal-mål som område)
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
On Error Resume Next
Om Target.Address = Range("D7:F7"). Adress Då
Med Application.WorksheetFunction
Om .CountIf(Target, "") > 0 Eller .CountIf(Target, 0) > 0 Då
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
Med xOutMail
.To = "E-postadress"
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = "Hej där"
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End If
Sluta med
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Så jag använde din redigering för att inkludera ett cellintervall men (om vi använder kalkylbladsexemplet) undrade jag hur man lägger till typen av frukt, datumet och kvantiteten i HTML-e-postmeddelandet från kalkylbladet om de uppfyller kriterierna för att få ett e-postmeddelande genererat. Så skulle man säga

"Hallå där,"

Fruktnamn från cell "Behöver läggas på restorder eftersom beställningsdatum: " beställningsdatum från cell "vi har detta belopp:" kvantitet från cell.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Noemi,
Vänligen prova detta VBA-skript.

Privata delarkivsförändring (ByVal-mål som område)
Dim xRg As Range
Dim I, J, K As Long
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
On Error Resume Next
Om Target.Address = Range("D7"). Adress Då
Med Application.WorksheetFunction
Om IsNumeric(Target.Value) Och Target.Value > 200 Då
Set xRg = Application.InputBox("Välj cellintervallet som du vill visa i e-postmeddelandet:", "KuTools for Excel", Selection.Address, , , , , 8)
Om xRg är ingenting, avsluta Sub
För I = 1 Till xRg.Rows.Count
För J = 1 Till xRg.Rows(I).Columns.Count
För K = 1 Till xRg.Rader(I).Kolumner(J).Count
xMailBody = xMailBody & " " & xRg.Rows(I).Columns(J).Cells(K).Text
Nästa
Nästa
xMailBody = xMailBody & vbNewLine
Nästa
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
Med xOutMail
.To = "E-postadress"
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = "Hej där" & vbNewLine & xMailBody
.Visa 'eller använd .Send
Sluta med
På Fel GoTo 0
Ställ in xOutMail = Ingenting
Ställ in xOutApp = Ingenting
End If
Sluta med
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
hej kristall
tack för dina koder, skicka om möjligt koderna för nedanstående detaljer

om vi har 8 till 9 kolumner som använder olika typer av utgångsdatum som passets utgångsdatum, körkortets utgångsdatum, fordonets registrerings utgångsdatum, gate pass utgångsdatum och mer etc., och e-postmeddelanden måste skickas till endast 5 givna personer.

som vårt datumblad är med mer än 300 anställda, utgångs- och utgångsdatum med 15 dagar i röd färg och e-postvarning ska skickas.

Vänligt gör det nödvändiga

tack på förhand
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå,
Vi har lagt upp en artikel "Hur skickar man e-post om förfallodatum har uppfyllts i Excel?"
Du kan se om det finns svar i den här artikeln. Vänligen följ denna länk för att öppna artikeln: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Tack.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej - Om jag vill skicka till ett e-postmeddelande från en lista istället för att lägga till faktisk e-posttillägg i koden, är det möjligt? tack
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå,
Vänligen försök nedan VBA-kod, när den angivna cellen uppfyller villkoret kommer en dialogruta att dyka upp, välj cellen som innehåller e-postadressen du skickar e-post till. Hoppas det kan hjälpa. Tack.

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Cells.Count > 1 Avsluta Sub
Ställ in xRg = Range ("D7")
Om xRg = Target And Target.Value > 200 Då
Ring Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp som objekt
Dim xOutMail som objekt
Dim xMailBody As String
Dim xRgMsg As Range
Dim xCell As Range
Set xRgMsg = Application.InputBox("Välj adresscellerna:", "Kutools for Excel", , , , , , 8)
xMailBody = "Hej där" & vbNewLine & vbNewLine & _
"Detta är linje 1" & vbNewLine & _
"Detta är linje 2"
On Error Resume Next
För varje xCell In xRgMsg
Ställ in xOutApp = CreateObject("Outlook.Application")
Ställ in xOutMail = xOutApp.CreateItem(0)
Med xOutMail
.To = xCell.Value
.CC = ""
.BCC = ""
.Subject = "skicka med cellvärde test"
.Body = xMailBody
.Visa 'eller använd .Send
Sluta med
xOutApp = Ingenting
xOutMail = Ingenting
Nästa
På Fel GoTo 0
End Sub
Det finns inga kommentarer här ännu
Ladda fler
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL