Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Envio email Macro

Boa tarde,

Preciso enviar emails para diferentes contatos de alguns relatórios do Qlikview, como não tenho o PDF Distribution e nem o NPrint a solução esta sendo por macro.

1-Consegui com a ajuda do post do Yuri gerar o arquivo PDF

2-não estou conseguindo enviar o emai

Poderiam me ajudar?

sub TesteEmail

Set objMsg = CreateObject("CDO.Message")

Set msgConf = CreateObject("CDO.Configuration")

  'Server Configuration

msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" 'smtp do email

msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "meu@gmail.com"  'seu email

msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "minhasenha" 'senha

msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1

msgConf.Fields.Update

'End With

  objMsg.To = "parameu@hotmail.com" 'email pra quem voce quer mandar

  objMsg.From = "domeu@gmmail.com" 'seu email

  objMsg.Subject = "teste qlikview"

  objMsg.HTMLBody = "testando e-mail "

  'objMsg.AddAttachment "C:\...\tabela.jpg"

  objMsg.AddAttachment "C:\Users\twister\Desktop\PDF\TABELA_PRECO.pdf"

  objMsg.Sender = "Mr. Name"

  Set objMsg.Configuration = msgConf

  objMsg.Send

  msgbox("e-mail enviado")

  Set objMsg = nothing

  Set msgConf = nothing

end sub

Sub TabelaPreco

'Imprime Tabela de Preço

'Chamada da função passando os seguintes argumentos - 1: Nome do arquivo a ser gerado - 2: Nome do Report a ser gerado

PrintPDF "TABELA_PRECO", "RP01"

ActiveDocument.GetApplication.WaitForIdle

End Sub

Sub PrintPDF(ReportName, ReportID)

  'Caminho a ser gerado o relatório encontra-se na variável

  Path = ActiveDocument.Evaluate("vPathArquivos")

  'Criando instância do PDFCreator

    Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

  'Variáveis de configuração da biblioteca PDFCreator

    With pdfjob

   'Verificações da fila da impressora

      If .cStart("/NoProcessingAtStartup") = False Then

         If .cStart("/NoProcessingAtStartup", True) = False Then

           'Caso não tenha nenhum objeto na fila de impressão, termina a macro.

           Exit Sub

         End if

       

         'Caso tenha objeto na fila de impressão, torne a impressão visível

         .cVisible = True

      End If

      .cOption("UseAutosave") = 1 'Permitir o Autosave

      .cOption("UseAutosaveDirectory") = 1 'Permitir que grave no diretório

      .cOption("AutosaveDirectory") = Path 'Caminho que será gravado o relatório

      .cOption("AutosaveFilename") = ReportName 'Nome que será gravado o relatório

      .cOption("AutosaveFormat") = 0 'Formato PDF

      .cClearCache

  'Finalizando as configurações da biblioteca PDFCreator

    End With

    'Imprime o relatório

    ActiveDocument.PrintReport ReportID, "PDFCreator"

    'Aguarde até que o processo entre na fila de impressão

    Do Until pdfjob.cCountOfPrintjobs = 1

    ActiveDocument.GetApplication.Sleep 20

    Loop

    pdfjob.cPrinterStop = False

    'Aguarda até que a fila de impressão esteja vazia

    Do Until pdfjob.cCountOfPrintjobs = 0

    ActiveDocument.GetApplication.Sleep 20

    Loop

  

    'Termina o processo

    pdfjob.cClose

  

    'Zerando a variável

    Set pdfjob = Nothing

End Sub

Labels (5)
17 Replies
Ribeiro
Specialist
Specialist

Caro Alessandro,

Estou usando seu exemplo.

Na hora que executo ele esta chamando.

Mas não conseguir entender como faço ele gravar na pasta.

alguma dica.

2015-12-15_15-45-37.png

Neves
Not applicable
Author

Agnaldo, esse codigo aqui Gera o arquivo .pdf e envia por email funciona corretamente

Lembre-se apenas de configurar o vPathArquivos no script do qlikview

exemplo: 'C:\Users\Yuri\Blog QlikView\Exportar em PDF (Macro)';

Sub TabelaPreco

'Imprime Tabela de Preço

'Chamada da função passando os seguintes argumentos - 1: Nome do arquivo a ser gerado - 2: Nome do Report a ser gerado

PrintPDF "teste", "RP01"

ActiveDocument.GetApplication.WaitForIdle

Email()

End Sub

Sub PrintPDF(ReportName, ReportID)

  'Caminho a ser gerado o relatório encontra-se na variável

  Path = ActiveDocument.Evaluate("vPathArquivos")

  'Criando instância do PDFCreator

    Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

  'Variáveis de configuração da biblioteca PDFCreator

    With pdfjob

   'Verificações da fila da impressora

      If .cStart("/NoProcessingAtStartup") = False Then

         If .cStart("/NoProcessingAtStartup", True) = False Then

           'Caso não tenha nenhum objeto na fila de impressão, termina a macro.

           Exit Sub

         End if

        

         'Caso tenha objeto na fila de impressão, torne a impressão visível

         .cVisible = True

      End If

      .cOption("UseAutosave") = 1 'Permitir o Autosave

      .cOption("UseAutosaveDirectory") = 1 'Permitir que grave no diretório

      .cOption("AutosaveDirectory") = Path 'Caminho que será gravado o relatório

      .cOption("AutosaveFilename") = ReportName 'Nome que será gravado o relatório

      .cOption("AutosaveFormat") = 0 'Formato PDF

      .cClearCache

  'Finalizando as configurações da biblioteca PDFCreator

    End With

    'Imprime o relatório

    ActiveDocument.PrintReport ReportID, "PDFCreator"

    'Aguarde até que o processo entre na fila de impressão

    Do Until pdfjob.cCountOfPrintjobs = 1

    ActiveDocument.GetApplication.Sleep 20

    Loop

    pdfjob.cPrinterStop = False

    'Aguarda até que a fila de impressão esteja vazia

    Do Until pdfjob.cCountOfPrintjobs = 0

    ActiveDocument.GetApplication.Sleep 20

    Loop

   

    'Termina o processo

    pdfjob.cClose

   

    'Zerando a variável

    Set pdfjob = Nothing

End Sub

Sub Email

on error resume next

Const schema   = "http://schemas.microsoft.com/cdo/configuration/"

Const cdoBasic = 1

Const cdoSendUsingPort = 2

Dim oMsg, oConf

' Propriedades do email

Set oMsg      = CreateObject("CDO.Message")

oMsg.From     = "seuemail" ' ou "Nome do remetente <from@gmail.com>"

oMsg.To       = "destinatario"       ' ou "Nome do destino <to@gmail.com>"

oMsg.Subject  = "Teste de VBscript"

oMsg.TextBody = "Envio anexo  !!! Enjoy it"

oMsg.AddAttachment "Caminho anexo"

' Configuração e autenticação do seu servidor de SMTP BOL

Set oConf = oMsg.Configuration

'Endereço do servidor de SMTP

oConf.Fields(schema & "smtpserver")       = "smtps.bol.com.br"

'Número da porta

oConf.Fields(schema & "smtpserverport")   = 587

oConf.Fields(schema & "sendusing")        = cdoSendUsingPort

'Tipo de autenticacao

oConf.Fields(schema & "smtpauthenticate") = cdoBasic

'Uso da Encriptação SSL

oConf.Fields(schema & "smtpusessl")       = False

'Envia username

oConf.Fields(schema & "sendusername")     = "seuemail"

'Envia password

oConf.Fields(schema & "sendpassword")     = "suasenha"

oConf.Fields.Update()

' Envia mensagem

oMsg.Send()

' Retorna o status da mensagem

If Err Then

    resultMessage = "ERROR " & Err.Number & ": " & Err.Description

    Err.Clear()

Else

    resultMessage = "Mensagem enviada com sucesso !!!"

End If

Wscript.echo(resultMessage)

End Sub

Ribeiro
Specialist
Specialist

Alessandro,

Parabéns funcionou 100%

Toda a configuração está mesmo na PDFCreator.

Muito bom.

Estava procurando algo assim, faz tempo muito simples.

É automático e totalmente oculto.

Parabéns

2015-12-15_15-57-12.png

Neves
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Aonde salva o PDF está nas opções do PDFCreator.

A macro vai em disco buscar o PDF salvo pelo PDFCreator

De: Agnaldo neves

Enviada em: terça-feira, 15 de dezembro de 2015 15:48

Para: Alessandro Furtado <furtado@bildenservicos.com.br>

Assunto: Re: - Envio email Macro

<https://community.qlik.com/?et=watches.email.thread> Qlik Community

Envio email Macro

resposta de Agnaldo neves <https://community.qlik.com/people/agnaldoneves?et=watches.email.thread> em Qlik Brasil - Visualize a discussão completa <https://community.qlik.com/message/934626?et=watches.email.thread#934626>

furtado@farolbi.com.br
Ribeiro
Specialist
Specialist

Fernando uma pergunta.

Qual linha de código eu digo qual objeto vai para o pdf.

Na imagem abaixo do seu exemplo esta indo teste 123

Como faço para ir a tabela abaixo.

2015-12-15_16-15-30.png

Neves
Ribeiro
Specialist
Specialist

Fiz isso, não tinha lindo todo sua dica.

Funcionou 100%.

Obrigado

Agora preciso defini como escolhe qual objeto e posso enviar via pdf.

exemplo abaixo.

Neves
Ribeiro
Specialist
Specialist

Fernando,

Deu tudo certo. Pensei que era um objeto.

Mas é um relatório.

Obrigado pela atenção!

2015-12-15_16-31-51.png

2015-12-15_16-31-06.png

Neves
Paula1
Creator
Creator

2023-11-04_11-00-55.jpg

objEmail.AddAttachment "C:\Geral\tmp\VENDAS.pdf"

 

Afurtado como faço para pegar a Variavel vAnexo1 e colocar

objEmail.AddAttachment "C:\Geral\tmp\vAnexo1.pdf" 'Preciso corrigir 

para eu ter um resultado. C:\Geral\tmp\VENDAS2.pdf

 

 

Sub Envio()
'Set TabelaEmails = ActiveDocument.Fields("Gerente").GetPossibleValues(1000)
'For contEmail = 0 to TabelaEmails.Count - 1  ' Aqui faz um Laco com o campo "Gerente"......
'ActiveDocument.Fields("Gerente").Select TabelaEmails.Item(contEmail).Text
        '===========================================================================================
        'Aqui apaga se tiver os arquivos.....
        Set filesys = CreateObject("Scripting.FileSystemObject")
If filesys.FileExists("C:\Geral\tmp\VENDAS.pdf") then
filesys.DeleteFile "C:\Geral\tmp\VENDAS.pdf"
End If
 
'Set filesys = Nothing
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\AUDITORIA.pdf") then
' filesys.DeleteFile "C:\Geral\tmp\AUDITORIA.pdf"
' End If
'Set filesys = Nothing
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\RECEBIMENTOS.pdf") then
' filesys.DeleteFile "C:\Geral\tmp\RECEBIMENTOS.pdf"
' End If
''
'Set filesys = Nothing
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\COMPRAS.pdf") then
' filesys.DeleteFile "C:\Geral\tmp\COMPRAS.pdf"
' End If
'Set filesys = Nothing
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\VENDAS_HORA.pdf") then
' filesys.DeleteFile "C:\Geral\tmp\VENDAS_HORA.pdf"
' End If
        '===========================================================================================
        ' Aqui roda o relatorio ID   RP01
ActiveDocument.GetApplication.Sleep 2000
Set filesys = Nothing
        ActiveDocument.PrintDocReport "RP01", "RP01"   
PrintReport()
ActiveDocument.GetApplication.Sleep 5000
' Aqui se existe o PDF, entao renomeia ele.......
        Set filesys = CreateObject("Scripting.FileSystemObject")
If filesys.FileExists("C:\Geral\tmp\QlikView Printing.pdf") then
   filesys.MoveFile "C:\Geral\tmp\QlikView Printing.pdf", "C:\Geral\tmp\VENDAS.pdf"
End If
Set filesys = Nothing
ActiveDocument.GetApplication.Sleep 5000
 
''' ' Aqui roda o relatorio ID   RP04
'        ActiveDocument.PrintDocReport "RP04", "RP04"   
'PrintReport()
'ActiveDocument.GetApplication.Sleep 3000
' ' Aqui se existe o PDF, entao renomeia ele.......
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\QlikView Printing.pdf") then
'    filesys.MoveFile "C:\Geral\tmp\QlikView Printing.pdf", "C:\Geral\tmp\TIT_ABERTOS.pdf"
' End If
' Set filesys = Nothing
'
'        ActiveDocument.PrintDocReport "RP06", "RP06"   
'PrintReport()
'ActiveDocument.GetApplication.Sleep 3000
' ' Aqui se existe o PDF, entao renomeia ele.......
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\QlikView Printing.pdf") then
'    filesys.MoveFile "C:\Geral\tmp\QlikView Printing.pdf", "C:\Geral\tmp\AUDITORIA.pdf"
' End If
' Set filesys = Nothing
' ActiveDocument.GetApplication.Sleep 3000
'''===========================================================================================
' ActiveDocument.PrintDocReport "RP07", "RP07"   
'PrintReport()
'ActiveDocument.GetApplication.Sleep 3000
' ' Aqui se existe o PDF, entao renomeia ele.......
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\QlikView Printing.pdf") then
'    filesys.MoveFile "C:\Geral\tmp\QlikView Printing.pdf", "C:\Geral\tmp\RECEBIMENTOS.pdf"
' End If
' Set filesys = Nothing
' ActiveDocument.GetApplication.Sleep 3000
''        '===========================================================================================
'        ActiveDocument.PrintDocReport "RP08", "RP08"   
'PrintReport()
'ActiveDocument.GetApplication.Sleep 3000
' ' Aqui se existe o PDF, entao renomeia ele.......
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\QlikView Printing.pdf") then
'    filesys.MoveFile "C:\Geral\tmp\QlikView Printing.pdf", "C:\Geral\tmp\COMPRAS.pdf"
' End If
' Set filesys = Nothing
' ActiveDocument.GetApplication.Sleep 3000
'''        '========================================================
' ActiveDocument.PrintDocReport "RP09", "RP09"   
'PrintReport()
'ActiveDocument.GetApplication.Sleep 3000
' ' Aqui se existe o PDF, entao renomeia ele.......
'        Set filesys = CreateObject("Scripting.FileSystemObject")
' If filesys.FileExists("C:\Geral\tmp\QlikView Printing.pdf") then
'    filesys.MoveFile "C:\Geral\tmp\QlikView Printing.pdf", "C:\Geral\tmp\VENDAS_HORA.pdf"
' End If
' Set filesys = Nothing
' ActiveDocument.GetApplication.Sleep 3000
 
'========================================================
'        ' Inicio das configuracoes do EMAIL
' Inicio das configuracoes do EMAIL
  SMTPServer =  "mail.x.com.br"
SMTPUser =   "biosanto@x.com.br"
SMTPpPWD =    "x"
SMTPPorta =   "465"
Set objEmail = CreateObject("CDO.Message")
Set objConf = objEmail.Configuration
Set objFlds = objConf.Fields
With objFlds
'---------------------------------------------------------------------
if len(SMTPServer) > 0 then
else
end if
.Update
'---------------------------------------------------------------------
Destinatario = GetVariable("vDestinatario")
Numero = GetVariable("vNumero")
Espaco = GetVariable("vEspaco")
    Titulo = GetVariable("vTitulo")
     Assunto = GetVariable("vAssunto")
     Anexo1 = GetVariable("vAnexo1")
 
End With
objEmail.To       = Destinatario
'objEmail.CC       = "c"
objEmail.Bcc       = "contato@xcom.br"
objEmail.From     = "biosanto@x.com.br"
objEmail.Subject  =   Assunto & Anexo1
objEmail.HTMLBody =   Numero & Espaco & Titulo  
        '============================================================
        '===========================================================================================
        'Aqui colocamos os anexos.....
objEmail.AddAttachment "C:\Geral\tmp\VENDAS.pdf"
 
'        '===========================================================================================
objEmail.Send
        '===========================================================================================
        'Aqui apagamos os arquivos pois senao da erro na proxima vez.....
'ActiveDocument.Save
ActiveDocument.GetApplication.Sleep 5000
       
'Next
'ActiveDocument.Fields("Gerente").Clear ' Limpar Filtro por Email
 
 
End Sub
Paula Santos
vitória - ES