16 Replies Latest reply: Dec 15, 2015 1:34 PM by Agnaldo Neves RSS

    Envio email Macro

    Edson Lana

      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

        • Re: Envio email Macro
          Alessandro Furtado

          twiester8, boa noite.

           

          eu tenho um modelo  que eu uso.

           

          Segue ele como exemplo e a configuracao do PDFCreator.  Ele tem que salvar automaticamento em uma pasta para o arquivo ser enviado por email.

           

          Configuracao PDFCreator.png

            • Re: Envio email Macro
              Edson Lana

              Boa noite, desde já obrigado pela ajuda

               

              Estou com problemas não esta gerando o arquivo .pdf e nem enviando o email.

               

              se vc puder dar uma olhada em que estou erradno no .qvw

                • Re: Envio email Macro
                  Alessandro Furtado

                  twister8,

                   

                  segue o modelo alterado. Este modelo fazia um loop em um determinado campo e disparava um PDF para cada um com os dados deles.  Me parece que basta um unico PDF então mudei o código.

                   

                  Segue um outro modelo de exemplo com uma exportação para jpg e envio de email no corpo.

                   

                  Tem um outro pdf2 que tambem gera um pdf e envia email.

                    • Re: Envio email Macro
                      Edson Lana

                      Boa tarde,

                       

                      Uma pergunta:

                       

                      Considerando o seguinte cenário do ambiente qlikview, onde tenho servidores para a carga, para o access point e para as aplicações. Em quais dos servidores eu deveria instalar o PDFCreator 1.7.3

                        • Re: Envio email Macro
                          Pablo Labbe

                          Instale no mesmo servidor onde está o qlikview desktop, já que as macros são executadas através dele.

                          • Re: Envio email Macro
                            Alessandro Furtado

                            conforme o Pablo falou, no server aonde tem o qv desktop. Eu alugaria licenca para ele e ainda desativar o update do pdfcreator senao fica perguntando se quer atualizar e nao roda o email.......

                              • Re: Envio email Macro
                                Edson Lana

                                Boa tarde, obrigado pelas respostas.

                                 

                                Verifiquei que há instalado o PDF-XChange 3.0 vou tentar fazer utilizando esse.

                                 

                                Vocês sabem se é possível?

                                  • Re: Envio email Macro
                                    Alessandro Furtado

                                    Este é instalado pelo QlikServer.   Mesmo assim eu instalo o PDFCreator pois tem que definir aonde vai salvar o arquivo .pdf que sera lido pela macro para enviar por email.

                                      • Re: Envio email Macro
                                        Edson Lana

                                        é então achei um código e estou tentando usar, funcionou gerou o PDF, mas ele abre a a tela do PDF-XChange para eu definir o local para salvar e o nome do arquivo.

                                         

                                        Com o PDF-XChange eu não consigo definir onde salvar o arquivo de forma automática via macro, como o codigo que temos do PDFCreator? eu preciso realmente ter o PDFCreator instalado?

                                         

                                        codigo usado do PDF-XChance

                                         

                                        public Sub Print_PDF(sPDFPath_src, sPDFPath_dest, sPDFName_dest, sReportID)

                                         

                                        ActiveDocument.PrintReport sReportID, "PDF-XChange 3.0", false

                                         

                                        Set objFSO = CreateObject("Scripting.FileSystemObject")

                                        'If the folder not exists then -> create

                                        If Not objFSO.FolderExists(sPDFPath_dest) Then

                                          Set newfolder = objFSO.CreateFolder(sPDFPath_dest)

                                        End If

                                         

                                        PDFFullName = sPDFPath_dest & "\" & sPDFName_dest

                                        'If the file exists then -> delete

                                        If objFSO.FileExists(PDFFullName) then

                                          objFSO.DeleteFile PDFFullName

                                        End If

                                        objFSO.MoveFile sPDFPath_src, PDFFullName

                                         

                                        Set objFSO = Nothing

                                         

                                        ActiveDocument.GetApplication.Sleep 2000

                                         

                                        End Sub

                            • Re: Envio email Macro
                              Agnaldo Neves

                              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

                                • Re: Envio email Macro
                                  Edson Lana

                                  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

                                  • Re: Envio email Macro
                                    Agnaldo Neves

                                    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

                                    • Re: Envio email Macro
                                      Alessandro Furtado

                                      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>

                                    • Re: Envio email Macro
                                      Agnaldo Neves

                                      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