Correção de código ...
 
Notifications
Clear all

Correção de código VBA para conversão em PDF

11 Posts
4 Usuários
0 Reactions
3,045 Visualizações
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Bom dia, colegas forumeiros

Com a ajuda de um colega de outro fórum há um tempinho atrás foi construído esse código que converte uma imagem em PDF.

Public Sub SALVAR_PDF()
Dim pdfIn As String
Dim pdfStamp As String
Dim pdfOut As String
Dim Pdtk As String
Dim strExec As String

VBA.ChDir ThisWorkbook.Path & ""

On Error GoTo trataErro

Application.ScreenUpdating = False

With WS_Recibo

Pdtk = "PdfTk.exe"
pdfIn = "RECIBO.pdf"
pdfStamp = "MARCA D'ÁGUA (RECIBO).pdf"

       ' pdfOut = "RECIBO-" & .Range("I11").Value & _
       ' "_" & Format(Now, "dd_mm_yy_hh_mm_ss") & ".pdf"

       pdfOut = Format(Now, "yyyy.mm.dd") & " " & UCase(.Range("G17").Value) & " (RECIBO)" & ".pdf"[/color]

.PageSetup.PrintArea = ""
.PageSetup.PrintArea = .Range("B8:Q49").Address(External:=True)

.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ThisWorkbook.Path & "RECIBO.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

.PageSetup.PrintArea = ""

End With

strExec = Chr(34) & Chr(34) & Pdtk & Chr(34) & " """ & pdfIn & """ background " & Chr(34) & _
pdfStamp & Chr(34) & " output """ & pdfOut & """" ' Estrut. do comando

Call VBA.Shell("cmd.exe /C " & strExec, vbMinimizedNoFocus) ' cmd chama o utilit.que converte

Application.Wait (Now + TimeValue("00:00:06")) ' aguarda 6 seg.

If Not Dir(pdfOut) = "" Then ' verf. se o arquivo existe
Call VBA.Shell("cmd.exe /C Start " & pdfOut, vbMinimizedNoFocus) 'cmd abre o pdf convertido

End If

trataErro:

Application.ScreenUpdating = True

End Sub
__________________________________________________________________________________
Public Sub JanelaImpressao()

Application.Dialogs(xlDialogPrint).Show

End Sub

Recentemente precisei fazer uma alteração na estrutura do registro de gravação (podem ver como era na parte que está comentada e como ficou logo abaixo).
Até aí tudo bem... ele executa a rotina normalmente. Inclusive converte o PDF e o salva na pasta.

O problema surge na hora de localizar o arquivo agora... exatamente na última linha Call... antes do End If.
Ele apresenta uma msg de erro alertando que o Windows não pode localizar o arquivo (que aqui no caso começa com a data.

"O Windows não pôde encontrar o arquivo '2018.07.25'. Certifique-se de que o nome foi digitado corretamente e tente novamente."
Essa data aí é só um exemplo... refere-se ao início do nome de gravação.

E com isso ele deixa de fazer o restante da atividade que no caso era abrir o PDF convertido.

Podem me ajudar a consertar isso?

E indo mais além... na atual estrutura do código ele salva o PDF na mesma pasta onde se encontra a planilha e eu gostaria q o PDF convertido fosse salvo na pasta C:EmpresaContabilidadeRecibos Emitidos.
O que eu deveria acrescentar/alterar no código?

Muito obrigado a quem puder colaborar.

 
Postado : 26/07/2018 7:27 am
(@klarc28)
Posts: 971
Prominent Member
 

Clique no botão editar e retire do título de seu tópico as palavras Ajuda para.

Quando incluir código neste fórum, aperte o botão code.

 
Postado : 26/07/2018 10:51 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pelo descrito e rotina, não há aparentemente incoerência.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/07/2018 12:42 pm
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Obrigado pelo retorno aos que se dispuseram a verificar problema.

Mas conforme mencionei o problema persiste... tudo o que fiz foi alterar o formato do nome de registro ao salvar o arquivo gerado.

Ele executa toda a rotina da atividade... exceto quando chega nessa linha:


Call VBA.Shell("cmd.exe /C Start " & pdfOut, vbMinimizedNoFocus)


Ele até gera e salva o arquivo com o formato que coloquei na rotina... mas ao final ele apresenta a seguinte mensagem de erro.

"O Windows não pôde encontrar o arquivo '2018.07.25'. Certifique-se de que o nome foi digitado corretamente e tente novamente."
Essa data aí é só um exemplo... refere-se ao início do nome de gravação.

E com isso ele deixa de fazer o restante da atividade que no caso era abrir o PDF convertido.

Não sei se o problema também pode estar nessa parte do código:

strExec = Chr(34) & Chr(34) & Pdtk & Chr(34) & " """ & pdfIn & """ background " & Chr(34) & _
pdfStamp & Chr(34) & " output """ & pdfOut & """"

Essa parte do código eu não entendo.

 
Postado : 26/07/2018 1:47 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Experimente este codigo.

Preste atenção aos comentarios que deixei no codigo para realizar os devidos ajustes


Sub SalvarPDF()

Dim Arquivo As String
Dim Caminho As String
Dim WSRecibo As Worksheet

'Troque Planilha1 pelo nome de sua Guia que devera ser salva
Set WSRecibo = Sheets("Planilha1")

'Altere o caminho do arquivo onde este devera ser salvo
Caminho = "C:EmpresaContabilidadeRecibos Emitidos"

'Ajuste o nome do arquivo a ser salvo
Arquivo = "RECIBO" & "-" & WSRecibo.Range("I11").Value & "_" & Format(Now, "dd_mm_yy_hh_mm_ss") & ".pdf"

'Se a ideia for imprimir nao precisa criar o pdf e abri-lo.
'Imprime o recibo na impressora padrao.

WSRecibo.PrintOut

'Se for apenas para imprimir apague o codigo a partir desta linha.
'Gerando o PDF
ChDir Caminho

    WSRecibo.Range("B8:Q49").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Caminho & Arquivo, Quality:=xlQualityMinimum, OpenAfterPublish:=True


MsgBox " Arquivo Salvo Com Sucesso", vbOKOnly, "Criando PDF"

End Sub



Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 29/07/2018 1:24 pm
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa tarde, MPrudencio e demais colegas do fórum

Ainda não consegui fazer a correção do código. Tentei utilizar o seu código junto mas infelizmente não consegui resolver sozinho e por isso venho pedir ajuda de vcs mais uma vez.

Estou anexando os arquivos utilizados... os anexos de imagem são apenas exemplos para teste.

Estou mandando a planilha com o código original na forma de comentário e na forma modificada (na estrutura desejada para o nome final do arquivo) onde apresenta o erro e não abre o PDF ao final da rotina.

Adicionalmente à correção do código gostaria de implementar a informação do caminho para salvar o PDF em que foi adicionada a imagem como marca d'água (C:EMPRESAEMISSOR DE RECIBOSRECIBOS EMITIDOS).

O outro arquivo (PDF) gerado sem a marca d'água continua com a rotina existente e salva no mesmo endereço da pasta de trabalho (como está atualmente).

Seguem arquivos em anexo.

Obrigado antecipadamente aos que se dispuserem a ajudar.

 
Postado : 02/08/2018 1:32 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Poste em um servidor pode ser este

sendspace.com

Coloque o link aqui

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 02/08/2018 2:29 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Por alguma razão que nao sei qual acusa que seu arquivo esta infectado por virus.

Não consigo fazer download.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 02/08/2018 3:22 pm
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Que estranho.

Compactei novamente em novo formato e estou enviando o novo link.

https://www.sendspace.com/file/dtyzym

Mas uma vez obrigado pela atenção.

 
Postado : 02/08/2018 4:49 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Consegui baixar o arquivo.

Mas com base no seu comentario apos o meu e no arquivo que vc enviou cheguei a conclusao que vc aparentemente nao testou o codigo que enviei.

No meu primeiro post tem um codigo que salva em pdf e imprime se vc assim quiser.

Inclusive salva no caminho que vc citou na sua postagem anterior a minha.

Experimente-o!!!

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 03/08/2018 3:00 pm
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa Noite, MPrudencio

Obrigado pela ajuda mais uma vez.

Quanto ao seu código eu testei sim... funciona... rodou direitinho.

A questão é que ele não estampa a marca d'água no PDF gerado. Por isso mandei o código original que eu tinha. Ele fazia toda a rotina que eu preciso até eu precisar alterar a estrutura do nome do arquivo gerado.

Pelo código original ele criava dois PDF... um sem a marca d'água estampada (que recebe o nome de RECIBO.PDF) e outro que recebe a estampa da marca d'água que recebia o nome conforme a estrutura:

pdfOut = "RECIBO-" & .Range("I11").Value & _
        "_" & Format(Now, "dd_mm_yy_hh_mm_ss") & ".pdf"

Como pode ver eu fiz uma alteração na estrutura do nome para gravação (nome do PDF a ser gerado). A forma comentada é como ele estava rodando normalmente e o código atual é com a estrutura do nome de gravação que eu editei.
Código atual:

pdfOut = Format(Date, "yyyy.mm.dd") & " " & UCase(.Range("F14").Value) & " (RECIBO)" & ".pdf"

A partir daí ele apresenta o erro... faz a rotina que eu preciso... estampa a marca d'água no PDF, gera e salva o PDF criado... exceto pq ele apresenta um erro ao localizar o arquivo e não abre mais o PDF ao final.

Bom... esse é o problema apresentado. Somado a isso eu pedi uma ajuda para criar a linha de comando que cria o endereço onde o PDF deveria ser salvo C:EMPRESAEMISSOR DE RECIBOSRECIBOS EMITIDOS

Bom é isso... de tudo o que eu queria é que a partir do código original que enviei (no qual eu só alterei a estrutura do nome de gravação do PDF) ele continuasse a fazer exatamente o que fazia. Estampar a marca d"água, gerar e salvar o PDF, e abri-lo ao final.

Rode o código original e depois com a minha alteração para vc ver o erro apresentado.

Obrigado mais uma vez.

 
Postado : 03/08/2018 7:20 pm