Buen día, estoy intentando desde cualquier hoja excel que tenga tomar un rago crear una imagen jpg y luego que me la pegue en mi mail.
Pero el unico error que me surge se encuentra en esta linea "Set xRgPic = ThisWorkbook.Worksheets(SheetName).Range(xRgAddrss)",
He buscado por todos los medios pero no pude resolverlo.
Detallo mis dos módulos donde uno crea el mail y el otro la imagen temporal.
Desde ya muchas gracias a todos!
Sub sendMail()
Dim TempFilePath As String
Dim xOutApp As Object
Dim xOutMail As Object
Dim xHTMLBody As String
Dim xRg As Range
Dim asunto, enviar_a, copia_a As String
'On Error Resume Next
Range("a1").Activate
Set xRg = Application.InputBox("Por favor seleccion los datos del rango:", "Creando imagen", Selection.Address, , , , , 8)
asunto = InputBox("Escriba el asunto del mail", "Asunto del mail")
enviar_a = InputBox("Escriba las direcciones del mail, separando por ';' ", "Enviar a:")
copiar_a = InputBox("Escriba las direcciones del mail, separando por ';' ", "Copiar a:")
If xRg Is Nothing Then Exit Sub
With Application
.Calculation = xlManual
.ScreenUpdating = False
.EnableEvents = False
End With
Set xOutApp = CreateObject("outlook.application")
Set xOutMail = xOutApp.CreateItem(olMailItem)
'Llamamos al modulo para crear el JPG, enviandole el nombre de la hoja que estamos (ActiveSheet.Name) y el rango (xRg.Adress).
Call createJpg(ActiveSheet.Name, xRg.Address, "DashboardFile")
'Tomamos la imagen temportal
TempFilePath = Environ$("temp") & ""
'Creamos el cuerpo del mail
xHTMLBody = "<span LANG=EN>" _
& "<p class=style2><span LANG=EN><font FACE=Calibri SIZE=3>" _
& "<br>" _
& "<img src='cid:DashboardFile.jpg'>" _
& "<br></font></span>"
'Abrimos el mail
With xOutMail
.HTMLBody = xHTMLBody
'Adjuntamos la imagen al cuerpo del mail
.Attachments.Add TempFilePath & "DashboardFile.jpg", olByValue
'A quien se lo enviamos.
.To = enviar_a
'Con copia a:
.Cc = copiar_a
'Asunto del mensaje
.Subject = asunto & Date
'Desplegar mensaje... si estamos seguros de lo que enviamos, podemos modificar Display por Send y que se envie automaticamente el mismo.
.Display
End With
End Sub
Sub createJpg(SheetName As String, xRgAddrss As String, nameFile As String)
'Creando la imagen del rango en JPG.
Dim xRgPic As Range
'ThisWorkbook.Activate
Worksheets(SheetName).Activate
'Seleccionamos la hoja activa con el rango que le informamos en el modulo anterior.
Set xRgPic = ThisWorkbook.Worksheets(SheetName).Range(xRgAddrss)
'Copiamos la imagen.
xRgPic.CopyPicture
'Con la el nombre de la hoja, detectamos los valores de cada lado y altura, y creamos de manera temporal la imagen.
With ThisWorkbook.Worksheets(SheetName).ChartObjects.Add(xRgPic.Left, xRgPic.Top, xRgPic.Width, xRgPic.Height)
.Activate
.Chart.Paste
.Chart.Export Environ$("temp") & "" & nameFile & ".jpg", "JPG"
End With
Worksheets(SheetName).ChartObjects(Worksheets(SheetName).ChartObjects.Count).Delete
Set xRgPic = Nothing
End Sub