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

¿Cómo enviar correos electrónicos automáticamente según el valor de la celda en Excel?

Supongamos que desea enviar un correo electrónico a través de Outlook a un destinatario determinado en función de un valor de celda específico en Excel. Por ejemplo, cuando el valor de la celda D7 en una hoja de trabajo es mayor que 200, se crea automáticamente un correo electrónico. Este artículo presenta un método VBA para que pueda resolver rápidamente este problema.

Envíe correos electrónicos automáticamente según el valor de la celda con código VBA


Envíe correos electrónicos automáticamente según el valor de la celda con código VBA

Haga lo siguiente para enviar un correo electrónico según el valor de la celda en Excel.

1. En la hoja de trabajo, debe enviar un correo electrónico según el valor de la celda (aquí dice la celda D7), haga clic con el botón derecho en la pestaña de la hoja y seleccione 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 el siguiente código VBA en la ventana del código de la hoja.

Código de VBA: envíe un correo electrónico a través de Outlook según el valor de la celda en 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

Notas:

1). En el código VBA, D7 y valor> 200 son el valor de celda y celda 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 dirección de correo electrónico con la dirección de correo electrónico del destinatario en línea .To = "Dirección de correo electrónico".
4). Y especifique los destinatarios Cc y Bcc que necesite en .CC = "" y Cco = "" .
5). Finalmente cambie el asunto del correo electrónico en línea .Subject = "enviar por prueba de valor de celda".

3. presione el otro + Q llaves juntas para cerrar el Microsoft Visual Basic para aplicaciones ventana.

A partir de ahora, cuando el valor que ingrese en la celda D7 sea superior a 200, se creará automáticamente un correo electrónico con los destinatarios y el cuerpo especificados en Outlook. Puede hacer clic en el Enviar para enviar este correo electrónico. Ver captura de pantalla:

Notas:

1. El código VBA solo funciona cuando usa Outlook como su programa de correo electrónico.

2. Si los datos ingresados ​​en la celda D7 son un valor de texto, la ventana de correo electrónico también aparecerá.


Envíe fácilmente correos electrónicos a través de Outlook según los campos de la lista de correo creada en Excel:

Programas de Enviar correos electrónicos utilidad de Kutools for Excel ayuda a los usuarios a enviar correo electrónico a través de Outlook según la lista de correo creada en Excel.
¡Descárgalo y pruébalo ahora! (30-día de ruta libre)


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 (308)
5 clasificado de 5 · 1 calificaciones
Este comentario fue minimizado por el moderador en el sitio
¿Cómo se debe modificar el código para aplicarlo a un rango completo de celdas?
Este comentario fue minimizado por el moderador en el sitio
Estimado cliente,
Intente debajo del código VBA para resolver el problema.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Cells.Count > 1, entonces salga de Sub
Si (Not Intersect(Target, Range("A1:D4")) no es nada) y (Target.Value > 200) Entonces
Llame a Mail_small_Text_Outlook
Si terminar
End Sub
Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
On Error Resume Next
Con xOutMail
.To = "Dirección de correo electrónico de su destinatario"
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
End Sub
Este comentario fue minimizado por el moderador en el sitio
Tengo problemas para que este código me avise si el valor de la celda cambia indirectamente. Por ejemplo, si tengo la ecuación Sum cambiando este valor automáticamente. Cuando la ecuación se ejecuta y el valor supera el valor establecido para solicitar el correo electrónico, no lo hace, a menos que cambie físicamente el número yo mismo. ¿Hay alguna manera de hacer que el mensaje de correo electrónico aparezca incluso si se cambia indirectamente?
Este comentario fue minimizado por el moderador en el sitio
Querido jordania
El siguiente código de VBA puede ayudarlo a resolver el problema. No olvide reemplazar la "Dirección de correo electrónico" con la dirección de correo electrónico del destinatario en el código. Gracias.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xRgPre como rango
On Error Resume Next
Si Target.Cells.Count > 1, entonces salga de Sub
Establecer xRg = Rango ("D7")
Establecer xRgPre = xRg.Precedentes
Si xRg.Value > 200 Entonces
Si Target.Address = xRg.Address Entonces
Llame a Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Entonces
Llame a Mail_small_Text_Outlook
Si terminar
Si terminar
End Sub
Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
On Error Resume Next
Con xOutMail
.To = "Dirección de correo electrónico"
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
End Sub
Este comentario fue minimizado por el moderador en el sitio
Modifiqué el código sugerido para intentar que funcione para mi aplicación.
Se cambió xRg = Range("C2:C40") y If xRg.Value = -1.

El problema que tengo es cada vez que hay un cambio en cualquier celda y siempre que una de las celdas en mi rango sea = -1, llamará a Mail_small_Text_Outlook.
Estoy tratando de llamar solo si alguna celda en mi rango cambia indirectamente a -1.
También me preguntaba si y cómo sería posible que cumpliera dos criterios.
Como verificar el rango A y el rango B y si cumplen con los criterios, llame a la función.

Gracias de antemano por la ayuda. Soy nuevo en todo esto, pero leer este hilo me tiene alrededor del 90% allí.


Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xRgPre como rango
On Error Resume Next
Si Target.Cells.Count > 1, entonces salga de Sub
Establecer xRg = Rango ("C2: C40")
Establecer xRgPre = xRg.Precedentes
Si xRg.Value = -1 Entonces
Si Target.Address = xRg.Address Entonces
Llame a Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Entonces
Llame a Mail_small_Text_Outlook
Si terminar
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
Usé este código con el único cambio de que lo apliqué a una columna completa [Establecer xRg = Rango ("D4: D13")]. Ahora, el evento se activa cada vez que se realiza un cálculo, independientemente de si la válvula en la Columna D está por debajo del valor objetivo. ¿Alguna idea de por qué es eso?


Dim Xrg como rango
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xRgPre como rango
On Error Resume Next
Si Target.Cells.Count > 1, entonces salga de Sub
Establecer Xrg = Rango ("D4: D13")
Establecer xRgPre = Xrg.Precedentes
Si Xrg.Value < 1200 Entonces
Si Target.Address = Xrg.Address Entonces
Llame a Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Entonces
Llame a Mail_small_Text_Outlook
Si terminar
Si terminar
End Sub

Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNuevaLínea & _
"Prueba vba" _
& vbNuevaLínea & _
"Línea 2."
On Error Resume Next
Con xOutMail
.Para = ""
.CC = ""
.BCC = ""
.Subject = "Prueba automática de correo electrónico"
.Cuerpo = xCuerpo de correo
.Monitor
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada

End Sub


Gracias.
Este comentario fue minimizado por el moderador en el sitio
Hola

Tengo problemas porque el destinatario del correo electrónico debe agregarse una y otra vez, uno por uno. Indique si se puede agregar una lista de destinatarios de correo electrónico a esta función para que la función seleccione la dirección de correo electrónico de la lista de direcciones de correo electrónico proporcionada o cargue la lista y la función envíe el correo electrónico, ya redactado, al destinatario deseado.
Este comentario fue minimizado por el moderador en el sitio
Estimado Enrique,
El siguiente código de VBA puede ayudarlo a resolver el problema. Coloque el script de VBA en el módulo de su hoja de trabajo. Cuando el valor en la celda especificada cumpla con la condición, aparecerá un cuadro de diálogo de Kutools for Excel, seleccione las celdas que contienen las direcciones de correo electrónico de los destinatarios y luego haga clic en OK botón. Luego se abren los correos electrónicos con los destinatarios especificados. Por favor envíelos como usted necesita.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Cells.Count > 1, entonces salga de Sub
Establecer xRg = Rango ("D7")
Si xRg = objetivo y valor objetivo > 200, entonces
Llame a Mail_small_Text_Outlook
Si terminar
End Sub
Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Dim xRgMsg como rango
Dim xCell como rango
Establezca xRgMsg = Application.InputBox ("Seleccione las celdas de dirección:", "Kutools para Excel", , , , , , 8)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
On Error Resume Next
Para cada xCell en xRgMsg
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
Con xOutMail
.A = xCelda.Valor
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
xOutApp = Nada
xOutMail = Nada
Siguiente
En caso de error, vaya a 0
End Sub
Este comentario fue minimizado por el moderador en el sitio
¿Se enviará automáticamente por correo, sin ninguna interrupción manual?
Este comentario fue minimizado por el moderador en el sitio
Estimado Brahma,
Si desea enviar directamente el correo electrónico sin mostrarlo, reemplace la línea ".Display" con ".Send" en el código VBA anterior.
Este comentario fue minimizado por el moderador en el sitio
Hola puse el mismo script pero no funciona por favor ayúdenme en la 1ra parte

Dim xRg como rango

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Cells.Count > 1, entonces salga de Sub
Establecer xRg = Rango ("D7")
Si xRg = Target y Target.Value = 200 Entonces
Llame a Mail_small_Text_Outlook
Si terminar

End Sub
Este comentario fue minimizado por el moderador en el sitio
Querida albahaca,
¿Hay alguna advertencia al ejecutar el código?
Este comentario fue minimizado por el moderador en el sitio
Hola, ¿cómo modificaría este código para verificar si un grupo de celdas tiene la cadena "No coincide" y enviar un correo electrónico si es así?
Este comentario fue minimizado por el moderador en el sitio
Querido José,
Intente debajo del código VBA. Al ejecutar el código, aparece un cuadro de diálogo, seleccione el rango en el que verificará la cadena y haga clic en el botón Aceptar. si la cadena no existe, obtendrá un cuadro de diálogo de solicitud. Si la cadena existe en el rango, se mostrará un correo electrónico con el destinatario, el asunto y el cuerpo especificados.

Sub Enviar correo electrónico ()
Dim I tan largo
Dim J tan largo
Dim xRg como rango
Tenue xArr
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Dim xFlag como booleano
On Error Resume Next
Establezca xRg = Application.InputBox ("Seleccione rango", "Kutools para Excel", Selection.Address, , , , , 8)
Si xRg no es nada, salga de Sub
xArr = xRg.Valor
xFlag = Falso
Para I = 1 Para UBound(xArr)
Para J = 1 Para UBound(xArr, 2)
Si xArr(I, J) = "Sin coincidencia" Entonces
Bandera x = Verdadero
Si terminar
Siguiente
Siguiente
Si x Bandera Entonces
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
Con xOutMail
.Para = "Dirección de correo electrónico"
.CC = ""
.BCC = ""
.Asunto = "Coincidencia"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
otro
MsgBox "No se encontró ningún valor coincidente", vbInformation, "KuTools para Excel"
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
¿Cómo podría cambiar este código para enviar las calificaciones de los estudiantes a los padres? Donde si la columna A es el grado y la columna B es el correo electrónico principal. Quiero llenar un correo electrónico para cada estudiante con una F como calificación.
Este comentario fue minimizado por el moderador en el sitio
Querido Frank,
El siguiente código de VBA puede ayudarlo a resolver el problema. Gracias.

Sub Mail_small_Text_Outlook ()
Dim xRg como rango
Dim I tan largo
Dim xRows tan largo
Dim xVal como cadena
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
On Error Resume Next
Establezca xRg = Application.InputBox ("Seleccione la columna de calificación y la columna de correo electrónico (dos columnas)", "Kutools para Excel", Selection.Address, , , , , 8)
Si xRg no es nada, salga de Sub
xRows = xRg.Rows.Count
Establecer xRg = xRg(2)
Para I = 1 Para xFilas
xVal = xRg.Desplazamiento(I, -1).Texto
Si xVal = "F" Entonces
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la calificación de su hijo" & xRg.Offset(I, -1).Text
Con xOutMail
.to = xRg.Desplazamiento(I, 0).Texto
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
Si terminar
Siguiente
End Sub
Este comentario fue minimizado por el moderador en el sitio
Ya tengo una lista de direcciones de correo electrónico en un archivo de Excel, ¿cómo puedo modificar el código para elegir automáticamente la dirección de correo electrónico de la persona si su celda D7 es> 200?
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
El siguiente código de VBA puede ayudarlo a resolver el problema. Coloque el script de VBA en el módulo de su hoja de trabajo. Cuando el valor en la celda especificada cumpla con la condición, aparecerá un cuadro de diálogo de Kutools for Excel, seleccione las celdas que contienen las direcciones de correo electrónico de los destinatarios y luego haga clic en OK botón. Luego se abren los correos electrónicos con los destinatarios especificados. Por favor envíelos como usted necesita.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Cells.Count > 1, entonces salga de Sub
Establecer xRg = Rango ("D7")
Si xRg = objetivo y valor objetivo > 200, entonces
Llame a Mail_small_Text_Outlook
Si terminar
End Sub
Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Dim xRgMsg como rango
Dim xCell como rango
Establezca xRgMsg = Application.InputBox ("Seleccione las celdas de dirección:", "Kutools para Excel", , , , , , 8)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
On Error Resume Next
Para cada xCell en xRgMsg
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
Con xOutMail
.A = xCelda.Valor
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
xOutApp = Nada
xOutMail = Nada
Siguiente
En caso de error, vaya a 0
End Sub
Este comentario fue minimizado por el moderador en el sitio
Tengo problemas para enviar correo a través de Outlook. Recibo el error que dice "Un programa está tratando de enviar un correo electrónico en su nombre. Si es inesperado, rechace y verifique que su software antivirus esté actualizado".
Por favor ayuda ya que no puedo automatizarlo.
Este comentario fue minimizado por el moderador en el sitio
Lo siento Mayak,
El código funciona bien en mi caso. Parece que algo sobre la función "enviar en nombre" está configurado en su Outlook. Compruébalo.
Este comentario fue minimizado por el moderador en el sitio
Hola, ¿qué código usaría si estoy tratando de enviar un correo electrónico a un gerente que tiene una lista de frutas que tiene una cantidad> 200 una vez al mes (según su ejemplo) o caduca pronto (según las fechas)
Este comentario fue minimizado por el moderador en el sitio
Good Day
Puede ser el método en este artículo "¿Cómo enviar un correo electrónico si se cumplió la fecha de vencimiento en Excel?" puedo ayudarte.
Por favor siga este enlace: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Este comentario fue minimizado por el moderador en el sitio
¿Cómo puedo editar el código para enviar un correo electrónico basado en una fecha en la celda? Por ejemplo, necesito que se revise un documento cada 15 meses y quiero enviar un correo electrónico a los 12 meses a una dirección de correo electrónico que diga que el documento debe revisarse. Ahora lo tengo para enviar automáticamente un correo electrónico cambiando .Display a .Send y funciona muy bien tal como está escrito, pero ¿qué debo cambiar para usar una función de fecha en lugar de un número entero?
Este comentario fue minimizado por el moderador en el sitio
¿Cómo puede agregar un rango múltiple a "Establecer xRg = Rango ("D7")"? Quiero editarlo y agregar Rango ("D7: F7"). Sin embargo, recibo un error de Run Time Error 13, Type Mismatch y me lleva a If xRg = Target And Target.Value> 2 Then.


¿Cómo puedo resolver este problema?
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
Intente debajo del código VBA para resolver el problema.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Cells.Count > 1, entonces salga de Sub
Si (Not Intersect(Target, Range("D7:F7")) no es nada) y (Target.Value > 200) Entonces
Llame a Mail_small_Text_Outlook
Si terminar
End Sub
Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
On Error Resume Next
Con xOutMail
.To = "Dirección de correo electrónico de su destinatario"
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
End Sub
Este comentario fue minimizado por el moderador en el sitio
funcionó perfectamente bien... Gracias... :) :)
Este comentario fue minimizado por el moderador en el sitio
No me funciona porque el valor en D7 es el resultado de un formulario. ¿Qué sucede si la celda D7 contiene una fórmula, por ejemplo, D7 = 2*120? Todavía cumple la condición pero no pasa nada. Por favor ayuda
Este comentario fue minimizado por el moderador en el sitio
¿Cómo detener la ejecución del código, es decir, no solicitar el correo electrónico cuando no se cumple la condición?

incluso cuando D7 < 200, todavía recibo el correo electrónico.
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
El código se actualiza en la publicación con el problema resuelto. Gracias por tu comentario.
Este comentario fue minimizado por el moderador en el sitio
Hi

Muchas gracias por publicar este código VBA e instrucciones. Cuando lo encontré sentí que había ganado la lotería. Sin embargo, estoy atascado en algo, así que espero que pueda ayudar (soy nuevo en VBA, solo tengo una comprensión muy básica).

Copié el código y cambié la celda y el valor de la celda para elegir de un rango si se cumple un criterio. Probé y probé y funciona y recibí un correo electrónico a Outlook basado en los criterios.

1) Sin embargo, parece que no puedo entender cómo hacer que el código VBA se ejecute automáticamente cuando abro la hoja de cálculo de Excel, en lugar de tener que hacer clic en la aplicación VBA y seleccionar ejecutar. ¿Podría informarme si hay un mensaje adicional para escribir en el código VBA anterior que hará esto o si tiene que hacerse por separado?

2) También hay una manera de obtener el código VBA para enviar un correo a una persona si la fecha de vencimiento es sí para un elemento determinado, como se muestra en el ejemplo a continuación.
columna oculta de correo electrónico
Nombre

Procedimiento
Trámite n° 1 fecha de vencimiento sí
procedimiento nro. 2 fecha de vencimiento no

Tendría numerosas personas en la hoja de cálculo (atravesando horizontalmente en una fila) y se podría resaltar 'Sí' para varios procedimientos vencidos (enumerados verticalmente en la columna A. ¿Hay alguna manera de crear un código VBA que se ejecute para algo como esto? si 'Sí' para 'Persona 1', envíe un correo electrónico a 'persona 1' con 'n.° de procedimiento' (o números) y fecha(s) de vencimiento. Poder enumerar en el correo electrónico todos los procedimientos y sus fechas de vencimiento posteriores.

No me importaría si tuviera que establecer un código VBA separado para cada persona, siempre y cuando envíe un correo electrónico con todos los documentos vencidos para esa persona y las fechas de vencimiento.

Esperando que puedas ayudar
Este comentario fue minimizado por el moderador en el sitio
Querida Ann,
Intente con el siguiente código VBA. Gracias por tu comentario.

Sub Mail_small_Text_Outlook ()
Dim xRg como rango
Dim xCell como rango
Dim I tan largo
Dim xRows tan largo
Atenuar xCols siempre que
Dim xVal como cadena
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
On Error Resume Next
Establezca xRg = Application.InputBox ("Seleccione el rango que contiene el valor de celda en el que enviará correos electrónicos según:", "Kutools para Excel", Selection.Address, , , , , 8)
Si xRg no es nada, salga de Sub
xRows = xRg.Rows.Count
xCols = xRg.Columns.Count
Para I = 1 Para xFilas
Establecer xCelda = xRg(I, xCols)
Si xCell.Value = "Sí" Entonces
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es su información: " & vbNewLine & xCell.Offset(0, -1).Text & vbNewLine & xCell.Offset(0, -2).Text
Con xOutMail
.Para = xCelda.Desplazamiento(0, -4).Texto
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
Si terminar
Siguiente
End Sub
Este comentario fue minimizado por el moderador en el sitio
Cristal,

Esto reemplaza el siguiente código:

Sub-correo electrónico()

Dim xRg como rango

Dim xRgEach como rango

Dim xEmail_Subject, xEmail_Send_Form, etc.
Este comentario fue minimizado por el moderador en el sitio
¿Dónde exactamente insertamos este código?
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
Debe colocar el código en la ventana de código de la hoja de trabajo.
Abra la ventana de Microsoft Visual Basic para aplicaciones, haga doble clic en el nombre de la hoja en el panel izquierdo para abrir el editor de código.
Este comentario fue minimizado por el moderador en el sitio
Hola,


Actualmente tengo un pequeño problema con la codificación (nuevo en esto, puede haber mordido más de lo que puedo masticar)


Actualmente tengo una hoja de cálculo con lo siguiente que necesito ayuda para automatizar y enviar correos electrónicos por fallas que están en nuestras propiedades para nuestro negocio


Actualmente necesito un código que usará los siguientes datos:


1) Una dirección y el problema (2 celdas "generales" que se han fusionado a través de ((En la celda D1)) " = =CONCAT(B1," "C1,) "
La dirección en B1 siempre será la misma (más o menos)
Mientras que C1 siempre cambiará dependiendo de la falla en la propiedad.


2) Un correo electrónico para ser enviado por la misma dirección de correo electrónico (¿puedo usar $E$1 o tengo que usar E1 - E1, por ejemplo) o puedo simplemente ingresar "TheEmailAdress@.co.uk" en la línea de código


3) El cuerpo del correo electrónico se completará de manera similar al punto 1) ...... ((En la celda F1)) " =CONCAT(G1," ",H1)
Estos cambiarán constantemente ya que representan a la empresa (G1) y lo que están haciendo, arreglando, cotizando, etc. (H1)

4) El desencadenante para enviar el correo electrónico, sería el número 7, la hoja se actualiza diariamente (7 días a la semana)
como tal, necesito el activador para enviar el correo electrónico el día 7, pero no constantemente como el día 8, 9, 10+ ect. y no antes, como 1-6, esto sería en A4: A 100+ (ya que estamos en constante expansión


4) Utilicé pequeños fragmentos de otros usuarios que mencionaron el uso de una lista para que el activador enviara el correo electrónico, pero no estoy seguro de que fuera 100 % correcto, pero lo necesitaría para escanear todo Collum A... A4: A100
y si hay 47 celdas que contienen solo "7", se enviarán 47 correos electrónicos


Muchas gracias por leer y espero que pueda ayudar :)
Este comentario fue minimizado por el moderador en el sitio
Estimado martyn,
Lo siento, no puedo ayudar con esto.
Puedes publicar tu pregunta en nuestro foro: https://www.extendoffice.com/forum.html para obtener más soporte de Excel de nuestro personal técnico.
Gracias por tu comentario.

Atentamente,
Cristal
Este comentario fue minimizado por el moderador en el sitio
Hola,


¿Qué pasa si quiero enviar el correo electrónico basado en la palabra "completado" que se agrega a la columna L?
Este comentario fue minimizado por el moderador en el sitio
Querido Jesse
El siguiente código de VBA puede ayudarlo a resolver el problema. Gracias por tu comentario.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Cells.Count > 1, entonces salga de Sub
Si (Not Intersect(Target, Range("L:L")) no es nada) y (Target.Value = "completado") Entonces
Llame a Mail_small_Text_Outlook
Si terminar
End Sub
Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
On Error Resume Next
Con xOutMail
.To = "Dirección de correo electrónico de su destinatario"
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola,
Me gustaría que Outlook apareciera solo cuando los datos que he pegado en el Rango ("D7: F7") tienen al menos 1 cero o un espacio en blanco.
Eliminé la línea 'If Target.Cells.Count > 1 Then Exit Sub' y ahora Outlook siempre se inicia cuando pego cualquier grupo de valores en las celdas D7:F7.

Ayuda.
Este comentario fue minimizado por el moderador en el sitio
Estimado Jan,
El siguiente script puede ayudarlo a resolver el problema. Gracias por tu comentario.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
On Error Resume Next
Si Destino.Dirección = Rango("D7:F7").Dirección Entonces
Con Application.WorksheetFunction
Si .CountIf(Target, "") > 0 O .CountIf(Target, 0) > 0 Entonces
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
Con xOutMail
.To = "Dirección de correo electrónico"
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = "Hola "
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
Si terminar
End With
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
Así que usé su edición para incluir rangos de celdas pero (si estamos usando el ejemplo de la hoja de trabajo) me preguntaba cómo agregar el tipo de fruta, la fecha y la cantidad en el correo electrónico HTML de la hoja de trabajo si cumplen con los criterios para tener un correo electrónico generado. Entonces diría

"Hola,"

Nombre de la fruta de la celda "Debe ponerse en pedido pendiente porque a partir de la fecha del pedido: " fecha del pedido de la celda "tenemos esta cantidad:" cantidad de la celda.
Este comentario fue minimizado por el moderador en el sitio
Hola Noemí,
Por favor, pruebe este script de VBA.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xRg como rango
Dim I, J, K Mientras
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
On Error Resume Next
Si Destino.Dirección = Rango("D7").Dirección Entonces
Con Application.WorksheetFunction
Si IsNumeric(Target.Value) y Target.Value > 200 Entonces
Establezca xRg = Application.InputBox("Seleccione el rango de celdas que mostrará en el cuerpo del correo:", "KuTools for Excel", Selection.Address, , , , , 8)
Si xRg no es nada, salga de Sub
Para I = 1 Para xRg.Rows.Count
Para J = 1 Para xRg.Rows(I).Columns.Count
Para K = 1 Para xRg.Rows(I).Columns(J).Count
xCuerpoCorreo = xCuerpoCorreo & " " & xRg.Filas(I).Columnas(J).Celdas(K).Texto
Siguiente
Siguiente
xCuerpoCorreo = xCuerpoCorreo & vbNuevaLínea
Siguiente
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
Con xOutMail
.To = "Dirección de correo electrónico"
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Body = "Hola" & vbNewLine & xMailBody
.Mostrar 'o usar .Enviar
End With
En caso de error, vaya a 0
Establecer xOutMail = Nada
Establecer xOutApp = Nada
Si terminar
End With
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
hola cristal
gracias por sus códigos, si es posible, envíe los códigos para obtener los detalles a continuación

si tenemos de 8 a 9 columnas que usan diferentes tipos de vencimientos, como la fecha de vencimiento del pasaporte, la fecha de vencimiento del permiso de conducir, la fecha de vencimiento del registro del vehículo, la fecha de vencimiento del pase de entrada y más, y la alerta por correo debe enviarse solo a 5 personas determinadas.

como nuestra hoja de fecha es con más de 300 empleados, caducada y fecha de caducidad en 15 días en color rojo y se debe enviar una alerta por correo electrónico.

Favor hacer lo necesario

gracias de antemano
Este comentario fue minimizado por el moderador en el sitio
Hola,
Hemos publicado un artículo "¿Cómo enviar un correo electrónico si se cumplió la fecha de vencimiento en Excel?"
Puedes ver si hay respuestas en este artículo. Siga este enlace para abrir el artículo: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
Gracias por su atención.
Este comentario fue minimizado por el moderador en el sitio
Hola: si quisiera enviar un correo electrónico de una lista en lugar de poner un correo electrónico real en el código, ¿es eso posible? Gracias
Este comentario fue minimizado por el moderador en el sitio
Hola,
Intente debajo del código VBA, cuando la celda especificada cumpla con la condición, aparecerá un cuadro de diálogo, seleccione la celda que contiene la dirección de correo electrónico a la que enviará el correo electrónico. Espero que pueda ayudar. Gracias.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Cells.Count > 1, entonces salga de Sub
Establecer xRg = Rango ("D7")
Si xRg = objetivo y valor objetivo > 200, entonces
Llame a Mail_small_Text_Outlook
Si terminar
End Sub
Sub Mail_small_Text_Outlook ()
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
Dim xRgMsg como rango
Dim xCell como rango
Establezca xRgMsg = Application.InputBox ("Seleccione las celdas de dirección:", "Kutools para Excel", , , , , , 8)
xMailBody = "Hola" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"
On Error Resume Next
Para cada xCell en xRgMsg
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
Con xOutMail
.A = xCelda.Valor
.CC = ""
.BCC = ""
.Subject = "enviar por prueba de valor de celda"
.Cuerpo = xCuerpo de correo
.Mostrar 'o usar .Enviar
End With
xOutApp = Nada
xOutMail = Nada
Siguiente
En caso de error, vaya a 0
End Sub
No hay comentarios publicados aquí todavía
Ver más
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