CONVERTENDO ARQUIVO DO EXCEL PARA PDF
Tenho uma rotina que gera dados para uma planilha excel, porém o usuário me pediu para gerar em PDF agora, estou querendo salvar o arquivo em excel e depois fazer conversão.
Depois de pesquisar sobre o assunto, a solução mais próxima que encontrei foi a seguinte:
Set cPDFCreator = New clsPDFCreator
Set cPDFCreatorOptions = New clsPDFCreatorOptions
Set cPDFCreator.cOptions = cPDFCreatorOptions
[ô]Am storing default printer to restore it later
strDefaultPrinter = Printer.DeviceName
If cPDFCreator.cStart([Ô]/NoProcessingAtStartup[Ô]) = False Then
MsgBox [Ô]Can[ô]t initialize PDFCreator.[Ô], vbCritical + _
vbOKOnly, [Ô]Error![Ô]
Exit Sub
End If
objEx.ActiveWorkbook.Close False
With cPDFCreator
.cOption([Ô]UseAutosave[Ô]) = 1
.cOption([Ô]UseAutosaveDirectory[Ô]) = 1
.cOption([Ô]AutosaveDirectory[Ô]) = [Ô]D:\[Ô] [ô]ApiWindowsTemp()
.cOption([Ô]AutosaveFilename[Ô]) = [Ô]M[Ô] & strData & [Ô].pdf[Ô]
.cOption([Ô]AutosaveFormat[Ô]) = 0 [ô] 0 = PDF
.cSaveOptions
.cClearCache
.cPrinterStop = False
.cDefaultPrinter = [Ô]PDFCreator[Ô]
.cPrintFile [Ô]M[Ô] & strData & [Ô].XLS[Ô]
End With
Printer.Print
Set cPDFCreator = Nothing
Set cPDFCreatorOptions = Nothing
MsgBox [Ô]PDF ConcluÃdo![Ô], vbInformation
...
Rodei uma vez e funcionou, porém agora não está mais funcionando e não sei porque, está ocorrendo erro na linha
If cPDFCreator.cStart([Ô]/NoProcessingAtStartup[Ô]) = False Then
Está entrando nesse If e saindo da Sub.
Alguém sabe porque?
Depois de pesquisar sobre o assunto, a solução mais próxima que encontrei foi a seguinte:
Set cPDFCreator = New clsPDFCreator
Set cPDFCreatorOptions = New clsPDFCreatorOptions
Set cPDFCreator.cOptions = cPDFCreatorOptions
[ô]Am storing default printer to restore it later
strDefaultPrinter = Printer.DeviceName
If cPDFCreator.cStart([Ô]/NoProcessingAtStartup[Ô]) = False Then
MsgBox [Ô]Can[ô]t initialize PDFCreator.[Ô], vbCritical + _
vbOKOnly, [Ô]Error![Ô]
Exit Sub
End If
objEx.ActiveWorkbook.Close False
With cPDFCreator
.cOption([Ô]UseAutosave[Ô]) = 1
.cOption([Ô]UseAutosaveDirectory[Ô]) = 1
.cOption([Ô]AutosaveDirectory[Ô]) = [Ô]D:\[Ô] [ô]ApiWindowsTemp()
.cOption([Ô]AutosaveFilename[Ô]) = [Ô]M[Ô] & strData & [Ô].pdf[Ô]
.cOption([Ô]AutosaveFormat[Ô]) = 0 [ô] 0 = PDF
.cSaveOptions
.cClearCache
.cPrinterStop = False
.cDefaultPrinter = [Ô]PDFCreator[Ô]
.cPrintFile [Ô]M[Ô] & strData & [Ô].XLS[Ô]
End With
Printer.Print
Set cPDFCreator = Nothing
Set cPDFCreatorOptions = Nothing
MsgBox [Ô]PDF ConcluÃdo![Ô], vbInformation
...
Rodei uma vez e funcionou, porém agora não está mais funcionando e não sei porque, está ocorrendo erro na linha
If cPDFCreator.cStart([Ô]/NoProcessingAtStartup[Ô]) = False Then
Está entrando nesse If e saindo da Sub.
Alguém sabe porque?
Reinicia o computador, rode de novo. Se funcionar, pode ser que algum processo continue rodando em background depois da subrotina ser executada. Aà você tem que observar qual processo que é iniciado quando você executa o código. Feche o processo e tente novamente. Se der certo, tudo que você precisa fazer é matar o processo via código.
Abraços!
Abraços!
Você experimentou dar um dispose no objeto cPDFCreator?
Acredito que ele deve estar em execução, ou o arquivo não foi finalizado.
Acredito que ele deve estar em execução, ou o arquivo não foi finalizado.
Além do que já foi dito, veja o que diz a mensagem de erro. Provavelmente vai entender o porque de estar acontecendo...
Obrigado a todos que tentaram me ajudar, infelizmente com aquele código eu não consegui resolver, mas encontrei esse abaixo
objWS.ExportAsFixedFormat Type:=xlTypePDF, FileName:=strMec, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Com ele, após montar o Excel eu salvo como PDF e depois fecho o Excel, está do jeito que preciso.
objWS.ExportAsFixedFormat Type:=xlTypePDF, FileName:=strMec, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Com ele, após montar o Excel eu salvo como PDF e depois fecho o Excel, está do jeito que preciso.
Faça seu login para responder