locked
Exportar pdf RRS feed

  • Pergunta

  • Bom dia!

    Estou realizando uma macro onde dentro de um loop criei uma condição para que se um campo for verdadeiro me gerar um pdf. utilizei o seguinte código:

    Dim caminho As String
    Dim nome As String
    Sheets("Ordem de Produção").Select
        caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Range("C3").Value & "\Lote " & Range("C4").Value
         nome_arquivo = Range("C7").Value & " " & Range("c5").Value
           On Error Resume Next
             MkDir caminho
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminho & "\" & nome_arquivo & ".pdf"
               Application.ScreenUpdating = True

    Estava sem o suplemento para gerar pdf, porem já o instalei e mesmo assim não consigo gerar, o código roda sem erros mas não gera o pdf. alguém poderia me ajudar?

    quinta-feira, 12 de março de 2015 11:13

Respostas

  • Tente qualificar completamente o nome das planilhas:

    caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Range("C3").Value & "\Lote " & Range("C4").Value
    nome_arquivo = Range("C7").Value & " " & Range("c5").Value
    

    por:

    caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Worksheets("nome_planilha").Range("C3").Value & "\Lote " & Worksheets("nome_planilha").Range("C4").Value
    nome_arquivo = Worksheets("nome_planilha").Range("C7").Value & " " & Worksheets("nome_planilha").Range("c5").Value
    

    Ah, e uma dúvida: o seu código chega a gerar algum PDF por VBA ou até agora você não conseguiu gerar nenhum?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 18 de março de 2015 13:48
    Moderador

Todas as Respostas

  • Ao inserir um código no fórum, utilize blocos de código. Para utilizar essa ferramenta, clique no botão cuja legenda é “Inserir bloco de código” na barra do editor de mensagens do fórum. Uma janela aparecerá onde você deverá colar seu código cru na caixa de texto à esquerda. Então, selecione a opção Vb.Net na caixa de combinação que você verá em cima à esquerda e depois clique no botão Inserir.

    ---

    Sobre sua dúvida, você pode estar tendo um erro no método ExportAsFixedFormat, mas a instrução On Error Resume Next não notifica o erro:

    Sub Main()
        Dim caminho As String
        Dim nome As String
        
        Sheets("Ordem de Produção").Select
        caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Range("C3").Value & "\Lote " & Range("C4").Value
        nome_arquivo = Range("C7").Value & " " & Range("c5").Value
        
        On Error Resume Next
        MkDir caminho
        On Error GoTo 0
        
        MsgBox "O arquivo será salvo em: " & caminho & "\" & nome_arquivo & ".pdf", vbInformation
        
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminho & "\" & nome_arquivo & ".pdf"
        Application.ScreenUpdating = True
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 12 de março de 2015 12:21
    Moderador
  • Felipe, bom dia!


    Obrigado pelas informações!

    Agora esta dando erro, veja o erro que aparece:

    Poderia me ajudar?

    quinta-feira, 12 de março de 2015 12:55
  • O caminho que aparece na caixa de mensagem antes de salvar é válido? 

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 12 de março de 2015 13:13
    Moderador
  • Sim! Esse é o caminho que desejo salvar o arquivo!
    quinta-feira, 12 de março de 2015 13:15
  • Não entendo por que não funciona para você. Pra mim, está funcionando normal.

    Você tem o Excel 2007 com o Service Pack 2 instalado ou o 2010, 2013?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 12 de março de 2015 13:36
    Moderador
  • Felipe, uso aqui o Windows 7 com o Service Pack 1, meu Excel é o 2007, o erro pode estar relacionado a alguma dessas configurações?
    quinta-feira, 12 de março de 2015 13:53
  • Felipe, surgiu uma nova questão!

    Se continuo a executar a macro ela gera os PDFs porem meu loop perde o controle e foge os parâmetros que determinei. Segue código para que você analise:

    Private Sub CommandButton1_Click()
    
    Sheets("plan2").Select
    Range("J11:P80").Select
    Selection.ClearContents
    Sheets("plan2").Select
    Range("j2").Value = ComboBox1.Value
    Sheets("Ordem de Produção").Select
    Range("C6").Value = ComboBox2.Value
    'repetindo operações por material
    
    Sheets("Plan1").Select
    Do Until ActiveCell.Select = ""
    Sheets("Plan1").Select
    ActiveCell.Offset(1, 0).Select
    ActiveCell.Copy
    Sheets("plan2").Select
    Range("o2").PasteSpecial xlPasteValues
    
    Sheets("plan3").Select
    
    Do Until ActiveCell = ""
    Sheets("plan3").Select
    ActiveCell.Offset(1, 0).Select
    ActiveCell.Copy
    Sheets("plan2").Select
    Range("p2").PasteSpecial xlPasteValues
    Range("A1:G2586").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
            ("Plan2!Criteria"), CopyToRange:=Range("Plan2!Extract"), Unique:=False
            
           If Range("J11").Value <> "" Then
           Sheets("Ordem de Produção").Select
           Range("b8").Select
           Sheets("plan2").Select
           Range("l10").Select
           Do Until ActiveCell = ""
           ActiveCell.Offset(1, 0).Select
           ActiveCell.Copy
           Sheets("Ordem de Produção").Select
           ActiveCell.Offset(1, 0).Select
           ActiveCell.PasteSpecial xlPasteValues
           Sheets("plan2").Select
           ActiveCell.Offset(0, 3).Select
           ActiveCell.Copy
           Sheets("Ordem de Produção").Select
           ActiveCell.Offset(0, 1).Select
           ActiveCell.PasteSpecial xlPasteValues
           ActiveCell.Offset(0, -1).Select
           Sheets("plan2").Select
           ActiveCell.Offset(0, -3).Select
           Loop
           
         Sheets("Ordem de Produção").Select
        caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Range("C3").Value & "\Lote " & Range("C4").Value
         nome_arquivo = Range("C7").Value & " " & Range("c5").Value
               
        On Error Resume Next
        MkDir caminho
        On Error GoTo 0
        
        MsgBox "O arquivo será salvo em: " & caminho & "\" & nome_arquivo & ".pdf", vbInformation
        
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminho & "\" & nome_arquivo & ".pdf"
        Application.ScreenUpdating = True
    
                
           Sheets("Ordem de Produção").Select
           Range("b9:c25").Select
           Selection.ClearContents
            End If
            
            
    Loop
    Sheets("plan2").Select
    If Range("P2").Value = "" Then
    Sheets("Plan3").Select
    Range("d1").Select
    End If
    Loop
    
    
    
    End Sub

    Conto com a ajuda!

    quinta-feira, 12 de março de 2015 15:01
  • Eu gostaria de saber o Service Pack do seu Office, e não do Windows.

    A saber: o último SP do Office 2007 é o SP3, e você só consegue gerar PDF com o SP2 ou SP3.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 12 de março de 2015 16:39
    Moderador
  • Felipe bom dia!

    O SP3 esta instalado!

    Esta acontecendo o seguinte erro tenho uma lista de materiais e uma de operações a macro verifica se aquele material passa por aquela operação caso sim deve me gerar um pdf!

    O que esta ocorrendo é que a macro para o primeiro material selecionado não gera o pdf.

    sexta-feira, 13 de março de 2015 11:20
  • "O que esta ocorrendo é que a macro para o primeiro material selecionado não gera o pdf."

    Para os outros materiais, o PDF é gerado normalmente? Poste o código utilizado aqui, pode ser que necessite apenas um ajuste de linha inicial do laço.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 16 de março de 2015 12:10
    Moderador
  • Bom dia Felipe!

    Segue código que estou utilizando:

    Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Sheets("plan2").Select
    Range("J11:P80").Select
    Selection.ClearContents
    Sheets("plan2").Select
    Range("j2").Value = ComboBox1.Value
    Range("P2").Value = ComboBox3.Value
    Sheets("Ordem de Produção").Select
    Range("C6").Value = ComboBox2.Value
    Range("C7").Value = ComboBox3.Value
    Range("C3").Value = ComboBox1.Value
    'repetindo operações por material
    
    Sheets("Plan1").Select
    Do Until ActiveCell.Select = ""
    Sheets("plan2").Select
    Range("J11:P80").Select
    Selection.ClearContents
    Sheets("Plan1").Select
    ActiveCell.Offset(1, 0).Select
    If ActiveCell = "" Then
    Exit Do
    Else
    ActiveCell.Copy
    Sheets("plan2").Select
    Range("o2").PasteSpecial xlPasteValues
    
    Range("A1:G2586").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
            ("Plan2!Criteria"), CopyToRange:=Range("Plan2!Extract"), Unique:=False
           Sheets("Ordem de Produção").Select
           Range("b8").Select
           Sheets("plan2").Select
           Range("l10").Select
       
           Do Until ActiveCell = ""
           ActiveCell.Offset(1, 0).Select
           If ActiveCell <> "" Then
           ActiveCell.Copy
           Sheets("Ordem de Produção").Select
           ActiveCell.Offset(1, 0).Select
           ActiveCell.PasteSpecial xlPasteValues
           Sheets("plan2").Select
           ActiveCell.Offset(0, 3).Select
           ActiveCell.Copy
           Sheets("Ordem de Produção").Select
           ActiveCell.Offset(0, 1).Select
           ActiveCell.PasteSpecial xlPasteValues
           ActiveCell.Offset(0, -1).Select
           Sheets("plan2").Select
           ActiveCell.Offset(0, -3).Select
           End If
           Loop
     End If
    Sheets("Ordem de Produção").Select
    If Range("b9").Value <> "" Then
    
        caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Range("C3").Value & "\Lote " & Range("C4").Value
         nome_arquivo = Range("C7").Value & " " & Range("c5").Value
           On Error Resume Next
             MkDir caminho
           On Error GoTo 0
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminho & "\" & nome_arquivo & ".pdf"
               Application.ScreenUpdating = True
             
            Range("A1:N50").Select
            Selection.PrintOut From:=1, To:=2, Copies:=1, Preview:=False
            End If
                
           Sheets("Ordem de Produção").Select
           Range("b9:c25").Select
           Selection.ClearContents
            
    Loop
    
    
    Sheets("plan4").Select
     ActiveSheet.ShowAllData
    Sheets("plan1").Select
    Range("A2:A200").Select
    Selection.ClearContents
    Sheets("plan2").Select
    Range("J2:P2, J11:P50").Select
    Selection.ClearContents
    Sheets("ordem de produção").Select
    Range("b9:c25").Select
    Selection.ClearContents
    Sheets("plan1").Visible = False
    Sheets("plan2").Visible = False
    Sheets("plan3").Visible = False
    Sheets("plan4").Visible = False
    Application.ScreenUpdating = True
    UserForm1.Hide
    End Sub


    quarta-feira, 18 de março de 2015 10:47
  • Tente qualificar completamente o nome das planilhas:

    caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Range("C3").Value & "\Lote " & Range("C4").Value
    nome_arquivo = Range("C7").Value & " " & Range("c5").Value
    

    por:

    caminho = "G:\ADM FABRICA\PCP\ORDENS DE PRODUÇÂO\" & Worksheets("nome_planilha").Range("C3").Value & "\Lote " & Worksheets("nome_planilha").Range("C4").Value
    nome_arquivo = Worksheets("nome_planilha").Range("C7").Value & " " & Worksheets("nome_planilha").Range("c5").Value
    

    Ah, e uma dúvida: o seu código chega a gerar algum PDF por VBA ou até agora você não conseguiu gerar nenhum?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 18 de março de 2015 13:48
    Moderador
  • Felipe,

    Muito obrigado, com sua correção no código os PDF's estão sendo gerados normalmente!

    Att.

    quarta-feira, 18 de março de 2015 17:04