Notifications
Clear all

Gerar PDF de algumas planilhas

20 Posts
5 Usuários
0 Reactions
8,187 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Amigos

Possuo um arquivo com 15 abas... porem precisaria de fazer um unico comando (botão) no qual ela geraria um arquivo em PDF (relatorio) somente das abas que escolhi (ja esteja programado).

A macro abaixo, eu utilizava em aba, por aba... queria resumir isso num único botão.

Sub Relatório()
' Relatório Macro
' pdf
'
' Atalho do teclado: Ctrl+Shift+P
'
  endereco = "w:RelatórioRelatório " & ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
endereco, Quality:=xlQualityStandard, IncludeDocProperties:=True _
, IgnorePrintAreas:=False, OpenAfterPublish:=False

End Sub

abraços

 
Postado : 21/02/2011 11:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Perez, já estou de saida do serviço, mas você pode criar um Listbox aonde o mesmo fosse alimentado com os nomes das ABAS e com a opção de MultiSelect captar os nomes dos itens selecionados, joga-los a uma variável, por exemplo swRelatPDF e com a opção For Each passar para sua rotina aonde trocariamos ActiveSheet.Name por swRelatPDF.Name, ou ainda ter os nomes das Abas que quer transformar, em uma sequencia de Celulas e utilizar o mesmo recurso captando os nomes nas celulas e passando para a variavel.

Não sei se me expressei corretamente, mas qq duvida retorne, e assim que possível posto um modelo com a sugestão acima.

[]s

 
Postado : 21/02/2011 1:59 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Perez, veja se seria isto, testei como outro tipo de arquivo pois no meu excel não uso PDF, qq duvida retorne.

1) Crie um Userform com os seguintes controles :
Um LISTBOX
Um CommandButton

De clique duplo no userForm e Cole as rotinas abaixo :

Dim i As Integer

Private Sub CommandButton2_Click()
Dim i As Integer

'Conta os itens do listbox
For i = 0 To ListBox1.ListCount - 1

'Verifica se o item do listbox esta selecionado
'Se estiver selecionado continua a rotina
    If ListBox1.Selected(i) Then
    
            endereco = "w:RelatórioRelatório " & ListBox1.List(i) & ".pdf"
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            endereco, Quality:=xlQualityStandard, IncludeDocProperties:=True _
            , IgnorePrintAreas:=False, OpenAfterPublish:=False
    
    End If
Next
End Sub


Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    'Adiciona os Nomes das Abas no Listbox
        For Each ws In ThisWorkbook.Worksheets
                ListBox1.AddItem (ws.Name)
        Next ws
        
End Sub

Depois selecione o ListBox1 no UserForm e na Janela a Esquerda em Propriedade na Guia Categorizado Selecione a Propriedade MultiSelect e defina como fmMultiSelectMulti

Faça os teste e qq coisa retorne.

[]s

 
Postado : 21/02/2011 6:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal,

Não funciona para mim essa rotina:

Sub Relatório()
'
' Relatório Macro
' pdf
'
'
endereco = "D:Relatório" & ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
endereco, Quality:=xlQualityStandard, IncludeDocProperties:=True _
, IgnorePrintAreas:=False, OpenAfterPublish:=False

End Sub

Acontece o seguinte erro:
Erro em tempo de execução '5':
Argumento ou chamada de procedimento inválida

Não funciona a rotina do JPerez nem a do Mauro...
O que pode ser?

Atenciosamente,
Adriano Prachthäuser

 
Postado : 22/02/2011 7:30 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal,

Já resolvi o problema, faltava usar um suplemento.. rs

Atenciosamente
Adriano Prachthäuser

 
Postado : 22/02/2011 8:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gostei da ideia...

Porem preciso de algo simples....
No proprio codigo ja estaria indicado qual planilha iria salvar em PDF.
Tenho as planilhas Menu, plan1, plan2, plan3, plan4, plan5.

Ao clicar no botão X numa planilha menu... ela geraria automaticamente o pdf das planilhas Plan1, plan3, plan5

Abraços

 
Postado : 22/02/2011 9:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

JPerez,

Deve ter um jeito melhor:

Sub Relatório()
'
' Relatório Macro
' pdf
'
'
Sheets("Plan1").Select
endereco = "D:Relatório" & ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
endereco, Quality:=xlQualityStandard, IncludeDocProperties:=True _
, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("Plan3").Select
endereco = "D:Relatório" & ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
endereco, Quality:=xlQualityStandard, IncludeDocProperties:=True _
, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("Plan5").Select
endereco = "D:Relatório" & ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
endereco, Quality:=xlQualityStandard, IncludeDocProperties:=True _
, IgnorePrintAreas:=False, OpenAfterPublish:=False

End Sub

Não consegui pensar um jeito de selecionar um planilha por vez para gerar o PDF...

Mauro, justamente por causa disso o seu modo gera relatório iguais, pois não muda a planilha selecionada (ativada).

Atenciosamente,
Adriano Prachthäuser

 
Postado : 22/02/2011 11:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Para Slecionar as Planilhas, acrescente na Rotina :

If ListBox1.Selected(i) Then

endereco = "w:RelatórioRelatório " & ListBox1.List(i) & ".pdf"
Sheets(ListBox1.List(i)).Select
. . . . . . . . . . . . .

Para deixar as Planilhas fixas diretamente na rotina, podemos tambem utilizar um Array, assim que der construa uma outra com esta opção.

[]s

 
Postado : 22/02/2011 1:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,

Ficou perfeito!!

Atenciosamente,
Adriano Prachthäuser

 
Postado : 22/02/2011 1:37 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gostei da ideia...
Porem preciso de algo simples....
No proprio codigo ja estaria indicado qual planilha iria salvar em PDF.
Tenho as planilhas Menu, plan1, plan2, plan3, plan4, plan5.
Ao clicar no botão X numa planilha menu... ela geraria automaticamente o pdf das planilhas Plan1, plan3, plan5

Abraços

Como eu disse anteriormente, podemos fixar os Nomes das Planilhas em um Array, então associe a rotina abaixo a um Botão :

Sub Gera_Pdf()
Dim i, ListSheets As Variant
i = 0
    'Array com as Planilhas a serem convertidas
    ListSheets = Array("Plan1", "Plan2", "Plan3", "Plan4", "Plan5")
 
        For Each i In ListSheets
            endereco = "w:RelatórioRelatório " & i & ".pdf"
            Sheets(i).Select
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            endereco, Quality:=xlQualityStandard, IncludeDocProperties:=True _
            , IgnorePrintAreas:=False, OpenAfterPublish:=False
        Next i
End Sub

Faça os testes e veja se é isso.

abraços

 
Postado : 22/02/2011 5:15 pm
(@geovanerocha)
Posts: 51
Trusted Member
 

Como que ao exportar para PDF também grava a data e hora ao nome do arquivo?

 
Postado : 09/03/2013 6:22 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Primeiro: lembrando que os nomes de arquivos não podem utilizar alguns caracteres, entre eles "/" e ":"; portanto data e hora devem ser formatados diferentemente.
então deve ter
data = VBA.Format(Date, "dd-mm-yyyy")
hora = VBA.Format(Time, "hh.mm.ss")

Segundo: não sei qual a rotina para obter o nome do arquivo de saida; supondo que seja :

endereco = "D:Relatório" & ActiveSheet.Name & ".pdf"
então utilize, por exemplo:
endereco = "D:Relatório" & ActiveSheet.Name & "-" & data & "-" & hora .pdf"

 
Postado : 09/03/2013 6:43 am
(@jozelia)
Posts: 0
New Member
 

Boa Noite Mauro,
Também estou a procura do mesmo objetivo, peguei seu código mas ele gera um PDF para cada aba.
Você saberia uma opção para gerar um PDF só com o conteúdo de varias abas.
ex:
a plan 1 e pagina 1
a plan 2 e pagina 2
a plan 3 e pagina 3
...

Desde já agradeço.

 
Postado : 19/05/2017 7:35 pm
(@wzxnet7)
Posts: 0
New Member
 

Para a pergunta da Jozelia eu tenho 2 sugestões:
1- usar o PDF CREATOR para juntar num só PDF os diversos PDF's produzidos pela macro.
2 - utilizar uma planilha auxiliar onde a macro copiará as planilhas à serem impressas e depois exporta essa única planilha para o PDF.
Sds.

 
Postado : 20/05/2017 11:54 am
(@brunoxro)
Posts: 0
New Member
 

Boa tarde Jozelia,

Tenho um código que salva algumas planilhas selecionadas em PDF (Módulo5 da planilha em anexo).
Para você, acredito que seja só adaptar o critério para sua necessidade.

Sub Salvar_Planilhas_Em_PDF()
    
    Rem Atenção: Lembre-se de adaptar o critério (IF).
    
    ThisWorkbook.Activate
    
    Dim Plan        As Worksheet
    Dim Nomes()     As Variant
    
    Dim w           As Double: w = 1
    Dim i           As Double: i = 0
    
    Dim p           As Integer:    p = 1
    Dim NumPlan     As Integer
    
    Rem Número de Planilhas.
    NumPlan = Worksheets.Count

    
    Rem Coloca to tamanho da váriavel nome.
    ReDim Nomes(1 To NumPlan) As Variant
    '
    Dim n            As Variant
    Dim Plans()      As Variant
    
    Rem Começa o For Each.
    For Each Plan In Worksheets
        
        'Aqui você tem que adaptar o critério de acordo com sua Planilha
        'Se o nome da Planilha Selecionada é diferente de "Não Salvar Em PDF"
        If Plan.Name <> "Não Salvar em PDF" Then
        
            Rem Nome da Planilha.
            Nomes(w) = Plan.Name
            n = Nomes(w)
            
            Rem Se usar o Preserve no ReDim, não perde a informação _
            anterior durante o Loop.
            ReDim Preserve Plans(i)
            
            Plans(i) = n
            
            w = w + 1
            i = i + 1
        End If
        
    Next Plan
    
    Rem Selecina as Planilhas.
    Sheets(Plans).Select
        
    Rem Vai salvar o PDF na mesma pasta desse arquivo de Excel.
    Dim Caminho     As String
    Caminho = ThisWorkbook.Path
    Dim Nome        As String
    Rem Nome do arquivo que será salvo.
    Nome = "Planilha Salva em PDF " & Format(Now, "hh mm ss")
    
    Rem Salvar em PDF.
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Caminho & "" & Nome, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
        
    Rem Não parei para melhorar o código, mas acredito que ele possa ser reduzido

End Sub

Se não conseguir adaptar, coloque uma planilha de exemplo.

att,

 
Postado : 23/05/2017 2:11 pm
Página 1 / 2