- 03 Jun 2021 às 19:36
#64946
Bom dia, preciso imprimir os desenhos e ordens de produção de um pedido, de uma única vez.
Os desenhos estão localizados todos na mesma pasta, são arquivos em PDF e são nomeados pelo seu código, o qual existe uma tabela com os códigos que preciso imprimir.
Já o controle é criado a partir de uma consulta de dados em uma base MySQL, onde a macro que imprimi o controle puxa as informações necessárias, joga em uma planilha, ocultando as linhas que sobram, faz o comando de impressão e limpa a planilha para o próximo controle.
Basicamente, o que fiz até o momento e teoricamente está funcionando, é uma macro que faz um loop entre a listagem de códigos, onde primeiramente disparo um código para imprimir o arquivo PDF localizado na pasta dos desenhos, cujo nome seja igual ao código do loop.
Em seguida, chamo a macro que carrega as informações do controle, onde ela faz o processo já mencionado de impressão da planilha e então vai para o próximo código do loop.
O problema: Os PDF são mais pesados, e no código que estou usando, para realizar a impressão , o arquivo PDF é primeiramente carregado e em seguida impresso, fazendo com que o próximo controle seja impresso antes do término do PDF atual, resultando em PDFs e Controles fora de ordem na impressora. O ideal seria PDF/CONTROLE/PDF/CONTROLE....
O ideal MESMO, que seria realmente incrível, seria conseguir realizar a impressão do desenho em PDF e no verso da mesma folha, o controle, porém para isso, creio que a única saída seria criar um PDF do controle (que seria parte de uma planilha) e juntar no mesmo arquivo do desenho, dessa forma resolveria o problema da ordem, além de economizar papel. Porém não encontrei nenhuma solução que não dependa do Adobe Acrobat (Versão paga), a qual não disponibilizamos aqui na empresa.
Mas caso seja possível apenas arrumar a ordem, talvez inserindo algum comando de espera, não sei...
Segue os códigos mencionados:
- Impressão dos arquivos PDF
Public Sub PrintFile(ByVal strPathAndFilename As String)
Call apiShellExecute(Application.hwnd, "print", strPathAndFilename, vbNullString, vbNullString, 0)
End Sub
Sub PRINTER_DESENHO()
PrintFile ("Z:\P.C.P\DESENHOS PDF\" & Planilha6.range("f11").Value & ".pdf") 'IMPRIMI DESENHO
End Sub
- Impressão do controle
Sub PRINTER_CONTROLE()
Planilha6.PrintOut 'IMPRIMI CONTROLE
End Sub
-Macro que realiza a impressão de tudo
Sub imprimi_tudo()
If Planilha1.range("o1").Value > 0 Then
MsgBox "Revise todos os campos antes de efetuar a impressão em massa!"
Exit Sub
End If
If MsgBox("Tem certeza que deseja imprimir todos os desenhos e controles?", vbYesNo) = vbNo Then
Exit Sub
End If
Application.ScreenUpdating = False
Call destrava
For i = 10 To Planilha1.range("e1048576").End(xlUp).Row
Planilha1.Activate
Planilha1.range("e" & i).Select
Planilha6.Activate
Call CARREGA_CONTROLE 'carrega informações do controle com base no codigo do loop
Call PRINTER_CONTROLE
'ADD ALGUM CODIGO DE PAUSA AQUI TALVEZ
Call PRINTER_DESENHO
Next i
Exit Sub
Os desenhos estão localizados todos na mesma pasta, são arquivos em PDF e são nomeados pelo seu código, o qual existe uma tabela com os códigos que preciso imprimir.
Já o controle é criado a partir de uma consulta de dados em uma base MySQL, onde a macro que imprimi o controle puxa as informações necessárias, joga em uma planilha, ocultando as linhas que sobram, faz o comando de impressão e limpa a planilha para o próximo controle.
Basicamente, o que fiz até o momento e teoricamente está funcionando, é uma macro que faz um loop entre a listagem de códigos, onde primeiramente disparo um código para imprimir o arquivo PDF localizado na pasta dos desenhos, cujo nome seja igual ao código do loop.
Em seguida, chamo a macro que carrega as informações do controle, onde ela faz o processo já mencionado de impressão da planilha e então vai para o próximo código do loop.
O problema: Os PDF são mais pesados, e no código que estou usando, para realizar a impressão , o arquivo PDF é primeiramente carregado e em seguida impresso, fazendo com que o próximo controle seja impresso antes do término do PDF atual, resultando em PDFs e Controles fora de ordem na impressora. O ideal seria PDF/CONTROLE/PDF/CONTROLE....
O ideal MESMO, que seria realmente incrível, seria conseguir realizar a impressão do desenho em PDF e no verso da mesma folha, o controle, porém para isso, creio que a única saída seria criar um PDF do controle (que seria parte de uma planilha) e juntar no mesmo arquivo do desenho, dessa forma resolveria o problema da ordem, além de economizar papel. Porém não encontrei nenhuma solução que não dependa do Adobe Acrobat (Versão paga), a qual não disponibilizamos aqui na empresa.
Mas caso seja possível apenas arrumar a ordem, talvez inserindo algum comando de espera, não sei...
Segue os códigos mencionados:
- Impressão dos arquivos PDF
Public Sub PrintFile(ByVal strPathAndFilename As String)
Call apiShellExecute(Application.hwnd, "print", strPathAndFilename, vbNullString, vbNullString, 0)
End Sub
Sub PRINTER_DESENHO()
PrintFile ("Z:\P.C.P\DESENHOS PDF\" & Planilha6.range("f11").Value & ".pdf") 'IMPRIMI DESENHO
End Sub
- Impressão do controle
Sub PRINTER_CONTROLE()
Planilha6.PrintOut 'IMPRIMI CONTROLE
End Sub
-Macro que realiza a impressão de tudo
Sub imprimi_tudo()
If Planilha1.range("o1").Value > 0 Then
MsgBox "Revise todos os campos antes de efetuar a impressão em massa!"
Exit Sub
End If
If MsgBox("Tem certeza que deseja imprimir todos os desenhos e controles?", vbYesNo) = vbNo Then
Exit Sub
End If
Application.ScreenUpdating = False
Call destrava
For i = 10 To Planilha1.range("e1048576").End(xlUp).Row
Planilha1.Activate
Planilha1.range("e" & i).Select
Planilha6.Activate
Call CARREGA_CONTROLE 'carrega informações do controle com base no codigo do loop
Call PRINTER_CONTROLE
'ADD ALGUM CODIGO DE PAUSA AQUI TALVEZ
Call PRINTER_DESENHO
Next i
Exit Sub