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

Come inviare e-mail se una determinata cella viene modificata in Excel?

Questo articolo parla dell'invio di un'e-mail tramite Outlook quando una cella in un determinato intervallo viene modificata in Excel.

Invia e-mail se la cella in un determinato intervallo viene modificata con il codice VBA


Invia e-mail se la cella in un determinato intervallo viene modificata con il codice VBA

Se è necessario creare automaticamente una nuova e-mail con la cartella di lavoro attiva allegata quando una cella nell'intervallo A2: E11 viene modificata in un determinato foglio di lavoro, il seguente codice VBA può aiutarti.

1. Nel foglio di lavoro che devi inviare e-mail in base alla sua cella modificata in un determinato intervallo, fai clic con il pulsante destro del mouse sulla scheda del foglio e Visualizza codice dal menu contestuale. Vedi screenshot:

2. Nel spuntare Microsoft Visual Basic, Applications Edition finestra, copia e incolla sotto il codice VBA nella finestra del codice.

Codice VBA: invia e-mail se la cella in un intervallo specificato viene modificata 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

Note:

1). Nel codice, A2: E11 è l'intervallo su cui invierai l'email.
2). Si prega di modificare il corpo dell'email come necessario xMailBody riga nel codice.
3). Sostituisci il Email con l'indirizzo email del destinatario in linea .To = "Indirizzo e-mail".
4). Modifica l'oggetto dell'email in linea .Subject = "Foglio di lavoro modificato in" & ThisWorkbook.FullName.

3. premi il altro + Q contemporaneamente i tasti per chiudere il file Microsoft Visual Basic, Applications Edition finestra.

D'ora in poi, qualsiasi cella nell'intervallo A2: E11 verrà modificata, verrà creata una nuova email con la cartella di lavoro aggiornata allegata. E tutti i campi specificati come oggetto, destinatario e corpo dell'e-mail verranno elencati nell'e-mail. Si prega di inviare l'email.

Note:: Il codice VBA funziona solo se stai utilizzando Outlook come programma di posta elettronica.


Articoli correlati:


I migliori strumenti per la produttività in ufficio

Kutools per Excel risolve la maggior parte dei tuoi problemi e aumenta la tua produttività dell'80%

  • Riutilizzo: Inserisci rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Crittografa celle con password; Crea mailing list e invia email ...
  • Bar Super Formula (modifica facilmente più righe di testo e formula); Layout di lettura (leggi e modifica facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Impedisci celle duplicate; Confronta intervalli...
  • Seleziona Duplica o Unico Righe; Seleziona Righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molte cartelle di lavoro; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento della formula; Riferimenti di creazione automatica a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • Estrai testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare totali parziali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtri ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale in grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle in base a colonne chiave; Suddividi i dati in più fogli; Conversione in batch xls, xlsx e PDF...
  • Più di 300 potenti funzionalità. Supporta Office/Excel 2007-2021 e 365. Supporta tutte le lingue. Facile implementazione nella tua azienda o organizzazione. Funzionalità complete Prova gratuita di 30 giorni. Garanzia di rimborso di 60 giorni.
scheda kte 201905

Scheda Office porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!
fondo officetab
Commenti (37)
Ancora nessuna valutazione. Puoi essere il primo a votare!
Questo commento è stato fatto dal moderatore sul sito
Sono bloccato sotto il codice VB. Sto cercando di ricevere una notifica e-mail all'utente in cui i dati sono stati modificati. L'e-mail funziona ma quando apporto un'e-mail di modifica avviata contemporaneamente, ma desidero l'e-mail quando il foglio Excel viene salvato e chiuso dopo aver apportato tutte le modifiche a tutti gli utenti che hanno avuto un impatto. Anche questo dovrebbe funzionare per tutti i fogli nell'intera cartella di lavoro di Excel.

Per favore aiuto...

Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Annulla come booleano)

'****Dichiarazione di oggetti e variabili***

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

On Error Resume Next

Fogli ("Foglio di destinazione"). Intervallo ("Intervallo di destinazione"). Seleziona

Application.ScreenUpdating = Falso Application.DisplayAlerts = Falso

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

Imposta xRg = Intervallo ("A2:DA1000")
Imposta xRgSel = Interseca(Target, xRg)


ActiveWorkbook.Salva
'**********Apertura applicazione Outlook**********

Se non xRgSel non è niente allora

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

xMailBody = "Cella(e)" & xRgSel.Address(False, False) & _
" nel foglio di lavoro '" & Me.Name & "' sono stati modificati su " & _
Format$(Ora, "mm/gg/aaaa") & " at " & Format$(Ora, "hh:mm:ss") & _
" di " & Environ$("nome utente") & "."
'***********Trovare l'elenco dei destinatari************

Se Cells(xRgSel.Row, "A"). Value = "Pankaj" Allora

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

End If

Se Cells(xRgSel.Row, "A"). Value = "Nitin" Allora

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

End If

Se Cells(xRgSel.Row, "A"). Value = "Chandan" Allora

mailTo = "pakxro**@gmail.com"

End If
'*************** Composizione e-mail ***********

Con xMailItem

.A = mailA
.Subject = "Foglio di lavoro modificato in" & ThisWorkbook.FullName
.Corpo = xMailBody
'.Allegati.Aggiungi (ThisWorkbook.FullName)
.Schermo

Fine Con

Imposta xRgSel = Niente
Imposta xOutApp = Niente
Imposta xMailItem = Niente

End If

Application.DisplayAlerts = Vero
Application.ScreenUpdating = True
End Sub
Questo commento è stato fatto dal moderatore sul sito
Caro Pankaj Shukla,
Pubblica la tua domanda su Excel nel nostro forum: https://www.extendoffice.com/forum.html per ottenere più supporti su Excel dal nostro professionista di Excel.
Questo commento è stato fatto dal moderatore sul sito
Sono riuscito a creare la macro, tuttavia sto riscontrando un problema. Vorrei inviare automaticamente un'e-mail quando una cella raggiunge una determinata soglia. La cella è una formula. Quando la somma di calcolo scende al di sotto di detta soglia non fa nulla; tuttavia, se digito direttamente nella cella, elaborerà la macro come pianificato. La formula rovina la macro?
Questo commento è stato fatto dal moderatore sul sito
Ciao Sissy Jones,
Il metodo in questo articolo: come inviare automaticamente e-mail in base al valore della cella in Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html può aiutarti a risolvere il problema.
Questo commento è stato fatto dal moderatore sul sito
Caro Admin,


Ho bisogno del tuo aiuto,



Ho un excel per monitorare i dettagli del lavoro quotidiano svolto dal nostro lavoratore sul campo, quindi è possibile attivare una mail dal foglio excel se quel ragazzo non è riuscito ad aggiornare i dati in quel foglio excel in un dato momento.
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Non posso aiutare con questo.
Questo commento è stato fatto dal moderatore sul sito
Se voglio inviare il valore della cella invece dell'indirizzo..allora cosa devo cambiare nel codice?
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Puoi provare il codice VBA sottostante.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRgSel come intervallo
Dim xOutApp come oggetto
Dim xMailItem come oggetto
Dim xMailBody come stringa
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Imposta xRg = Intervallo ("LA2:E11")
Imposta xRgSel = Interseca(Target, xRg)
ActiveWorkbook.Salva
Se non xRgSel non è niente allora
Imposta xOutApp = CreateObject ("Outlook.Application")
Imposta xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cella(e)" & xRgSel.Address(False, False) & _
xRgSel.Value & _
" nel foglio di lavoro '" & Me.Name & "' sono stati modificati su " & _
Format$(Ora, "mm/gg/aaaa") & " at " & Format$(Ora, "hh:mm:ss") & _
" di " & Environ$("nome utente") & "."

Con xMailItem
.To = "Indirizzo e-mail"
.Subject = "Foglio di lavoro modificato in" & ThisWorkbook.FullName
.Corpo = xMailBody
.Allegati.Aggiungi (ThisWorkbook.FullName)
.Schermo
Fine Con
Imposta xRgSel = Niente
Imposta xOutApp = Niente
Imposta xMailItem = Niente
End If
Application.DisplayAlerts = Vero
Application.ScreenUpdating = True
End Sub
Questo commento è stato fatto dal moderatore sul sito
Cosa succede se vogliamo solo i commenti aggiornati in quella cella e non l'intero valore della cella Dovrebbe mostrare solo gli ultimi commenti aggiunti nella cella
Questo commento è stato fatto dal moderatore sul sito
L'hai capito?
Questo commento è stato fatto dal moderatore sul sito
Grande informazione
Domanda relativa alle informazioni che possono essere aggiunte all'e-mail.
Usando il tuo esempio sopra....

Se avessi un valore in F4, come includeresti il ​​valore F4 nell'e-mail che è stata generata quando D4 è stato modificato?
Questo commento è stato fatto dal moderatore sul sito
se devo inviare l'intera riga allora?
Questo commento è stato fatto dal moderatore sul sito
Ho provato sopra il codice VBA: invia e-mail se la cella in un intervallo specificato viene modificata in Excel. Questo VBA funziona per me tranne l'invio di e-mail. Quando i dati vengono modificati nell'intervallo specificato, viene generata automaticamente un'e-mail con i dettagli della cella modificati. Tuttavia, l'e-mail non viene inviata automaticamente al destinatario e l'utente deve fare clic sul pulsante di invio nell'e-mail. Quello che sto cercando qui è che l'e-mail deve essere inviata automaticamente ai destinatari quando viene generata. Per favore aiutami a fornire un codice per questo. Grazie molto
Questo commento è stato fatto dal moderatore sul sito
Ciao Jimmy Joseph,
Si prega di sostituire la riga ".Display" con ".Send". Spero di poter aiutare. Grazie per aver commentato.
Questo commento è stato fatto dal moderatore sul sito
Ciao; c'è un modo per modificare il testo visualizzato utilizzando le informazioni di altre celle (dalla prima riga e dalla prima colonna)? ad esempio, se cambio la cella K15, voglio includere nel messaggio le informazioni sulle celle A15 e K1? cosa devo modificare nel codice? Grazie mille
Questo commento è stato fatto dal moderatore sul sito
ciao Laona. scopri come si può fare?
Questo commento è stato fatto dal moderatore sul sito
Ciao. Come posso modificare il codice in modo che un'e-mail venga inviata a un altro indirizzo e-mail se viene modificato un altro intervallo di celle?
Questo commento è stato fatto dal moderatore sul sito
Qualche aiuto su questa richiesta? Ho lo stesso problema. Voglio aggiungere più indirizzi e-mail per riga, ma quando cambio una riga, l'intero foglio di lavoro cambia. Come posso limitare le modifiche a una sola riga?
Questo commento è stato fatto dal moderatore sul sito
Modifica linea:
1). Nel codice, A2:E11 è l'intervallo su cui invierai l'e-mail.
e
3). Sostituisci l'indirizzo e-mail con l'indirizzo e-mail del destinatario nella riga .To = "Indirizzo e-mail".

Funziona bene.
Questo commento è stato fatto dal moderatore sul sito
Puoi per favore spiegarlo ulteriormente. Come si ripete il codice da inviare a un'e-mail diversa in base alla modifica di un altro intervallo. Ho provato a copiare e incollare il codice qui sotto e a cambiare secondo il tuo commento, ma ancora solo il primo intervallo sembra eseguire il comando e scrivere l'e-mail.
Questo commento è stato fatto dal moderatore sul sito
Qualcuno ha una risposta a questo?
Questo commento è stato fatto dal moderatore sul sito
Ciao, stavo cercando di inviare e-mail sul mio foglio utilizzando un valore modificato sul foglio. Se nella colonna H lo stato sarà cambiato in ="4" l'ID ordine a sinistra dovrebbe essere inviato a un utente. Il foglio funziona in modo dinamico, quindi ho un intervallo da D9: D140 in cui vengono memorizzati gli ID dell'ordine e le modifiche allo stato vengono apportate nello stesso intervallo su H9: H140. Come posso raggiungere l'obiettivo e inviare l'ID ordine al mio cliente quando lo stato è stato modificato in ="4" ?
Questo commento è stato fatto dal moderatore sul sito
Sarebbe possibile visualizzare una cella di riferimento diversa in xMailBody nella stessa colonna invece degli indirizzi della cella modificati??
Questo commento è stato fatto dal moderatore sul sito
Ciao Sam, intendi selezionare una cella di riferimento a caso nella stessa colonna dell'indirizzo della cella modificata? Oppure digitare manualmente una cella di riferimento nella riga xMailBody del codice? È facile digitare manualmente una cella di riferimento nel codice, racchiudi semplicemente la cella di riferimento tra virgolette come mostrato di seguito: xMailBody = "Cell(s)" & "D3" & ", " & "D8" & _

Questo commento è stato fatto dal moderatore sul sito
È possibile modificarlo in modo che visualizzi l'e-mail solo se una cella in un intervallo è stata modificata per dire "Sì". Vorrei che non facesse nulla se fosse un altro valore.
Questo commento è stato fatto dal moderatore sul sito
Grazie per il codice, questo codice funziona quando inserisco il valore e premo invio. Ma nel mio caso la cella si sta riempiendo automaticamente con la formula e quando viene raggiunto il valore non apre l'e-mail, quindi il codice non funziona in questo caso. Grazie in anticipo!
Questo commento è stato fatto dal moderatore sul sito
Ciao hakana,
Il seguente codice VBA può aiutarti a risolvere il problema. Per favore, provalo. Grazie per il tuo feedback.

Private Sub Worksheet_Change (ByVal Target As Range)
'Aggiornato da Extendoffice 2022/04/15
Dim xRgSel come intervallo
Dim xOutApp come oggetto
Dim xMailItem come oggetto
Dim xMailBody come stringa
Dim xBoolean As Boolean
Dim xItsRG come intervallo
Dim xDDs come intervallo
Dim xDs come intervallo
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBooleano = Falso
Imposta xRg = Intervallo ("E2:E13")

Imposta xItsRG = Interseca(Target, xRg)
Imposta xDDs = Interseca(Target.DirectDependents, xRg)
Imposta xDs = Interseca(Target.Dependents, xRg)
In caso contrario (xItsRG non è nulla), allora
Imposta xRgSel = xItsRG
xBooleano = Vero
Altrimenti se no (xDDs non è niente) Allora
Imposta xRgSel = xDDs
xBooleano = Vero
Altrimenti se no (xDs non è niente) allora
Imposta xRgSel = xDs
xBooleano = Vero
End If


ActiveWorkbook.Salva
Se xBooleano Allora
Debug.Print xRgSel.Address


Imposta xOutApp = CreateObject ("Outlook.Application")
Imposta xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cella(e)" & xRgSel.Address(False, False) & _
" nel foglio di lavoro '" & Me.Name & "' sono stati modificati su " & _
Format$(Ora, "mm/gg/aaaa") & " at " & Format$(Ora, "hh:mm:ss") & _
" di " & Environ$("nome utente") & "."

Con xMailItem
.To = "Indirizzo e-mail"
.Subject = "Foglio di lavoro modificato in" & ThisWorkbook.FullName
.Corpo = xMailBody
.Allegati.Aggiungi (ThisWorkbook.FullName)
.Schermo
Fine Con
Imposta xRgSel = Niente
Imposta xOutApp = Niente
Imposta xMailItem = Niente
End If
Application.DisplayAlerts = Vero
Application.ScreenUpdating = True
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao, ho creato un codice simile ma vorrei *** una condizione in cui se il valore di una cella viene eliminato, non invierà un'e-mail quando viene salvato/chiuso. Invierà un'e-mail solo quando è stato inserito un valore di cella. Sai come farlo? Questo è il mio codice:

CODICE PER E-MAIL AUTOMATICA A QUALCUNO QUANDO IL WORKBOOK EXCEL È AGGIORNATO

CODICE FOGLIO:

Opzione esplicita 'Intervallo di eventi di modifica del foglio di lavoro di Excel
Private Sub Worksheet_Change (ByVal Target As Range)
If Not Intersect(Target, Range("C3:D62")) non è nulla allora
'Target.EntireRow.Interior.ColorIndex = 15
Intervallo ("XFD1048576"). Valore = 15
End If
If Not Intersect(Target, Range("I3:J21")) non è niente allora
'Target.EntireRow.Interior.ColorIndex = 15
Intervallo ("XFD1048576"). Valore = 15
End If
End Sub


CODICE DEL LAVORO:

Private Sub Workbook_BeforeClose(Annulla come booleano)
Se Me.Saved = False allora Me.Save

Dim xOutApp come oggetto
Dim xMailItem come oggetto
Dim xName come stringa

Se Intervallo ("XFD1048576"). Valore = 15 Allora
On Error Resume Next
Imposta xOutApp = CreateObject ("Outlook.Application")
Imposta xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
Con xMailItem
.A = "e-mail"
.CC = ""
.Oggetto = "messaggio"
.Body = "messaggio!"
.Allegati.*** xNome
.Schermo
'.Spedire
Fine Con
End If
Imposta xMailItem = Niente
Imposta xOutApp = Niente



End Sub

Private Sub Workbook_Open ()
Intervallo ("XFD1048576"). Cancella
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao a tutti,

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? Quindi 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-Mail bedeuten würde. Und gibt es die Möglichkeit, die gesamte geänderte Zelle bei mir von A bis Y in una 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.
Questo commento è stato fatto dal moderatore sul sito
Ciao Esser123,
I seguenti codici VBA possono aiutare. Dopo aver modificato le celle nell'intervallo specificato e aver salvato la cartella di lavoro, verrà visualizzata un'e-mail per elencare tutte le celle modificate nel corpo dell'e-mail e anche la cartella di lavoro verrà inserita come allegato nell'e-mail. Si prega di seguire i seguenti passaggi:
1. Apri il foglio di lavoro che contiene le celle su cui desideri inviare e-mail, fai clic con il pulsante destro del mouse sulla scheda del foglio e fai clic Visualizza codice dal menu di scelta rapida. Quindi copia il codice seguente nella finestra del foglio (codice).
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. Nell'editor di Visual Basic, fare doppio clic Questa cartella di lavoro nel riquadro di sinistra, quindi copia il seguente codice VBA in ThisWorkbook (codice) finestra.
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
Questo commento è stato fatto dal moderatore sul sito
Ho bisogno di aiuto per attivare un'e-mail con una leggera modifica. Invece di un valore numerico o dell'inserimento manuale delle informazioni nella cella, le celle nella colonna B cambieranno in "Y" attivate da una formula in altre celle in quella riga. La formula per la colonna B è =IF([@[Quantità in magazzino]]>[@[Livello riordino]],"Y"), a indicare che l'inventario è in esaurimento e necessita di un riordino. Devo attivare un'e-mail automatizzata quando il valore di una cella cambia nella colonna B in "Y", quindi vengo automaticamente informato via e-mail dello stock basso. Ho provato tutto ciò che mi viene in mente modificando i codici già forniti, ma nulla sembra funzionare per me... per favore aiutatemi!
Questo commento è stato fatto dal moderatore sul sito
Ciao Kathryn F,
Il seguente codice VBA può aiutarti a risolvere il problema. Per favore, provalo. Grazie per il tuo commento.
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
Questo commento è stato fatto dal moderatore sul sito
Ciao e grazie per questo tutorial.
J'ai cependant une hardé 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 ou C4 uniquement. Cela fonctionne aussi si je modifie C2+C3+C4 ou C2+C3 ou C3+C4 mais cela ne fonctionne pass si j'ai un saut dans la plage. Par esempio, si je modifie C2 et C4 senza modificatore C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur ?
Vi ringrazio in anticipo.

Private Sub Worksheet_Change (ByVal Target As Range)
'Aggiornato da Extendoffice 20220921
Dim xAddress come stringa
Dim xDRg, xRgSel, xRg come intervallo

xIndirizzo = "C2:C4"
Imposta xDRg = Intervallo(xIndirizzo)
Imposta xRgSel = Interseca(Target, xDRg)
In caso di errore Vai a Err1
Se non xRgSel non è niente allora
Se ThisWorkbook.gChangeRange = "" Allora
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Altro
Imposta xRg = Intervallo(ThisWorkbook.gChangeRange)
Imposta 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


-----

Opzione esplicita
gChangeRange pubblico come stringa
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Aggiornato da Extendoffice 20220921
Dim xRgSel, xRg come intervallo
Dim xOutApp come oggetto
Dim xMailItem come oggetto
Dim xMailBody come stringa
'In caso di errore Riprendi Avanti
In caso di errore Vai a Err1
Imposta xRg = Intervallo(gChangeRange)
Se non xRg non è niente allora
Imposta xOutApp = CreateObject ("Outlook.Application")
Imposta 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 & "Cordialità"
Con xMailItem
.A = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées" & ThisWorkbook.Name
.Corpo = xMailBody
.Allegati.Aggiungi (ThisWorkbook.FullName)
.Schermo
Fine Con
Imposta xRgSel = Niente
Imposta xOutApp = Niente
Imposta xMailItem = Niente
End If
Err1:
gChangeRange = ""
End Sub
Questo commento è stato fatto dal moderatore sul sito
Vorrei inviare l'e-mail a 5 persone. Quale delineatore viene utilizzato tra ciascun indirizzo e-mail?
Questo commento è stato fatto dal moderatore sul sito
Ciao Joe,
Si prega di utilizzare un punto e virgola per separare gli indirizzi e-mail.
Questo commento è stato fatto dal moderatore sul sito
Ecco un'altra domanda. Se una cella cambia, invia un'e-mail. se cambiano 3 celle, invia 3 email. Come si interrompe questo in modo che invii solo 1 e-mail al termine delle modifiche?
Questo commento è stato fatto dal moderatore sul sito
Ciao Joe,
Supponendo di aver specificato l'intervallo come "A2:E11" nel codice. Come posso verificare quando sono state apportate tutte le modifiche?
Non ci sono ancora commenti pubblicati qui
Lasciate i vostri commenti
Pubblicazione come ospite
×
Valuta questo post:
0   Personaggi
Posizioni suggerite

Seguici

Copyright © 2009 - www.extendoffice.com. | Tutti i diritti riservati. Offerto da ExtendOffice, | Mappa del sito
Microsoft e il logo Office sono marchi o marchi registrati di Microsoft Corporation negli Stati Uniti e / o in altri paesi.
Protetto da Sectigo SSL