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.

Donate Button with Credit Cards

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

Comparte este post