Macro MailEnvelope Outlook Express

Buenas tardes experto, queria saber si hay algun tipo de codigo que envie mail a travez de outlook express.
El problema es que ehe intentado varias opciones antes de preguntar aqui. Lo primero que hice fue hacer ponerle grabar nueva macro hice todo y finalmente pare la grabacion, la ejecute y nada, entonces busque en internet haber si encontraba algo y encontre mucho pero para outlook y desgraciadamente para outlook express encontre solo un codigo para enviar la hoja activa como datos adjuntos.
Lo que en verdad quisiera es un codigo que envie un rango ("A1:G55") a [email protected] y que en el asunto diga Reporte no. (aqui me escriba la celda e9) y que mande el rango por mail como parte del cuerpo del mensaje no como datos adjuntos.
Lo anterior lo vengo haciendo de la siguiente manera: Selecciono el rango (a1:g55) le doy click al boton en la barra de herramientas de destinatario de correo, posterior a ello me sale un cuadro de pregunta que dice que si quiero enviar como parte del cuerpo la seleccion o quiero adjuntarlo como archivo, le doy click a enviar como parte del cuerpo y lleno el formulario que aparece con el destinarario y el asunto y doy click a enviar esta seleccion y lo hace de maravilla justo lo que quiero. Solo que todo este procedimiento lo quisiera hacer con una sola macro para evitar errores.
Gracias de antemano por su respuesta.

1 respuesta

Respuesta
Tienes que copiar este código dentro de la Herramientas Macro / editor de visual basic dentro del código de la hoja que envias, que en el código esta como "Hoja1", deberás cambiarlo al nombre de tu hoja.
Sub Mail_Selection_Range_Outlook_Body()
' You need to use this module with the RangetoHTML subroutine.
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010.
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Set rng = Nothing
    On Error Resume Next
    Set rng = Sheets("Hoja1").Range("a1:g55").SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If rng Is Nothing Then
        MsgBox "The selection is not a range or the sheet is protected. " & _
               vbNewLine & "Please correct and try again.", vbOKOnly
        Exit Sub
    End If
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    On Error Resume Next
    With OutMail
        .To = " [email protected] "
        .CC = ""
        .BCC = ""
        .Subject = "Reporte no. " & Sheets("Hoja1").Cells(9, 5).Value
        .HTMLBody = RangetoHTML(rng)
        ' In place of the following statement, you can use ".Display" to
        ' display the e-mail message.
        .Send
    End With
    On Error GoTo 0
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
Function RangetoHTML(rng As Range)
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010.
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook
    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
    ' Copy the range and create a workbook to receive the data.
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With
    ' Publish the sheet to an .htm file.
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With
    ' Read all data from the .htm file into the RangetoHTML subroutine.
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")
    ' Close TempWB.
    TempWB.Close savechanges:=False
    ' Delete the htm file.
    Kill TempFile
    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas