Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas a todos.
Contribuyo a esta gran comunidad con estas pautas para el envío automático de tablas que tenemos en Qlikview que me ha servido mucho y puede que os sea de utilidad en algún momento. Quiero remarcar que no es de mi autoría si no que solo lo he adaptado para mis necesidades.
Este es el código que deberemos introducir en el editor de modulo de macros:
sub CreateHtmlBodyMail
'Creación de variables que usaremos en la macro
dim doc, obj, objArr, file, path
dim i
dim vStart, vBetween, vEnd, TempHTML, HtmlContent, fso
'Inicializar las variables
set doc = ActiveDocument
path = "ruta donde queremos que se guarde el html que enviaremos"
objArr = array("nombre_tabla") ' Se crea un array con los datos de la tabla que vamos a enviar
set fso = CreateObject("Scripting.FileSystemObject")
'Creamos la tabla HTML que vamos a enviar a raiz de la tabla especificada
for i = 0 to ubound(objArr)
set obj = doc.GetSheetObject(objArr(i))
file = "HTML " & i
obj.ExportHtml path & file & ".html"
doc.GetApplication.Sleep 500
set TempHTML = fso.OpenTextFile(path & file & ".html", 1, true)
HtmlContent = TempHTML.readall
if i = 0 then
vStart = mid(HtmlContent, 1, instr(HtmlContent, "<!--EndFragment-->")-1) & chr(10)
vEnd = chr(10) & mid(HtmlContent, instr(HtmlContent, "<!--EndFragment-->") + 18)
elseif i > 0 then
vBetween = vBetween & mid(HtmlContent, instr(HtmlContent, "<!--StartFragment-->"), instr(HtmlContent, "<!--EndFragment-->") + 10) & chr(10 )& chr(10)
end if
TempHTML.close
next
'Creamos el contenido de la tabla en HTML que hemos creado
HtmlContent = vStart & vBetween & vEnd
set TempHTML = fso.OpenTextFile(path & "Master.html", 2, true)
TempHTML.write HtmlContent
TempHTML.close
'configuración de envio del Email
Dim objEmail, config
Set objEmail = CreateObject("CDO.Message")
config = "http://schemas.microsoft.com/cdo/configuration/"
objEmail.Configuration.Fields.Item(config & "sendusing") = 2 'http://msdn.microsoft.com/en-us/library/exchange/ms873037%28v=exchg.65%29.aspx
objEmail.Configuration.Fields.Item(config & "smtpserver") = "nombre o IP del servidor remoto"
objEmail.Configuration.Fields.Item(config & "sendusername") = "nombre usuario server"
objEmail.Configuration.Fields.Item(config & "sendpassword") = "contraseña server"
objEmail.Configuration.Fields.Item(config & "smtpserverport") = 25 'Puerto del servidor (normalmente el 25)
objEmail.Configuration.Fields.Item(config & "smtpusessl") = False '¿Usa SSL para la conexión?
objEmail.Configuration.Fields.Item(config & "smtpconnectiontimeout") = 60 'Tiempo máximo para intento de conexión con el servidor
objEmail.Configuration.Fields.Update 'Finalizar la conexion remota SMTP
objEmail.From = "email desde el que se hace el envio"
objEmail.To = "email del destinatario" ' Si se quiere poner mas de uno se separa con ; con todos los email dentro de las comillas. Por ejemplo: "equipo1@gmail.com;equipo2@gmail.com"
objEmail.CC = "email destinatarios en copia"
objEmail.Subject="Asunto del email "
'POr ejemplo: objEmail.Subject = if(Time()>=TimeValue("00:00:00")and Time()<TimeValue("00:30:00") then "Seguimiento Interno " &" 23-24 horas" elseif "Seguimiento Interno " & Date()&" " & hour(now())-1&"-" & hour(now())&" horas")
objEmail.CreateMHTMLBody "file://" & path & "Master.html"
'Enviar Mail
objEmail.Send
end sub
Espero que os sirva de ayuda en algún momento.
Un saludo
Genial Diego!
Gracias por compartir.
Saludos,
Buen trabajo, a ver cuando puedo probarlo
Gracias por compartir
Saludos,
Enrique