Skip to main content
Announcements
Introducing a new Enhanced File Management feature in Qlik Cloud! GET THE DETAILS!
cancel
Showing results for 
Search instead for 
Did you mean: 
diego_vazquez
Contributor III
Contributor III

Como automatizar envío de tablas por email (VBSCRIPT macro)

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

3 Replies
sorrakis01
Specialist
Specialist

Genial Diego!

Gracias por compartir.

Saludos,

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Buen trabajo, a ver cuando puedo probarlo

ecolomer
Master II
Master II

Gracias por compartir

Saludos,

Enrique