Hola a todos:
¿Qué tal estáis?, espero que bien! Hoy vamos a trabajar un poco la programación de Outlook y la posibilidad de enviar la hoja activa por correo.
Aunque lo que realmente me gusta es la programación de datos y su transformación mediante algoritmos, de vez en cuando tengo que acercarme a este tipo de códigos para atender algunas peticiones.
Es muy posible que cuando escriba y publique este post, surjan voces comentando que este tipo de trabajos debe realizarse en otro tipo de tecnología (web) y lenguaje acorde. Pero como siempre digo, estoy atendiendo una petición que me pide expresamente hacerlo en VBA, ya sea porque el solicitante no quiere otra tecnología, porque supone mayor gasto o por cualquier otro motivo.
Y ahora sin más preámbulos vamos con un ejemplo. Imaginad que cuelgo en este post un archivo Excel para que sea descargado y el usuario realice una valoración de mi página web. Algo así:
La idea es que el lector escriba en la celda A3 lo que considere y a continuación pulse el botón «Enviar datos» y el archivo pase a Outlook para ser enviado o dejarlo en la bandeja de salida.
Para hacerlo vamos a utilizar el siguiente código:
Option Explicit
Sub ENVIAR_CORREO()
Dim NFormat As Long, RutaTemporal As String
Dim ArchGuard As Workbook, NombreArchTemp As String
Dim OutApp As Object, OutMail As Object
'Desactivamos pantalla
Application.ScreenUpdating = False
'Copiamos hoja activa
ThisWorkbook.ActiveSheet.Copy
'eliminamos botón de comando en la nueva hoja
ActiveSheet.Shapes.Range(Array("Rounded Rectangle 1")).Select
Selection.Delete
Set ArchGuard = ActiveWorkbook
'Vaciamos datos de la variable
NombreArchTemp = vbNullString
'Obtenemos ruta a la carpeta temporal
RutaTemporal = Environ$("temp") & "\"
'Creamos nombre del archivo con usuario banco y fecha y hora
NombreArchTemp = UCase("Mi valoración sobre Excel Signum " & Format(Now, "hh-mm-ss"))
'Guardamos el archivo
ArchGuard.SaveAs RutaTemporal & NombreArchTemp & ".xlsx"
'Iniciamos appoutlook
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'Componemos el correo
With OutMail
.to = "email"
.CC = ""
.BCC = ""
.Subject = UCase("Valoración Excel Signum")
.HTMLBody = "<BODY style=font-size:12pt;font-family:Calibri> Espero que esta valoración sea útil para crear nuevos contenidos. <br><br> Un saludo"
'anexamos archivo
.Attachments.Add ArchGuard.FullName
.display 'dejamos en bandeja de salida. Si queremos enviar .send
End With
ArchGuard.Close
End Sub
Como podéis observar, la dinámica de esta macro es que vamos a crear una copia de nuestra hoja activa y guardarla en la carpeta de archivos temporales para luego subirla como archivo adjunto.
Con la función Environ podemos obtener la ruta a la carpeta de archivos temporales Environ$(«temp»). El resto se realiza con el APP de Outlook.
Además he incluido una línea de código para eliminar el botón de comando de la copia.
ActiveSheet.Shapes.Range(Array("Rounded Rectangle 1")).Select
Selection.Delete
Por otra parte el archivo de exportación es .xlsx si necesitáis otro formato sólo tenéis que modificar la extensión.
Y esto es todo. Espero que os haya resultado interesante y de utilidad 🙂
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
Saludos, me gustaría aplicar la macro, lo puse a prueba y funciona correctamente, me gustaría me apoyen como puedo enviar no solo la hoja activa, si no varias hojas especificas del mismo libro. Espero se entienda la pregunta, y desde luego muchas gracias por el apoyo. Atte Etson
Eso lo puedes hacer copiando las hojas que necesitas guardarlas y que sea la macro la que adjunte el correo. Intento hacerlo cuando tenga un momento.
Pero podrías intentarlo utilizando la grabadora de macros y alguno de los código que tengo sobre outlook.