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

¿Cómo enviar un correo electrónico si se hace clic en el botón en Excel?

Suponiendo que necesita enviar un correo electrónico a través de Outlook haciendo clic en un botón en la hoja de cálculo de Excel, ¿cómo puede hacerlo? Este artículo presentará un método VBA para lograrlo en detalle.

Enviar correo electrónico si se hace clic en el botón con el código VBA


Enviar correo electrónico si se hace clic en el botón con el código VBA

Haga lo siguiente para enviar un correo electrónico a través de Outlook si se hace clic en un botón de comando en el libro de Excel.

1. Inserte un botón de comando en su hoja de trabajo haciendo clic en Developer > recuadro > Botón de comando (control ActiveX). Ver captura de pantalla:

2. Haga clic con el botón derecho en el Botón de comando insertado y luego haga clic en Ver código desde el menú contextual como se muestra a continuación.

3. En la apertura Microsoft Visual Basic para aplicaciones ventana, reemplace el código original en la ventana Código con el siguiente script VBA.

Código de VBA: envíe un correo electrónico si se hace clic en el botón en Excel

Private Sub CommandButton1_Click()
'Updated by Extendoffice 2017/9/14
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    On Error Resume Next
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    xMailBody = "Body content" & vbNewLine & vbNewLine & _
              "This is line 1" & vbNewLine & _
              "This is line 2"
                  On Error Resume Next
    With xOutMail
        .To = "Email Address"
        .CC = ""
        .BCC = ""
        .Subject = "Test email send by button clicking"
        .Body = xMailBody
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

Notas:

1). Cambie el cuerpo del correo electrónico según lo necesite en el xMailCuerpo línea en el código.

2). 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".

3). Especifique los destinatarios Cc y Cco que necesite en .CC = "" y .Bcc = "" .

4). Cambiar el asunto del correo electrónico en línea .Subject = "Enviar correo electrónico de prueba haciendo clic en el botón".

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

5. Desactive el modo de diseño haciendo clic en Developer > Modo de diseño. Ver captura de pantalla:

A partir de ahora, cada vez que haga clic en el botón de comando, se creará automáticamente un correo electrónico con destinatarios, asunto y cuerpo específicos. Envíe el correo electrónico haciendo clic en el Enviar

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

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 enviar correo electrónico a través de Outlook basado en los campos de 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 (73)
3.5 clasificado de 5 · 1 calificaciones
Este comentario fue minimizado por el moderador en el sitio
Hola, estoy buscando enviar datos desde una tabla dinámica, ¿pueden ayudarme?
Este comentario fue minimizado por el moderador en el sitio
¿Es posible escribir el script para que cuando haga clic en el botón se adjunte al correo electrónico como se indicó anteriormente, pero también elimine el botón? para que la copia del archivo que se envía por correo electrónico ya no tenga el botón?
Este comentario fue minimizado por el moderador en el sitio
Justo debajo de ".Body = xMailBody" agregue lo siguiente
.Archivos adjuntos.Agregar ActiveWorkbook.Nombre completo
Este comentario fue minimizado por el moderador en el sitio
Hola Dani.

Agregué la parte como dijiste, pero el correo electrónico con el libro de trabajo adjunto aún tiene los botones activados.
Este comentario fue minimizado por el moderador en el sitio
hola, ¿es posible configurarlo para que no tenga que presionar enviar? ¿Envía automáticamente el correo electrónico?
Este comentario fue minimizado por el moderador en el sitio
Hola,
Reemplace la línea .Display con .Send en el código VBA anterior.
Este comentario fue minimizado por el moderador en el sitio
solo genera un correo electrónico y seguirá sobrescribiendo el contenido en lugar de abrir múltiples borradores de correo electrónico.
Este comentario fue minimizado por el moderador en el sitio
Hola a todos, en primer lugar, muchas gracias, esta publicación es muy útil y funciona para el archivo adjunto. Esto funciona para mí, pero no se guardan actualizaciones en la hoja, debe presionar el botón Guardar. Me gustaría que el archivo adjunto tenga lo que esté actualmente en la hoja de Excel.

Puedo lograr esto usando la función de correo electrónico incorporada de Excel, pero quería un botón porque necesito codificar la dirección de correo electrónico específica.

Así que en resumen me gustaría saber:

Me gustaría saber si hay una manera de: después de que un usuario abra el libro de Excel y realice ediciones, si el botón mantendrá el archivo adjunto con las actualizaciones.
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
El código ha sido optimizado. Pruébalo y gracias por tu comentario.

Private Sub CommandButton1_Click ()
'Actualizado por Extendoffice 2017/9/14
Dim xOutApp como objeto
Dim xOutMail como objeto
Dim xMailBody como cadena
On Error Resume Next
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
ActiveWorkbook.Guardar
xMailBody = "Contenido del cuerpo" & 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 correo electrónico de prueba haciendo clic en el botón"
.Cuerpo = xCuerpo de correo
.Archivos adjuntos.Agregar ActiveWorkbook.Nombre completo
.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
¿Cómo puedo adjuntar el Libro de trabajo activo al correo electrónico cuando presiono el botón?
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
Justo debajo de ".Body = xMailBody" agregue lo siguiente
.Archivos adjuntos.Agregar ActiveWorkbook.Nombre completo
Este comentario fue minimizado por el moderador en el sitio
Teria como em vez de enviar un planilha, enviar como informações em imagem?
Este comentario fue minimizado por el moderador en el sitio
usando este código VBA, ¿puedo hacer referencia a la información de la celda dentro del cuerpo del correo electrónico? Por ejemplo, ¿cómo haría referencia a los valores de las celdas en el código siguiente?

xMailBody = "Contenido del cuerpo" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"

Además, utilizando el código (.TO = "dirección de correo electrónico"). ¿Cómo puedo hacer que la "dirección de correo electrónico" extraiga una dirección de correo electrónico de una celda en la columna al lado?


Gracias,
Este comentario fue minimizado por el moderador en el sitio
¿Es posible agregar un segundo botón de correo electrónico dentro de la misma hoja de trabajo? Cuando trato de hacerlo, se está conectando al código desde el botón de correo electrónico original. Gracias.
Este comentario fue minimizado por el moderador en el sitio
Hola,
Debe asignar códigos diferentes a cada botón.
Este comentario fue minimizado por el moderador en el sitio
usando este código VBA, ¿puedo hacer referencia a la información de la celda dentro del cuerpo del correo electrónico? Por ejemplo, ¿cómo haría referencia a los valores de las celdas en el código siguiente?

xMailBody = "Contenido del cuerpo" & vbNewLine & vbNewLine & _
"Esta es la línea 1" & vbNewLine & _
"Esta es la línea 2"

Gracias,
Este comentario fue minimizado por el moderador en el sitio
Hola Glenn,
Por favor aplique el siguiente código. Gracias por tu comentario.
xCuerpo de correo = [B5]
Este comentario fue minimizado por el moderador en el sitio
¿Es posible, en lugar de enviar el archivo adjunto en el correo electrónico, enviar un hipervínculo al archivo (ubicado en SharePoint)?
Este comentario fue minimizado por el moderador en el sitio
Hola Laura,
No puedo ayudarte con eso. Gracias por tu comentario.
Este comentario fue minimizado por el moderador en el sitio
¿Puedo hacer referencia al valor en una celda en el asunto con una cadena? ¿Alguna variación de lo siguiente?

.Subject = "Nuevo evento:" & Target.Address = "$B$38"
Este comentario fue minimizado por el moderador en el sitio
Hola abi
Cambie el código a .Subject = "Nuevo evento:" & [B38].
Gracias por tu comentario.
Este comentario fue minimizado por el moderador en el sitio
Hi there,
¿Alguien podría ayudarme con el siguiente requisito?
Tengo una hoja de Excel que tiene dos listas desplegables.

1 lista desplegable- lista de departamentos

2 lista desplegable-categoría

Lo que quiero es cuando selecciono un departamento y una categoría de las listas (por ejemplo, si selecciono "ventas" en el departamento e "informe mensual" en la categoría)

Necesito enviar por correo electrónico la versión en PDF de esa hoja de trabajo al equipo de ventas con el asunto del correo electrónico como informe mensual.

Si selecciono "producción" de la lista de departamentos, el correo electrónico debe ir a un grupo de personas en la producción.

agradezco si me pueden ayudar en esto

Rasike
Este comentario fue minimizado por el moderador en el sitio
Hola Rasike,
Lo siento, no puedo ayudarte con eso. Bienvenido a publicar cualquier pregunta en nuestro foro: https://www.extendoffice.com/forum.html para obtener más soporte de Excel de nuestro profesional de Excel u otros fanáticos de Excel.
Este comentario fue minimizado por el moderador en el sitio
Hola,

¿Cómo puedo hacer que el correo agregue automáticamente mi firma desde Outlook?
Este comentario fue minimizado por el moderador en el sitio
Hola John,
El siguiente código de VBA puede ayudarlo a resolver el problema. Gracias por tu comentario.

Private Sub CommandButton1_Click ()
'Actualizado por Extendoffice 2019/6/26
Dim xOutApp como objeto
Dim xOutMail como objeto
On Error Resume Next
Establecer xOutApp = CreateObject("Outlook.Aplicación")
Establecer xOutMail = xOutApp.CreateItem(0)
Con xOutMail
.Mostrar 'o usar .Enviar
.To = "Dirección de correo electrónico"
.CC = ""
.BCC = ""
.Subject = "Enviar correo electrónico de prueba haciendo clic en el botón"
.HTMLBody = "Este es un envío de correo electrónico de prueba en Excel" & "
" & .HTMLBody
'.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
¿Tienes que ser un usuario de Excel al presionar el botón para enviar un correo electrónico? o simplemente la persona que recibe el correo electrónico tiene que ser un usuario de Outlook?
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
Como el correo electrónico debe enviarse a través de Outlook después de hacer clic en el botón en Excel, debe tener Outlook instalado en su computadora para que funcione.
Este comentario fue minimizado por el moderador en el sitio
Quiero enviar la hoja de cálculo de Excel en el correo electrónico, pero no lo envía. ¿Cómo se escribe el código para enviar el documento como correo electrónico?
Este comentario fue minimizado por el moderador en el sitio
Hola marcus,
El siguiente código de VBA puede ayudarlo a resolver el problema.

Sub Enviar hoja de trabajo ()
'Actualiza 20190626
Dim xFile como cadena
Dim xFormato siempre
Dim Wb como libro de trabajo
Dim Wb2 como libro de trabajo
Dim FilePath como cadena
Dim FileName como cadena
Dim OutlookApp como objeto
Dim OutlookMail como objeto
On Error Resume Next
Application.ScreenUpdating = False
Establecer Wb = Application.ActiveWorkbook
HojaActiva.Copiar
Establecer Wb2 = Application.ActiveWorkbook
Seleccionar caso Wb.FileFormat
Caso xlOpenXMLLibro de trabajo:
xArchivo = ".xlsx"
xFormat = xlOpenXMLWorkbook
Caso xlOpenXMLWorkbookMacroEnabled:
Si Wb2.HasVBProject Entonces
xArchivo = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
otro
xArchivo = ".xlsx"
xFormat = xlOpenXMLWorkbook
Si terminar
Caso Excel8:
xArchivo = ".xls"
formato x = Excel8
Caso xlExcel12:
xArchivo = ".xlsb"
formato x = xlExcel12
Fin Seleccionar
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Ahora, "dd-mmm-yy h-mm-ss")
Establezca OutlookApp = CreateObject("Outlook.Application")
Establecer OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
Con Correo de Outlook
.To = "skyyang @extendoffice.com "
.CC = ""
.BCC = ""
.Subject = "características kte"
.Body = "Por favor revise y lea este documento."
.Archivos adjuntos.Agregar Wb2.Nombre completo
.Monitor
'.Enviar
End With
Wb2.Cerrar
Matar FilePath & FileName & xFile
Establecer OutlookMail = Nada
Establecer OutlookApp = Nada
Application.ScreenUpdating = True
End Sub
Este comentario fue minimizado por el moderador en el sitio
¿Cómo puedo adjuntar la hoja de trabajo activa al correo electrónico cuando presiono el botón?
Este comentario fue minimizado por el moderador en el sitio
Hola Grant
Haga clic derecho en el botón y seleccione Ver código, luego copie el código debajo entre las líneas Private Sub y End Sub. Espero poder ayudar. Gracias por tu comentario.

Dim xFile como cadena
Dim xFormato siempre
Dim Wb como libro de trabajo
Dim Wb2 como libro de trabajo
Dim FilePath como cadena
Dim FileName como cadena
Dim OutlookApp como objeto
Dim OutlookMail como objeto
On Error Resume Next
Application.ScreenUpdating = False
Establecer Wb = Application.ActiveWorkbook
HojaActiva.Copiar
Establecer Wb2 = Application.ActiveWorkbook
Seleccionar caso Wb.FileFormat
Caso xlOpenXMLLibro de trabajo:
xArchivo = ".xlsx"
xFormat = xlOpenXMLWorkbook
Caso xlOpenXMLWorkbookMacroEnabled:
Si Wb2.HasVBProject Entonces
xArchivo = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
otro
xArchivo = ".xlsx"
xFormat = xlOpenXMLWorkbook
Si terminar
Caso Excel8:
xArchivo = ".xls"
formato x = Excel8
Caso xlExcel12:
xArchivo = ".xlsb"
formato x = xlExcel12
Fin Seleccionar
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Ahora, "dd-mmm-yy h-mm-ss")
Establezca OutlookApp = CreateObject("Outlook.Application")
Establecer OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
Con Correo de Outlook
.To = "skyyang @extendoffice.com "
.CC = ""
.BCC = ""
.Subject = "características kte"
.Body = "Por favor revise y lea este documento."
.Archivos adjuntos.Agregar Wb2.Nombre completo
.Monitor
'.Enviar
End With
Wb2.Cerrar
Matar FilePath & FileName & xFile
Establecer OutlookMail = Nada
Establecer OutlookApp = Nada
Application.ScreenUpdating = True
Este comentario fue minimizado por el moderador en el sitio
Hola,

¿Hay alguna forma de cambiar el nombre del archivo a la fecha actual cuando se adjunta al correo electrónico?
Este comentario fue minimizado por el moderador en el sitio
Hola,

He estado trabajando en una hoja, pero no puedo terminarla. Espero que me puedas ayudar :)

El archivo en sí debe ser un xltm (plantilla) y debe adjuntar la hoja en el correo.

Y una firma automática, entonces sería muy feliz.

Gracias de antemano/Dr. Nang
Este comentario fue minimizado por el moderador en el sitio
Hola, ejecuto una hoja de cálculo con 80 cuentas de barras individuales y he usado el código VBA en esta página con mucho éxito. Sin embargo, en el cuerpo del correo electrónico me gustaría copiar y pegar el rango específico de celdas de una cuenta al enviar para que el cliente pueda tener un historial. ¿Puedes ayudar con el código VBA para esto?
Este comentario fue minimizado por el moderador en el sitio
¡Hola! Muchas gracias por esto. Ha sido una ayuda fantástica.

¿Es posible enviar una hoja de trabajo activa presionando un botón en lugar del libro de trabajo completo?

¡Gracias!
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