Notifications
Clear all

Salvar planilha "X" em PDF

13 Posts
3 Usuários
0 Reactions
2,727 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Faaaaaaaaalaaaa galera esperta do planilhando. Andei utilizando o pai dos burros (google) e até mesmo a base de dados do site para meu problema e não encontrei nada. Preciso de um código que salve determinada planilha em PDF, acontece que a planilha não abre (apenas abre o formulário) e neste formulário vou colocar um botão para salvar em PDF, porém, os códigos que achei não fazem referência a salvar uma determinada planilha, ou seja, no código que quero, preciso que seja informada a planilha a ser salva, além de informar a data e nome do arquivo e que eu possa informar (no código) o caminho que será salvo. Deve ter uma mensagem informando: "O arquivo foi salvo em D:Meus Documentos" por exemplo.

Complicado?

Resumindo: clico no botão gerar PDF e ele salva a planilha com o nome: "Meus Pedidos - 15/05/12.pdf".
msgbox: O arquivo foi salvo em D:Meus Documentos

 
Postado : 14/09/2012 1:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

DE uma vista de olhos em

viewtopic.php?f=16&t=5464&p=28526&hilit=pdf#p28526

viewtopic.php?f=16&t=5574&p=29063&hilit=pdf#p29063

Faz o que quer com pouca modificação

 
Postado : 14/09/2012 1:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Achei muito interessante à segunda opção sugerida pelo Reinaldo, fiz pequenas mudança. Quero utilizar esta opção, porém, o código não me dá opção de determinar um local para salvar o arquivo. Alguém poderia adaptá-lo por favor.

Sub Gera_PDF()

Dim SvInput As String
Dim Data As String
Dim var_MENSAGEM
Dim Nome As String

Nome = "Meu teste" ' Aqui coloque o que que quiser dar ao seu arquivo
Data = VBA.Format(VBA.Date, "dd-mm-yyyy") ' Aqui é informada a data de salvamento
SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & " - Até " & Data & ".pdf"

MsgBox "Seu arquivo foi salvo com sucesso." & Chr(13) & _
"" & Chr(13) & _
"Local de salvamento: ", vbInformation, "Confirmação"

Sheets(Array("teste")).Select ' Aqui é definido o nome das planilhas que deseja salvar
For Each sh In ActiveWindow.SelectedSheets
With sh
.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=SvInput, _
OpenAfterPublish:=False 'Use ''False'' para não abrir o arquivo após salvá-lo. Para abrir, use ''True''
End With
Exit For
Next
End Sub

 
Postado : 14/09/2012 2:59 pm
(@celsoyano)
Posts: 75
Estimable Member
 

altere a linha
SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & " - Até " & Data & ".pdf"
para:
SvInput = "xxxxxxxx" & Nome & " - Até " & Data & ".pdf"

Troque xxxxxxxx pelo local onde você deseja salvar, mantendo ""

 
Postado : 14/09/2012 3:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

celsoyano, boa noite.

Interessante sua resposta, porém, tem um pequeno detalhe: Se a pasta não estiver criada, o código retorna um erro, dessa forma eu teria que criar a pasta primeiro, quando na verdade, ela deveria ser criada automaticamente. Será que consegue resolver isso? De qualquer forma, obrigado pela atenção.

 
Postado : 14/09/2012 3:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

ahhh... um outro detalhe, quando ela salva, o arquivo existente é substituido, quero manter os 2 arquivos, sem que sejam substituídos, é pq vou analisar a evolução da planilha e, se substituir, não tem como eu fazer essa análise.

 
Postado : 14/09/2012 3:41 pm
(@celsoyano)
Posts: 75
Estimable Member
 

Farofa 9781, boa noite.
Tenta o código abaixo ... ele vai ferificar se existe o diretorio, se não existir ele vair criar, e também não vai mais ficar gravando por cima, toda vez que voce executar a macro ele vai gerar um arquivo diferente. Adapte os nomes das planilhas a serem salvas e o diretorio que deseja salvar. Espero ter ajudado.

Sub Gera_PDF()

Dim SvInput As String
Dim Data As String
Dim var_MENSAGEM
Dim nome As String

nome = "Meu teste" ' Aqui coloque o que que quiser dar ao seu arquivo
Data = VBA.Format(VBA.Date, "dd-mm-yyyy") ' Aqui é informada a data de salvamento
Hora = VBA.Format(VBA.Time, "hh.mm.ssss")

MyPath = "D:Teste"
    If (Dir(MyPath, vbDirectory) = "") Then
    MsgBox "Diretório - " & MyPath & " - Não encontrado"
    MkDir (MyPath)
    MsgBox "O diretório   " & MyPath & "   foi criado com sucesso.", vbInformation
    End If
 
SvInput = MyPath & Application.PathSeparator & nome & " - Até " & Data & " - " & Hora & ".pdf"

MsgBox "Seu arquivo PDF foi gerado com sucesso." & Chr(13) & "" & Chr(13) & _
"Local de salvamento:     " & MyPath, vbInformation

Sheets(Array("PLAN1")).Select ' Aqui é definido o nome das planilhas que deseja salvar
For Each sh In ActiveWindow.SelectedSheets
With sh
.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=SvInput, _
OpenAfterPublish:=False
End With
Exit For
Next
End Sub
 
Postado : 14/09/2012 4:53 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

celsoyano?

alterei o código da maneira que me convia. Só não consegui alterar um detalhezinho. A linha abaixo precisa ser alterada.

If MsgBox("O diretório " & "''" & MyPath & "''" & " não foi encontrado. Deseja criá-lo agora?", vbQuestion + vbYesNo, "Criação do diretório") = vbYes Then

quando sou indagado se desejo criar o diretório, quando eu clico em "NÃO" ele é criado do mesmo jeito. Acho que é um pequeno detalhe. Depois, quero ver como quebro a linha, pois, quero passar a parte " Deseja criá-lo agora?" para a linha de baixo

 
Postado : 14/09/2012 5:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

a paradinha de passar parte do texto para baixo eu consegui, é pq estava inserindo o chr(13) no lugar errado. Agora falta corrigir o problema de clicar no não e salvar do mesmo jeito.

 
Postado : 14/09/2012 5:58 pm
(@celsoyano)
Posts: 75
Estimable Member
 

Posta o codigo por completo pra mim ver onde vc alterou!!

 
Postado : 14/09/2012 6:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 
Sub Gerar_PDF()
Dim SvInput As String
Dim Data As String
Dim var_MENSAGEM
Dim nome As String

nome = "Cadastros" ' Aqui coloque o que que quiser dar ao seu arquivo
Data = VBA.Format(VBA.Date, "dd-mm-yyyy") ' Aqui é informada a data de salvamento
hora = VBA.Format(VBA.Time, "hh.mm.ss") ' Aqui é informada a hora de salvamento

MyPath = "D:Cadastros"
    If (Dir(MyPath, vbDirectory) = "") Then
    If MsgBox("O diretório " & "''" & MyPath & "''" & " não foi encontrado." & Chr(13) & "Deseja criá-lo agora?", vbQuestion + vbYesNo, "Criação do diretório") = vbYes Then
    End If
    MkDir (MyPath)
    MsgBox "O diretório " & "''" & MyPath & "''" & " foi criado com sucesso.", vbInformation, "Criação do diretório"
    End If
 
SvInput = MyPath & Application.PathSeparator & nome & " - Cadastrados até " & Data & " às " & hora & ".pdf"

MsgBox "Seus arquivos cadastrados até " & Data & " às " & hora & Chr(13) & "foram salvos com sucesso." & Chr(13) & _
" " & Chr(13) & _
"Local de salvamento: " & MyPath, vbInformation, "Confirmação"

Sheets(Array("Cadastros")).Select ' Aqui é definido o nome das planilhas que deseja salvar
For Each sh In ActiveWindow.SelectedSheets
With sh
.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=SvInput, _
OpenAfterPublish:=False
End With
Exit For
Next
End Sub
 
Postado : 14/09/2012 6:19 pm
(@charlie-81)
Posts: 290
Reputable Member
 

Farofa9781?

Faça uma pequena alteração no código:

Troque:

If MsgBox("O diretório " & "''" & MyPath & "''" & " não foi encontrado." & Chr(13) & "Deseja criá-lo agora?", vbQuestion + vbYesNo, "Criação do diretório") = vbYes Then
    End If

Por:

Charlie81 = MsgBox("O diretório " & "''" & MyPath & "''" & " não foi encontrado." & Chr(13) & "Deseja criá-lo agora?", vbQuestion + vbYesNo, "Criação do diretório")
    If Charlie81 = 6 Then
    ElseIf Charlie81 = 7 Then
    Exit Sub
    End If
 
Postado : 14/09/2012 10:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ou tambem

If MsgBox("O diretório " & "''" & MyPath & "''" & " não foi encontrado." & Chr(13) & "Deseja criá-lo agora?", vbQuestion + vbYesNo, "Criação do diretório") = vbYes Then
Else
exit sub   
End If
 
Postado : 15/09/2012 6:31 am