Notifications
Clear all

Gerar Relatório PDF

7 Posts
2 Usuários
0 Reactions
2,253 Visualizações
 jvra
(@jvra)
Posts: 21
Eminent Member
Topic starter
 

Prezados, boa tarde. Sou iniciante em VBA e preciso exportar um relatório de pesquisa para o formato PDF, estou utilizado um código que me atende em parte, pois devido a repetição do nome do arquivo PDF a macro gera erro e não salva mais no mesmo local.

Segue o código:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:UsersUsuárioDesktopENTRADA E SAÍDA DE DADOS " & ActiveSheet.Range("E1").Value& & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

Como podem ver o valor da célula E1 compõe o nome do arquivo. Na verdade ela é uma célula que funciona como rótulo. Preciso de um comando que toda vez que eu clique no botão exportar, um PDF seja gerado.

Desde já agradeço,

 
Postado : 12/08/2016 1:38 pm
Basole
(@basole)
Posts: 487
Reputable Member
 

Segue sugestão. Se um arquivo "ENTRADA E SAÍDA DE DADOS " & .Range("E1").Value".pdf" ja existir,
a macro acrescenta uma numeração (1), (2), (3) ... ex.: ENTRADA E SAÍDA DE DADOS " & ActiveSheet.Range("E1").Value(1).pdf
e salva.

Sub Salvar_Pdf_MesmoNome()

Dim nome As String
Dim k As Integer
Dim fName As String


If activeSheet.Range("E1") = "" Then MsgBox "Preencha todos os dados": Exit Sub

nome = "C:UsersUsuárioDesktopENTRADA E SAÍDA DE DADOS " & ActiveSheet.Range("E1").Value & ".pdf"

If Len(Dir(nome, vbNormal)) = 0 Then
      GoTo Fin
      Else
         fName = nome
         Do Until Len(Dir(nome, vbNormal)) = 0
            k = k + 1
            nome = VBA.Replace(VBA.LCase(fName), ".pdf", "(" & k & ").pdf")
            Loop
Fin:
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nome, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
    
End Sub

Click em se a resposta foi util!

 
Postado : 12/08/2016 2:19 pm
 jvra
(@jvra)
Posts: 21
Eminent Member
Topic starter
 

Segue sugestão. Se um arquivo "ENTRADA E SAÍDA DE DADOS " & .Range("E1").Value".pdf" ja existir,
a macro acrescenta uma numeração (1), (2), (3) ... ex.: ENTRADA E SAÍDA DE DADOS " & ActiveSheet.Range("E1").Value(1).pdf
e salva.

Sub Salvar_Pdf_MesmoNome()

Dim nome As String
Dim k As Integer
Dim fName As String


If activeSheet.Range("E1") = "" Then MsgBox "Preencha todos os dados": Exit Sub

nome = "C:UsersUsuárioDesktopENTRADA E SAÍDA DE DADOS " & ActiveSheet.Range("E1").Value & ".pdf"

If Len(Dir(nome, vbNormal)) = 0 Then
      GoTo Fin
      Else
         fName = nome
         Do Until Len(Dir(nome, vbNormal)) = 0
            k = k + 1
            nome = VBA.Replace(VBA.LCase(fName), ".pdf", "(" & k & ").pdf")
            Loop
Fin:
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nome, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
    
End Sub

Olá Basole, obrigado pela ajuda.
Mas está ocorrendo o seguinte erro: "Erro em tempo de execução '1004': O documento não foi salvo, talvez esteja aberto ou pode ter ocorrido um erro durante a gravação".

O erro se manifesta nessa parte do código.

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nome, Quality:=xlQualityStandard _
, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

O que pode estar gerando erro?

 
Postado : 15/08/2016 8:05 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Este error acredito que seja por causa do diretorio. Verifique se o caminho esta correto e altere no codigo caso não esteja: ("C:UsersUsuárioDesktop")

De qq forma, eu acrescentei no codigo um tratamento de erro para caso a macro não encontrar o referido diretorio.

Sub Salvar_Pdf_MesmoNome_2()

Dim nome As String
Dim k As Integer
Dim fName As String
Dim sPath As Variant

sPath = "C:UsersUsuárioDesktop"

If Dir(sPath, vbDirectory) = "" Then MsgBox "Diretorio não encontrado! verifique!": Exit Sub

If ActiveSheet.Range("E1") = "" Then MsgBox "Preencha todos os dados": Exit Sub

nome = sPath & "ENTRADA E SAÍDA DE DADOS " & ActiveSheet.Range("E1").Value & ".pdf"
  
If Len(Dir(nome, vbNormal)) = 0 Then
      GoTo Fin
      Else
         fName = nome
         Do Until Len(Dir(nome, vbNormal)) = 0
            k = k + 1
            nome = VBA.Replace(VBA.LCase(fName), ".pdf", "(" & k & ").pdf")
            Loop
            End If
Fin:
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nome, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
    
End Sub

Click em se a resposta foi util!

 
Postado : 15/08/2016 8:51 am
 jvra
(@jvra)
Posts: 21
Eminent Member
Topic starter
 

Basole, perfeito. É exatamente o que eu precisava.

Apenas tentei alterar para UCase na intenção de padronizar o nome dos relatórios em maiúsculo mas não deu certo. Deu estouro de memória na expressão k = k + 1.

No mais, está funcionando a contento.

Obrigado!

 
Postado : 15/08/2016 11:34 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Coloque o ucase neste trecho do codigo:

  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=VBA.UCase(nome), Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True

Click em se a resposta foi util!

 
Postado : 15/08/2016 11:56 am
 jvra
(@jvra)
Posts: 21
Eminent Member
Topic starter
 

Basole

Perfeito. Resolvido.

Obrigado!

 
Postado : 15/08/2016 12:08 pm