Notifications
Clear all

ERRO AO ALTERAR ESTRUTURA NO NOME DE GRAVAÇÃO DO ARQUIVO

10 Posts
4 Usuários
0 Reactions
2,163 Visualizações
(@sandrolima)
Posts: 0
New Member
Topic starter
 

Boa noite, pessoal do fórum

Tenho esse arquivo que estampa uma marca d'água (Plano de Fundo) no PDF gerado a partir de uma planilha do Excel.

No módulo 01 (original) a macro executa a rotina desejada perfeitamente estampa a marca d'água, gera e salva o PDF com e sem estampa na pasta onde se encontra o arquivo do excel e abre o PDF com a estampa (marca d'água/plano de fundo) ao final.

No módulo 02 (modificado), fiz uma pequena alteração na estrutura de gravação (nome do arquivo gerado) da maneira que preciso que ele seja salvo e a partir de então ele executa toda a rotina EXCETO por apresentar um erro e não abrir o PDF com a estampa ao final da rotina.

Algum colega poderia verificar e me ajudar com isso.

Segue link com o anexo dos aplicativos para a realização da tarefa.

https://www.sendspace.com/file/93j20g

Muito obrigado a todos que puderem colaborar.

 
Postado : 05/08/2018 5:28 pm
(@mprudencio)
Posts: 0
New Member
 

É so alterar openpublish:=false para true

 
Postado : 05/08/2018 6:12 pm
(@sandrolima)
Posts: 0
New Member
Topic starter
 

Não é esse o erro.

Peço que teste o módulo estampa modificado (botão módulo 2) e verá.

Ele deveria fazer como o módulo 01 e abrir o pdf com a estampa da marca d'água... mas não faz isso e apresenta o referido erro.

 
Postado : 05/08/2018 6:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente:

Public Sub SALVAR_PDF()
    Dim pdfIn As String, sPath As String, Nome 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
    sPath = ThisWorkbook.Path & ""
    With wshRecibo
    Nome = VBA.Replace(.Range("F14"), " ", "_")
        Pdtk = "PdfTk.exe"
        pdfIn = "RECIBO.pdf"
        pdfStamp = "SeuLogoMarcadAgua.pdf"
       
        'Essa é a estrutura atual com a qual preciso salvar o nome do PDF gerado. Gera o PDF mas apresenta um erro e não abreo PDF gerado no final
        pdfOut = Format(Date, "yyyy.mm.dd") & "_" & Nome & "(RECIBO)" & ".pdf"
       
        .PageSetup.PrintArea = ""
        .PageSetup.PrintArea = .Range("B9:P43").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) & sPath & Pdtk & Chr(34) & " """ & sPath & pdfIn & """ background " & Chr(34) & _
    sPath & pdfStamp & Chr(34) & " output """ & sPath & 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(sPath & pdfOut) = "" Then ' verf. se o arquivo existe
            Call VBA.Shell("cmd.exe /C Start " & Dir(sPath & pdfOut), vbMinimizedNoFocus) 'cmd abre o pdf convertido
     End If

trataErro:

Application.ScreenUpdating = True

End Sub
 
Postado : 06/08/2018 2:38 am
(@sandrolima)
Posts: 0
New Member
Topic starter
 

Bom dia, Reinaldo

Muito obrigado pela ajuda... já me ajudou muito aqui.

Estou estudando sobre macros e VBA mas sou um mero iniciante. Para ajudar no meu aprendizado poderia comentar a linha:

VBA.Replace(.Range("F14"), " ", "_")

Mais uma coisa:

Ele gerou o nome de gravação: 2018.06.08_Fulano_da_Silva(RECIBO)

Há como eu deixá-lo com a seguinte formatação exata: 2018.06.08 FULANO DA SILVA (RECIBO)

Seria substituir "_" por espaços e o nome com letras maiúsculas? Apenas na formatação da estrutura de gravação mesmo (lá na planilha fica como está mesmo).

Muito obrigado e desculpe pelo incômodo.

 
Postado : 06/08/2018 7:22 am
(@sandrolima)
Posts: 0
New Member
Topic starter
 

Bom dia.

Alguém mais poderia me ajudar com isso?

Está quase da maneira que é p funcionar.

Muito obrigado.

 
Postado : 08/08/2018 5:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O erro apresentado e justamente o espaço existente na formação do nome do arquivo.
O comando VBA.Replace(.Range("F14"), " ", "_") foi artificio utilizado para eliminar esses espaços, para maiusculo pode utilizar UCase(VBA.Replace(.Range("F14"), " ", "_")).
Fiz alguns testes, vendo as informações localizadas para o comando CMD, e ainda não consegui montar uma string "entendivel" para esse comando, mesmo replicando parte da string montada para a gravação, pois lá funcionou; porem devido ao tempo disponível ...
Em tempo: Nos testes efetuados notei também se o caminho informado, os diretórios tiverem espaço em sua composição; tipo "C:Recibos 2018"; irá gerar erro tambem

 
Postado : 08/08/2018 6:46 am
(@sandrolima)
Posts: 0
New Member
Topic starter
 

Entendo, Reinaldo.

Muito obrigado de qualquer maneira.

Vou deixar o tópico em aberto por enquanto caso vc ou algum colega aqui do fórum tenha alguma solução para adequar.

Muito obrigado mesmo.

 
Postado : 09/08/2018 10:46 am
(@teleguiado)
Posts: 0
New Member
 

Sandro, conforme explicado pelo Reinaldo se substituir o código abaixo:

Call VBA.Shell("cmd.exe /C Start " & pdfOut, vbMinimizedNoFocus) 'cmd abre o pdf convertido

Por este o erro não ocorre mais.

ThisWorkbook.FollowHyperlink pdfOut

É um jeito de abrir o arquivo após gerar o mesmo, pois o erro era somente na hora de abrir o arquivo gerado.

 
Postado : 09/08/2018 12:50 pm
(@sandrolima)
Posts: 0
New Member
Topic starter
 

Pronto!!!!

Resolvido. Ficou excelente.

MPrudencio... Reinaldo... teleguiado...

Muito obrigado pela colaboração de vcs.

Vcs foram 10! Estou há mais de mês procurando uma solução.

Muito obrigado mesmo.

 
Postado : 09/08/2018 1:21 pm