Favor vuestra ayuda con esta macro

Necesito
enviar un archivo excel como dato adjunto y una imagen pegada en el
cuerpo del correo, en este momento me esta adjuntado la planilla y la
imagen, no logro modificar la orden, les dejo el código para su revisión
'copiahoja()
Sheets("hoja1").Protect "tes2013"
Sheets("hoja2").Copy
Dim dia As String
Dim tim As String
Dim nom As String
Dim ext As String
Dim Path As String
dia = Format(Range("C5"), "DD-MM-YYYY")
tim = Format(Time(), "H-MM-SS")
ext = ".xls"
nom = nom + " " + dia + " " + "Hora" + " " + tim & ".xls"
Path = "d:\control" & nom
ActiveWorkbook.SaveAs Filename:=Path, FileFormat:=xlNormal
ActiveWorkbook.Close
Sheets("hoja1").Unprotect "tes2013"
Sheets("hoja1").Select
Dim Izq As Single, Arr As Single, Ancho As Single, Alto As Single
Dim OutApp As Object
Dim OutMail As Object
Dim ultFil As Long
Dim fec As String
fec = Format(Now, "dd-mmm-yyyy")
Application.DisplayAlerts = False
ActiveWindow.Zoom = 64 'Reduce la hoja para que la imagen quede ajustada al mail
With Range("a1:n20") 'Rango a guardar como imagen
Izq = .Left: Arr = .Top: Ancho = .Width: Alto = .Height: .CopyPicture
End With
With ActiveSheet.ChartObjects.Add(Izq, Arr, Ancho, Alto)
.Chart.Paste
.Chart.Export "D:\imag_" & fec & ".jpg" 'directorio en donde guarda la imagen
.Delete
End With
ActiveWindow.Zoom = 64 'Vuelve la hoja a su condición original
Application.DisplayAlerts = True
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = Range("P3").Value
.CC = Range("l2").Value
.BCC = ""
.Subject = "control" + " " + "del" + " " + Str(Date)
.Body = "Buenas Tardes:" + Chr(13) + Chr(13) + "Adjunto envío a usted informe de la referencia" + Chr(13) + Chr(13) + "Saludos."
.Attachments.Add "D:\control" + nom
.Attachments.Add "D:\imag_" & fec & ".jpg"
.display
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing

1 respuesta

Respuesta
1

Cuál es el problema que tienes, a qué te refieres con: "no logro modificar la orden"

En este minuto me adjunta la imagen y excel, pero necesito que la imagen se pegue en el correo y solo se adjunte el excel.-

Listo, esto me funciona muy bien en versión de excel 2007, me anexa el archivo y me pega la imagen.

Sub enviar()
Sheets("hoja1"). Protect "tes2013"
Sheets("hoja2"). Copy
Dim dia As String
Dim tim As String
Dim nom As String
Dim ext As String
Dim Path As String
dia = Format(Range("C5"), "DD-MM-YYYY")
tim = Format(Time(), "H-MM-SS")
ext = ".xls"
nom = nom + " " + dia + " " + "Hora" + " " + tim & ".xls"
Path = "d:\control" & nom
ActiveWorkbook.SaveAs Filename:=Path, FileFormat:=xlNormal
ActiveWorkbook.Close
Sheets("hoja1").Unprotect "tes2013"
Sheets("hoja1").Select
Dim Izq As Single, Arr As Single, Ancho As Single, Alto As Single
Dim OutApp As Object
Dim OutMail As Object
Dim ultFil As Long
Dim fec As String
fec = Format(Now, "dd-mmm-yyyy")
Application.DisplayAlerts = False
    ActiveWindow.Zoom = 64 'Reduce la hoja para que la imagen quede ajustada al mail
Application.DisplayAlerts = True
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.logon
Set dam2 = OutApp.CreateItem(0)
On Error Resume Next
With dam2
    .To = Range("P3").Value
    .CC = Range("l2").Value
    .Subject = "control" + " " + "del" + " " + Str(Date)
    .Body = "Buenas Tardes:" + Chr(13) + Chr(13) + "Adjunto envío a usted informe de la referencia" + Chr(13) + Chr(13) + "Saludos."
    With Range("a1:n20") 'Rango a guardar como imagen
        Izq = .Left: Arr = .Top: Ancho = .Width: Alto = .Height: .CopyPicture
    End With
    .display
        Application.Wait Now + TimeValue("00:00:03")
        DoEvents
        SendKeys "^{END}", True
        DoEvents
        SendKeys "^v", True
        DoEvents
    .Attachments.Add "d:\control" + nom
End With
On Error GoTo 0
Set dam2 = Nothing
Set OutApp = Nothing
End Sub

Saludos. Dante Amor
No olvides finalizar la pregunta.

Disculpa mi torpeza pero el archivo no me pega la imagen tendrá algo que ver con la combinación de teclas o deberá pegarlo como html.-

Lo pega como imagen, lo que tiene que ver es la versión de windows que tengas.

Como te dije a mi me funciona bien excel 2007 y outlook 2007.

Vamos a intentar por último cambiar el tiempo de espera, en esta línea, tengo que espere 3 segundos para que abra outlook y entonces copie y pegue la imagen.

Application. Wait Now + TimeValue("00:00:03")

Pon 5 ó 7 segundos y prueba nuevamente.

Si no te pega la imagen es por las versiones que tienes, entonces deberás buscar pegar la imagen manualmente o seguir enviando el archivo.

Dam una ultima consulta en que parte se guarda la imagen copiada.-

La imagen con esta instrucción la pone en la memoria de tu máquina.

With Range("a1:n20") 'Rango a guardar como imagen
Izq = .Left: Arr = .Top: Ancho = .Width: Alto = .Height: .CopyPicture
End With

Después con esta instrucción, la pega en el cuerpo del correo

SendKeys "^v", True

En tu macro original, primero copia la imagen (la pone en memoria), y luego la pega y la guarda en D:\, en un archivo llamado "img_" la fecha y ".jpg", con estas instrucciones

With ActiveSheet.ChartObjects.Add(Izq, Arr, Ancho, Alto)
.Chart.Paste
.Chart.Export "D:\imag_" & fec & ".jpg" 'directorio en donde guarda la imagen
.Delete
End With

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas