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

¿Cómo enviar un correo electrónico si una determinada celda se modifica en Excel?

Este artículo habla sobre el envío de un correo electrónico a través de Outlook cuando se modifica una celda en un rango determinado en Excel.

Envíe un correo electrónico si la celda en un cierto rango se modifica con el código VBA


Envíe un correo electrónico si la celda en un cierto rango se modifica con el código VBA

Si necesita crear un nuevo correo electrónico automáticamente con el libro de trabajo activo adjunto cuando se modifica una celda en el rango A2: E11 en una determinada hoja de trabajo, el siguiente código de VBA puede ayudarlo.

1. En la hoja de trabajo que necesita enviar por correo electrónico en función de su celda modificada en un cierto rango, haga clic con el botón derecho en la pestaña de la hoja y luego haga clic en el Ver código desde el menú contextual. Ver captura de pantalla:

2. En la aparición Microsoft Visual Basic para aplicaciones ventana, copie y pegue debajo del código VBA en la ventana Código.

Código de VBA: envíe un correo electrónico si la celda en un rango específico se modifica en 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

Notas:

1). En el código, A2: E11 es el rango en el que enviará el correo electrónico.
2). Cambie el cuerpo del correo electrónico según lo necesite en xMailCuerpo línea en el código.
3). Reemplace la Correo electrónico con la dirección de correo electrónico del destinatario en línea .To = "Dirección de correo electrónico".
4). Cambiar el asunto del correo electrónico en línea .Subject = "Hoja de trabajo modificada en" & ThisWorkbook.FullName.

3. presione el otro + Q teclas simultáneamente para cerrar el Microsoft Visual Basic para aplicaciones ventana.

A partir de ahora, se modifica cualquier celda en el rango A2: E11, se creará un nuevo correo electrónico con el libro actualizado adjunto. Y todos los campos especificados, como asunto, destinatario y cuerpo del correo electrónico, se incluirán en el correo electrónico. Envíe el correo electrónico.

Nota:: El código VBA solo funciona si está utilizando Outlook como su programa de correo electrónico.


Artículos relacionados:


Las mejores herramientas de productividad de oficina

Kutools para Excel resuelve la mayoría de sus problemas y aumenta su productividad en un 80%

  • Reutilizar: Inserte rápidamente fórmulas complejas, gráficos y cualquier cosa que hayas usado antes; Cifrar celdas con contraseña; Crear lista de distribución y enviar correos electrónicos ...
  • Barra de súper fórmula (edite fácilmente varias líneas de texto y fórmulas); Diseño de lectura (leer y editar fácilmente un gran número de celdas); Pegar en rango filtrado...
  • Combinar celdas / filas / columnas sin perder datos; Contenido de celdas divididas; Combinar filas / columnas duplicadas... Prevenir celdas duplicadas; Comparar rangos...
  • Seleccione Duplicado o Único Filas; Seleccionar filas en blanco (todas las celdas están vacías); Super Find y Fuzzy Find en muchos libros de trabajo; Selección aleatoria ...
  • Copia exacta Varias celdas sin cambiar la referencia de la fórmula; Crear referencias automáticamente a varias hojas; Insertar viñetas, Casillas de verificación y más ...
  • Extraer texto, Agregar texto, Eliminar por posición, Quitar espacio; Crear e imprimir subtotales de paginación; Convertir entre contenido de celdas y comentarios...
  • Súper filtro (guardar y aplicar esquemas de filtros a otras hojas); Orden avanzado por mes / semana / día, frecuencia y más; Filtro especial en negrita, cursiva ...
  • Combinar libros y hojas de trabajo; Combinar tablas basadas en columnas clave; Dividir datos en varias hojas; Conversión por lotes de xls, xlsx y PDF...
  • Más de 300 potentes funciones. Compatible con Office/Excel 2007-2021 y 365. Compatible con todos los idiomas. Fácil implementación en su empresa u organización. Funciones completas Prueba gratuita de 30 días. Garantía de devolución de dinero de 60 días.
pestaña kte 201905

Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil

  • Habilite la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
  • Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
  • ¡Aumenta su productividad en un 50% y reduce cientos de clics del mouse todos los días!
officetab parte inferior
Comentarios (37)
Aún no hay calificaciones. ¡Sé el primero en calificar!
Este comentario fue minimizado por el moderador en el sitio
Estoy atascado debajo del código VB. Estoy tratando de enviar una notificación por correo electrónico al usuario donde se cambiaron los datos. El correo electrónico funciona, pero cuando realizo cualquier cambio, el correo electrónico se inicia de inmediato, pero quiero un correo electrónico cuando la hoja de Excel se guarda y se cierra después de realizar todos los cambios a todos los usuarios afectados. Además, esto debería funcionar para cualquiera de las hojas en todo el libro de Excel.

Por favor, ayuda ...

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

'****Declaración de objetos y variables******

Dim xRgSel como rango Dim xOutApp como objeto Dim xMailItem como objeto Dim xMailBody como cadena Dim mailTo como cadena

On Error Resume Next

Hojas("TargetSheet").Rango("TargetRange").Seleccionar

Application.ScreenUpdating = Falso Application.DisplayAlerts = Falso

'Establecer xRg = Rango ("A" & Filas.Cuenta).End(xlUp).Row

Establecer xRg = Rango ("A2: DA1000")
Establezca xRgSel = Intersect (Objetivo, xRg)


ActiveWorkbook.Guardar
'***********Apertura de la aplicación de Outlook***********

Si no xRgSel no es nada, entonces

Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xMailItem = xOutApp.CreateItem(0)

xMailBody = "Celda(s) " & xRgSel.Address(False, False) & _
" en la hoja de trabajo '" & Me.Name & "' se modificaron en " & _
Formato$(Ahora, "mm/dd/aaaa") & " at " & Formato$(Ahora, "hh:mm:ss") & _
" por " & Environ$("nombre de usuario") & "."
'***********Buscando lista de destinatarios***********

Si Celdas(xRgSel.Row, "A").Valor = "Pankaj" Entonces

correo a = "pank12***@gmail.com"

Si terminar

Si Celdas(xRgSel.Row, "A").Valor = "Nitina" Entonces

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

Si terminar

Si Celdas(xRgSel.Row, "A").Valor = "Chandan" Entonces

mailTo = "pakxro**@gmail.com"

Si terminar
'****************Redacción de correo electrónico************

Con xMailItem

.Para = correoPara
.Subject = "Hoja de trabajo modificada en" & ThisWorkbook.FullName
.Cuerpo = xCuerpo de correo
'.Adjuntos.Agregar (EsteLibro.NombreCompleto)
.Monitor

End With

Establecer xRgSel = Nada
Establecer xOutApp = Nada
Establecer xMailItem = Nada

Si terminar

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Este comentario fue minimizado por el moderador en el sitio
Estimado Pankaj Shukla,
Publique su pregunta de Excel en nuestro foro: https://www.extendoffice.com/forum.html para obtener más soporte sobre Excel de nuestro profesional de Excel.
Este comentario fue minimizado por el moderador en el sitio
Pude crear la macro, sin embargo, tengo un problema. Me gustaría enviar automáticamente un correo electrónico cuando una celda alcance cierto umbral. La celda es una fórmula. Cuando la suma del cálculo cae por debajo de dicho umbral, no hace nada; sin embargo, si escribo directamente en la celda, procesará la macro según lo planeado. ¿La fórmula estropea la macro?
Este comentario fue minimizado por el moderador en el sitio
Hola Sissy Jones,
El método en este artículo: ¿Cómo enviar automáticamente un correo electrónico basado en el valor de la celda en Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html puede ayudarte a resolver el problema.
Este comentario fue minimizado por el moderador en el sitio
Estimado administrador,


Necesito tu ayuda,



Tengo un Excel para monitorear los detalles del trabajo diario realizado por nuestro trabajador desde el campo, entonces, ¿es posible activar un correo desde la hoja de Excel si ese tipo no actualizó los datos en esa hoja de Excel en un tiempo determinado?
Este comentario fue minimizado por el moderador en el sitio
Hola,
No puedo ayudar con esto.
Este comentario fue minimizado por el moderador en el sitio
Si quiero enviar el valor de la celda en lugar de la dirección... ¿qué debo cambiar en el código?
Este comentario fue minimizado por el moderador en el sitio
Hola,
Puede probar el siguiente código VBA.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xRgSel como rango
Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xMailBody como cadena
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Establecer xRg = Rango ("A2: E11")
Establezca xRgSel = Intersect (Objetivo, xRg)
ActiveWorkbook.Guardar
Si no xRgSel no es nada, entonces
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xMailItem = xOutApp.CreateItem(0)
xMailBody = "Celda(s) " & xRgSel.Address(False, False) & _
xRgSel.Valor & _
" en la hoja de trabajo '" & Me.Name & "' se modificaron en " & _
Formato$(Ahora, "mm/dd/aaaa") & " at " & Formato$(Ahora, "hh:mm:ss") & _
" por " & Environ$("nombre de usuario") & "."

Con xMailItem
.To = "Dirección de correo electrónico"
.Subject = "Hoja de trabajo modificada en" & ThisWorkbook.FullName
.Cuerpo = xCuerpo de correo
.Adjuntos.Agregar (EsteLibro.NombreCompleto)
.Monitor
End With
Establecer xRgSel = Nada
Establecer xOutApp = Nada
Establecer xMailItem = Nada
Si terminar
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Este comentario fue minimizado por el moderador en el sitio
¿Qué sucede si solo queremos los comentarios actualizados en esa celda y no el valor completo de la celda? Debe mostrar solo los últimos comentarios agregados en la celda.
Este comentario fue minimizado por el moderador en el sitio
¿Lo entendiste?
Este comentario fue minimizado por el moderador en el sitio
Gran informacion
Pregunta sobre la información que se puede agregar al correo electrónico.
Usando tu ejemplo anterior...

Si tuviera un valor en F4, ¿cómo incluiría el valor F4 en el correo electrónico que se generó cuando se modificó D4?
Este comentario fue minimizado por el moderador en el sitio
si tengo que enviar toda esa fila entonces?
Este comentario fue minimizado por el moderador en el sitio
Probé el código VBA anterior: envíe un correo electrónico si la celda en un rango específico se modifica en Excel. Este VBA funciona para mí, excepto el envío de correo electrónico. Cuando los datos se modifican en el rango dado, se genera automáticamente un correo electrónico con los detalles de la celda modificada. Sin embargo, el correo electrónico no se envía automáticamente al destinatario y el usuario debe hacer clic en el botón Enviar en el correo electrónico. Lo que estoy buscando aquí es que el correo electrónico debe enviarse a los destinatarios automáticamente cuando se genera. Por favor, ayúdame a proporcionar un código para esto. Muchas gracias
Este comentario fue minimizado por el moderador en el sitio
Hola Jimmy Joseph,
Reemplace la línea ".Display" con ".Send". Espero poder ayudar. Gracias por comentar
Este comentario fue minimizado por el moderador en el sitio
hola; ¿Hay alguna forma de cambiar el texto que se muestra usando información de otras celdas (desde la primera fila y la primera columna)? por ejemplo, si cambio la celda K15, ¿quiero incluir en el mensaje información sobre las celdas A15 y K1? ¿Qué debo cambiar en el código? Muchísimas gracias
Este comentario fue minimizado por el moderador en el sitio
hola laona. ¿Averiguas cómo se puede hacer esto?
Este comentario fue minimizado por el moderador en el sitio
Hola. ¿Cómo modifico el código para que se envíe un correo electrónico a otra dirección de correo electrónico si se edita otro rango de celdas?
Este comentario fue minimizado por el moderador en el sitio
¿Alguna ayuda en esta solicitud? Estoy teniendo el mismo problema. Quiero agregar varias direcciones de correo electrónico por fila, pero cuando cambio una fila, cambia toda la hoja de trabajo. ¿Cómo puedo limitar los cambios solo a una fila?
Este comentario fue minimizado por el moderador en el sitio
Editar línea:
1). En el código, A2:E11 es el rango en el que enviará el correo electrónico.
y
3). Reemplace la dirección de correo electrónico con la dirección de correo electrónico del destinatario en la línea .Para = "Dirección de correo electrónico".

Funciona bien.
Este comentario fue minimizado por el moderador en el sitio
¿Puedes explicar esto más a fondo? ¿Cómo se repite el código para enviarlo a un correo electrónico diferente en función de la modificación de otro rango? Intenté copiar y pegar el código a continuación y cambiarlo según su comentario, pero aún así solo el primer rango parece ejecutar el comando y escribir el correo electrónico.
Este comentario fue minimizado por el moderador en el sitio
¿Alguien tiene una respuesta para esto?
Este comentario fue minimizado por el moderador en el sitio
Hola, estaba tratando de enviar correos electrónicos en mi hoja usando un valor modificado en la hoja. Si en la columna H el estado se cambiará a ="4", el ID de pedido de la izquierda debe enviarse a un usuario. La hoja funciona de forma dinámica, por lo que tengo un rango de D9: D140 donde se almacenan las identificaciones de pedidos y se realizan cambios de estado en el mismo rango en H9: H140. ¿Cómo puedo alcanzar el objetivo de hacerlo y enviar el ID de pedido a mi cliente cuando el estado ha cambiado a = "4"?
Este comentario fue minimizado por el moderador en el sitio
¿Sería posible mostrar una celda de referencia diferente en xMailBody en la misma columna en lugar de la dirección de celda modificada?
Este comentario fue minimizado por el moderador en el sitio
Hola Sam, ¿Quiere decir seleccionar una celda de referencia al azar en la misma columna de la dirección de la celda modificada? ¿O escribir manualmente una celda de referencia en la línea xMailBody del código? Es fácil escribir manualmente una celda de referencia en el código, simplemente encierre la celda de referencia entre comillas dobles como se muestra a continuación: xMailBody = "Cell(s)" & "D3" & ", " & "D8" & _

Este comentario fue minimizado por el moderador en el sitio
¿Es posible cambiar esto para que solo muestre el correo electrónico si una celda en un rango se ha cambiado para decir "Sí"? Me gustaría que no hiciera nada si es cualquier otro valor.
Este comentario fue minimizado por el moderador en el sitio
Gracias por el código, este código funciona cuando ingreso el valor y presiono enter. Pero en mi caso, la celda se llena automáticamente con la fórmula y, cuando se alcanza el valor, no abre el correo electrónico, por lo que el código no funciona en este caso. ¡Gracias de antemano!
Este comentario fue minimizado por el moderador en el sitio
Hola hakana,
El siguiente código de VBA puede ayudarlo a resolver el problema. Por favor inténtalo. Gracias por tus comentarios.

Hoja de trabajo secundaria privada_Change (ByVal Target As Range)
'Actualizado por Extendoffice 2022/04/15
Dim xRgSel como rango
Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xMailBody como cadena
Dim xBoolean como booleano
Dim xItsRG como rango
Dim xDDs como rango
Dim xDs como rango
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBooleano = Falso
Establecer xRg = Rango ("E2: E13")

Establecer xItsRG = Intersect(Objetivo, xRg)
Establecer xDDs = Intersect(Target.DirectDependents, xRg)
Establecer xDs = Intersecar(Objetivo.Dependientes, xRg)
Si no (xItsRG no es nada), entonces
Establecer xRgSel = xItsRG
xBooleano = Verdadero
ElseIf Not (xDDs no es nada) Entonces
Establecer xRgSel = xDD
xBooleano = Verdadero
ElseIf Not (xDs no es nada) Entonces
Establecer xRgSel = xDs
xBooleano = Verdadero
Si terminar


ActiveWorkbook.Guardar
Si xBooleano Entonces
Depurar.Imprimir xRgSel.Dirección


Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xMailItem = xOutApp.CreateItem(0)
xMailBody = "Celda(s) " & xRgSel.Address(False, False) & _
" en la hoja de trabajo '" & Me.Name & "' se modificaron en " & _
Formato$(Ahora, "mm/dd/aaaa") & " at " & Formato$(Ahora, "hh:mm:ss") & _
" por " & Environ$("nombre de usuario") & "."

Con xMailItem
.To = "Dirección de correo electrónico"
.Subject = "Hoja de trabajo modificada en" & ThisWorkbook.FullName
.Cuerpo = xCuerpo de correo
.Adjuntos.Agregar (EsteLibro.NombreCompleto)
.Monitor
End With
Establecer xRgSel = Nada
Establecer xOutApp = Nada
Establecer xMailItem = Nada
Si terminar
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola, he creado un código similar pero me gustaría *** una condición en la que si se elimina un valor de celda, no se enviará un correo electrónico cuando se guarde/cierre. Solo enviará un correo electrónico cuando se haya ingresado un valor de celda. Sabes como hacer esto? Este es mi código:

CÓDIGO PARA CORREO ELECTRÓNICO AUTOMÁTICO A ALGUIEN CUANDO SE ACTUALIZA EL LIBRO DE EXCEL

CÓDIGO HOJA:

Opción Explicit 'Excel worksheet change event Range
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si no intersecta (objetivo, rango ("C3: D62")) no es nada, entonces
'Target.EntireRow.Interior.ColorIndex = 15
Rango ("XFD1048576"). Valor = 15
Si terminar
If Not Intersect(Target, Range("I3:J21")) No es nada Entonces
'Target.EntireRow.Interior.ColorIndex = 15
Rango ("XFD1048576"). Valor = 15
Si terminar
End Sub


CÓDIGO DEL LIBRO DE TRABAJO:

Libro de trabajo secundario privado_Antes de cerrar (Cancelar como booleano)
Si Yo.Salvado = Falso Entonces Yo.Guardo

Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xName como cadena

Si Rango("XFD1048576").Valor = 15 Entonces
On Error Resume Next
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
Con xMailItem
.Para = "correo electrónico"
.CC = ""
.Asunto = "mensaje"
.Cuerpo = "¡mensaje!"
.Archivos adjuntos.*** xNombre
.Monitor
'.enviar
End With
Si terminar
Establecer xMailItem = Nada
Establecer xOutApp = Nada



End Sub

Private Sub Workbook_Open ()
Rango ("XFD1048576").Borrar
End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola a todos,

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? Así que 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.
Este comentario fue minimizado por el moderador en el sitio
Hola Esser123,
Los siguientes códigos de VBA pueden ayudar. Después de modificar las celdas en el rango especificado y guardar el libro de trabajo, aparecerá un correo electrónico para enumerar todas las celdas modificadas en el cuerpo del correo electrónico, y el libro de trabajo también se insertará como un archivo adjunto en el correo electrónico. Siga los siguientes pasos:
1. Abra la hoja de trabajo que contiene las celdas en las que desea enviar correos electrónicos, haga clic con el botón derecho en la pestaña de la hoja y haga clic en Ver código desde el menú contextual. Luego copie el siguiente código en la ventana de la hoja (código).
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. En el editor de Visual Basic, haga doble clic ThisWorkbook en el panel izquierdo, luego copie el siguiente código VBA en el ThisWorkbook (Código) ventana.
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
Este comentario fue minimizado por el moderador en el sitio
Necesito ayuda para activar un correo electrónico con un ligero cambio. En lugar de un valor numérico o ingresar la información en la celda manualmente, las celdas en la columna B cambiarán a 'Y' activada desde una fórmula en otras celdas en esa fila. La fórmula para la columna B es =SI([@[Cantidad en stock]]>[@[Nivel de pedido]],,"Y"), lo que muestra que el inventario tiene poco stock y necesita un nuevo pedido. Necesito activar un correo electrónico automático cuando el valor de una celda cambia en la columna B a 'Y', por lo que se me notifica automáticamente por correo electrónico sobre el stock bajo. Intenté todo lo que se me ocurrió al alterar los códigos ya proporcionados, pero nada parece funcionar para mí... ¡ayuda por favor!
Este comentario fue minimizado por el moderador en el sitio
Hola Kathryn F,
El siguiente código de VBA puede ayudarlo a resolver el problema. Por favor inténtalo. Gracias por tu comentario.
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
Este comentario fue minimizado por el moderador en el sitio
Hola y gracias por este tutorial.
J'ai dependiente de una dificultad para la aplicación de la playa de búsqueda.
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 pas si j'ai un saut dans la plage. Por ejemplo, si modifica C2 y C4 sin el modificador C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur ?
Merci d'avance.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
'Actualizado por Extendoffice 20220921
Dim xAddress como cadena
Dim xDRg, xRgSel, xRg como rango

xDirección = "C2:C4"
Establecer xDRg = Rango (xDirección)
Establezca xRgSel = Intersect (Objetivo, xDRg)
En caso de error Ir a Err1
Si no xRgSel no es nada, entonces
Si ThisWorkbook.gChangeRange = "" Entonces
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(Falso, Falso, xlA1, Verdadero, Falso)
otro
Establecer xRg = Rango (ThisWorkbook.gChangeRange)
Establecer xRg = Aplicación. Unión (xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(Falso, Falso, xlA1, Verdadero, Falso)
Si terminar
Si terminar
Exit Sub
Err1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(Falso, Falso, xlA1, Verdadero, Falso)
End Sub


-----

Opción explícita
gChangeRange público como cadena
Libro de trabajo secundario privado_AfterSave (ByVal Success como booleano)
'Actualizado por Extendoffice 20220921
Dim xRgSel, xRg como rango
Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xMailBody como cadena
'En caso de error Reanudar siguiente
En caso de error Ir a Err1
Establecer xRg = Rango (gChangeRange)
Si no xRg no es nada, entonces
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer 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 y "cordialismo"
Con xMailItem
.Para = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées" & ThisWorkbook.Name
.Cuerpo = xCuerpo de correo
.Adjuntos.Agregar (EsteLibro.NombreCompleto)
.Monitor
End With
Establecer xRgSel = Nada
Establecer xOutApp = Nada
Establecer xMailItem = Nada
Si terminar
Err1:
gCambioRango = ""
End Sub
Este comentario fue minimizado por el moderador en el sitio
Me gustaría enviar el correo electrónico a 5 personas. ¿Qué delimitador se utiliza entre cada dirección de correo electrónico?
Este comentario fue minimizado por el moderador en el sitio
Hola Joe,
Utilice un punto y coma para separar las direcciones de correo electrónico.
Este comentario fue minimizado por el moderador en el sitio
Aquí hay otra pregunta. Si una celda cambia, envía un correo electrónico. si cambian 3 celdas, envía 3 correos electrónicos. ¿Cómo detienes esto para que solo envíe 1 correo electrónico cuando terminen las ediciones?
Este comentario fue minimizado por el moderador en el sitio
Hola Joe,
Supongamos que especificó el rango como "A2:E11" en el código. ¿Cómo puedo verificar cuándo se han realizado todas las ediciones?
No hay comentarios publicados aquí todavía
Deje sus comentarios
Publicar como invitado
×
Califica esta publicación:
0   Personajes
Ubicaciones sugeridas

Siganos

Copyright © 2009 - www.extendoffice.com. | Reservados todos los derechos. Energizado por ExtendOffice, | Mapa del Sitio
Microsoft y el logotipo de Office son marcas comerciales o marcas comerciales registradas de Microsoft Corporation en los Estados Unidos y / o en otros países.
Protegido por Sectigo SSL