Saltar al contenido

Problema con código para enviar email


Recommended Posts

publicado

Estoy acá nuevamente para plantearles un problema que tengo: Resulta que tengo un código VBA el cual se encarga de enviar en el cuerpo de un mail en Outlook, un rango de celdas específicas además de enviar un archivo adjunto. Este código me funcionaba perfecto en un libro Excel, pero al copiar y pegar dicho código en otro libro éste no envia el mail. Al momento de ejecutarlo en teoría funciona correctamente, no me lanza errores ni nada, pero simplemente no me envía el correo. Les adjunto el código:

Sub Mail_Range_Outlook_Body()
' Don't forget to copy the function RangetoHTML in the module.
' Working in Office 2000-2010
Dim rng As Range
Dim ruta As Workbook
Dim OutApp As Object
Dim OutMail As Object
Dim ADJUNTO As Variant

With Application
.EnableEvents = False
.ScreenUpdating = False
End With

Set ruta = Application.Workbooks.Open(Filename:="C:\Matriz_Fact_sin digitar.xlsm")
Set rng = Nothing
On Error Resume Next
Set rng = ruta.Sheets("base info cobra").Range("FE9:FH29").SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If rng Is Nothing Then
MsgBox "La selección no es un rango o la hoja está protegida" & _
vbNewLine & "Por favor, corrija y vuelva a intentarlo.", vbOKOnly
Exit Sub
End If

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

ADJUNTO = "C:\Matriz_Fact_sin digitar.xlsm"

On Error Resume Next
With OutMail
.Attachments.Add (ADJUNTO)
.To = "xxxx@hotmail.com"
.CC = ""
.BCC = ""
.Subject = "Esta es la línea de asunto"
.HtmlBody = "Algo" & RangetoHTML(rng)
.Importance = 2
.Send 'or use .Send
End With
On Error GoTo 0

With Application
.EnableEvents = True
.ScreenUpdating = True
End With

Set OutMail = Nothing
Set OutApp = Nothing
End Sub[/CODE]

Si se dan cuenta, en la Propiedad .HTMLBody se llama a una función que les mando ahora:

[CODE]Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-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"
'Copia el rango de celdas y crea un nuevo libro...?
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 a 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 RangetoHTML
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 we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function


[/CODE]

Lo raro, que al debuguear el proyecto al momento de llegar a este línea:

[CODE]Set rng = Nothing[/CODE]

Me cambia el módulo para mostrarme la función.

Si alguien pudiera orientarme me sería de gran ayuda.

Saludos desde Chile!!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.