Notifications
Clear all

Gerar PDF de abas específicas na caixa de listagem

15 Posts
3 Usuários
0 Reactions
2,254 Visualizações
(@leostamato)
Posts: 0
New Member
Topic starter
 

Pessoal, to bem enferrujado em VBA no Excel e preciso de ajuda.
Preciso que minha planilha gere pdf das abas selecionadas em uma caixa de listagem.
Criei um Userfom com commadButton + caixa de listagem e to usando as funções abaixo, mas ta dando erro falando q o documento não foi salvo.
Alguém consegue me ajudar nisso?
Vlw abs

Private Sub UserForm_Click()
Dim i As Integer

Private Sub CommandButton1_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 = "C:Relatórios TD PDFs " & ListBox1.List(i) & ".pdf"
Sheets(ListBox1.List(i)).Select

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

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

 
Postado : 25/08/2015 9:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Tente assim...

Private Sub CommandButton1_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 = "C:Usersalexandre.goncalvesDownloads" & ListBox1.List(i) & ".pdf"
        Sheets(ListBox1.List(i)).Select
        If WorksheetFunction.CountA(Cells) = 0 Then
            Exit Sub
        Else
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nome_Arquivo, Quality _
        :=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
        End If
    End If
Next
End Sub

A ideia é essa, mas talvez deva verificar se as guias selecionadas estão vazias...

Att

 
Postado : 26/08/2015 6:34 am
(@leostamato)
Posts: 0
New Member
Topic starter
 

Bom dia Alexandre,

Ainda esta dando erro. As guias sempre terão algo preenchido.

Se vocÊ não se importar, posso mandar a planilha para você tentar achar o problema.

meu email:[email protected]

vlw abs e obrigado pela ajuda!

 
Postado : 26/08/2015 7:39 am
(@leostamato)
Posts: 0
New Member
Topic starter
 

Segue uma planilha teste.

Eu preciso que o botao gere pdf de todas a abas q forem selecionadas.

Tb não lembro como deixar o Userform na primeira aba do excel, para o usuário ter acesso.

vlw Abs

 
Postado : 26/08/2015 9:58 am
(@mprudencio)
Posts: 0
New Member
 

Pq vc não faz uma unica aba para cada item assim vc vai poder salvar o arquivo em pdf da aba ativa, como ja esta no codigo que salva em pdf

Mais simples e bem mais objetivo.

 
Postado : 26/08/2015 11:29 am
(@mprudencio)
Posts: 0
New Member
 

O que precisa de fato é ajustar a formatação de sua planillha.

 
Postado : 26/08/2015 11:30 am
(@leostamato)
Posts: 0
New Member
Topic starter
 

MPrudencio,

Eu preciso ter abas separadas por categoria de funcionários (Doméstica, Cozinheira, etc), pois a ficha é padrão na empresa. De acordo com a categoria da funcionária, a ficha será preenchida com as Abas relacionadas. Por isso preciso salvar em PDF somente as abas necessárias. Alem do que, terão Abas de apoio a planilha que não podem sem incluídas no pdf.
Essa planilha está desformatada sim, mas o que realmente preciso é da macro que gere PDFs de acordo com minha seleção na listbox.

 
Postado : 26/08/2015 11:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Confesso que ainda não entendi, pelo que pude verificar a rotina existente gera PDF conforme a seleção então o que não vi??

 
Postado : 26/08/2015 1:06 pm
(@leostamato)
Posts: 0
New Member
Topic starter
 

Reinaldo, o problema que estou tendo é que quando eu seleciono 2 ou + abas (pela listbox) e aperto no botão para gerar pdf, ele só gera da ultima aba selecionada. Ex: Se selecionar "Geral Cliente" + "Doméstica" e rodar a rotina, só vai gerar da aba "Doméstica". Além do que não está salvando dentro da pasta que criei "C:/Relatórios"

 
Postado : 26/08/2015 2:39 pm
(@leostamato)
Posts: 0
New Member
Topic starter
 

Se possível, faça o teste na planilha que anexei hj mais cedo (acima). Obrigado pela ajuda!!!!

 
Postado : 26/08/2015 2:44 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Quando postei, havia feito o teste, e a rotina está gerando pdf para cada planilha selecionada.
Quanto a não gravar o erro está na definição do nome/local do arquivo como variavel Endereço, e na exportação/geração PDF utiliza uma variável Nome_Arquivo, assim vai gerar um PDF na tela sem salvar/gravar.
Ocorre tambem que ao utilzar no If o Exit sub, se a primeira planilha não atender o desejado a rotina é interrompida, não gerando as demais.
Experimente utilizar a rotina assim

Private Sub CommandButton1_Click()
Dim i As Integer, Nome_Arquivo As String

'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
        Nome_Arquivo = "C:Relatórios" & ListBox1.List(i) & ".pdf"
        Sheets(ListBox1.List(i)).Select
        If WorksheetFunction.CountA(Cells) = 0 Then
            'Exit Sub
        Else
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nome_Arquivo, Quality _
        :=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
        End If
    End If
Next
End Sub
 
Postado : 27/08/2015 5:58 am
(@leostamato)
Posts: 0
New Member
Topic starter
 

Reinaldo, obrigado pela ajuda. Eu rodei a rotina e agora está gerando PDFs de todas as abas selecionadas no listbox, porém ele gera PDFs separados para cada aba. Será que tem como gerar apenas 1 PDF com todas as abas selecionadas?

 
Postado : 27/08/2015 1:17 pm
(@leostamato)
Posts: 0
New Member
Topic starter
 

Anexei a última versão da planilha teste. abs

 
Postado : 27/08/2015 2:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente

Private Sub CommandButton1_Click()
Dim i As Integer, iArr As Integer
Dim Nome_Arquivo As String
Dim myArray() As Variant
iArr = 0
'Conta os itens do listbox
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        ReDim Preserve myArray(iArr)
        myArray(iArr) = ListBox1.List(i)
        iArr = iArr + 1
    End If
Next
'Nome do Arquivo será primeira planilha selecionada
Nome_Arquivo = "C:Relatórios" & myArray(0) & ".pdf"
Sheets(myArray).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nome_Arquivo, Quality _
        :=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
Sheets(1).Select
End Sub
 
Postado : 31/08/2015 9:04 am
(@leostamato)
Posts: 0
New Member
Topic starter
 

Excelente!!! Valeu Reinaldo, vc é o cara!! abs

 
Postado : 31/08/2015 10:57 am