none
Imprimir arquivos no diretorio RRS feed

  • Pergunta

  • Olá! Existe algum código para "buscar" o arquivo dentro do diretório e realizar a impressão do mesmo? Neste caso, a quantidade a ser impressa será variável. Segue modelo abaixo:

    Produto // Qtde Fichas a serem impressas // Caminho+Documento do doc a ser impresso
    ProdutoA // 5 // C:\Users\Fulano\Desktop\Fichas\ProdutoA.pdf
    ProdutoB // 3 // C:\Users\Fulano\Desktop\Fichas\ProdutoB.pdf
    ProdutoC // 4 // C:\Users\Fulano\Desktop\Fichas\ProdutoC.pdf
    ProdutoD // 4 // C:\Users\Fulano\Desktop\Fichas\ProdutoD.pdf

    De modo que todos os arquivos sejam impressos em suas respectivas quantidades.

    Obrigado!

    Douglas Oliveira

    quarta-feira, 25 de abril de 2018 17:46

Todas as Respostas

  • Douglas Oliveira,

        Por favor, veja os artigos abaixo:

    ==================================================

    VBA – LISTAR ARQUIVOS DE UM DIRETÓRIO

    https://www.tomasvasquez.com.br/blog/microsoft-office/vba-listar-arquivos-de-um-diretorio

    ==================================================

    Listar arquivos de um diretório via VBA

    https://fabiovianna.com.br/listar-arquivos-de-um-diretorio-via-vba/

    ==================================================

    Como listar todos os arquivos de uma pasta com o Excel

    https://www.aprenderexcel.com.br/2016/vba/como-listar-todos-os-arquivos-de-uma-pasta-no-excel

    ==================================================

    Como verificar se um arquivo ou pasta existe com VBA

    http://douglasgodoy.com.br/como-verificar-se-um-arquivo-ou-pasta-existe-com-vba/

    ==================================================

    Visual Basic - Operações com arquivos e diretórios

    http://www.macoratti.net/file_vb.htm

    ==================================================

    Usando o FileSystemObject - FSO - Tratando arquivos e diretórios.

    http://www.macoratti.net/filesyst.htm

    ==================================================

    Visual Basic 6 - Precisa localizar um arquivo  ? Que tal uma função em VB para fazer o serviço? 

    http://www.macoratti.net/d110801.htm

    ==================================================


    []'s,
    Fabio I.
    • Editado Fabio I quinta-feira, 26 de abril de 2018 12:15
    quinta-feira, 26 de abril de 2018 12:15
  • Obrigado pela resposta, Fabio I!

    O problema não está em listar os arquivos do diretório, esse ponto está "tranquilo". Gostaria de imprimir esses arquivos (todos são pdf), conforme comando no Excel. Por exemplo, gostaria que o arquivo "ProdutoA.pdf" seja impresso em "X" vias, essa quantidade de vias estará parametrizada na planilha. É o seguinte: na "Coluna A" vai estar o diretório do arquivo a ser impresso (até aqui OK), e na "Coluna B" vai ter a quantidade de cópias a serem enviadas para a impressora. O probleminha é que gostaria de realizar essa tratativa para mais de um arquivo simultaneamente, ou seja, imprimindo o arquivo "ProdutoA.pdf" em "X" vias, o "ProdutoB.pdf" em "X" vias, etc.
    quinta-feira, 26 de abril de 2018 17:55
  • Considerando que o diretorio dos arquivos estão na coluna A e os dados começam a partir da linha 2 e na coluna B estão a quantidades de cópias a serem impressas, segue uma possibilidade. 

    Ah, considerando também que esteja utilizando o Adobe Reader para abrir os Pdf(s)  

    Option Explicit

    #If VBA7 Then
        Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, _
        ByVal lpFile As String, ByVal lpParameters As String, _
        ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    #Else
        Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, _
        ByVal lpFile As String, ByVal lpParameters As String, _
        ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    #End If


    Private Function PrintThisDoc(formname As Long, FileName As String)
        On Error Resume Next
        Dim X As Long
        X = ShellExecute(formname, "Print", FileName, 0&, 0&, 0&)
        
    End Function

    Private Sub ClosePDF()
        Dim strTerminateThis As String
        Dim objWMIcimv2 As Object
        Dim objProcess As Object
        Dim objList As Object
        Dim intError As Integer
        
        strTerminateThis = "AcroRd32.exe"
        
        Set objWMIcimv2 = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
        
        Set objList = objWMIcimv2.ExecQuery("select * from win32_process where name='" & strTerminateThis & "'")
        
        On Error Resume Next
        For Each objProcess In objList
            intError = objProcess.Terminate
        Next
        On Error GoTo 0
        
        Set objWMIcimv2 = Nothing
        Set objList = Nothing
        Set objProcess = Nothing
        
    End Sub

    Sub Imprime_PDF_Arq()
        Dim printP As String
        Dim strDirFile As String
        Dim strCop As Single
        Dim i As Long
        Dim j As Long
        
        With ActiveSheet
            
            For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
                strDirFile = .Cells(i, 1).Value
                strCop = .Cells(i, 2).Value
                
                For j = 1 To strCop
                    printP = PrintThisDoc(0, strDirFile)
                    Application.Wait (VBA.Now + VBA.TimeSerial(0, 0, 10))
                    Call ClosePDF
                Next j
                
            Next i
            
        End With
        
    End Sub

    Coloque o código acima em um modulo padrão.


    Click em propor como resposta se foi util a voce. ricardodm@outlook.com.br


    • Editado Ricardo Vba quinta-feira, 26 de abril de 2018 20:08
    • Sugerido como Resposta Fabio I sexta-feira, 27 de abril de 2018 11:40
    quinta-feira, 26 de abril de 2018 20:05
  • Obrigado pela resposta, Ricardo Vba!

    A empresa não utiliza a aplicação Adobe Reader, os arquivos são abertos diretamente no Chrome. É possível adaptar o código acima para essa situação?

    Abraços,

    Douglas Oliveira

    sexta-feira, 27 de abril de 2018 12:01