1

ファイルの印刷は、列 A のセル値から単一のネットワーク プリンター (NE03:) に行われます。今度は、列 B から別の接続されたプリンター (NE05:) にファイルを並行して印刷したいと考えています。

Excel ファイル形式:

列「A」-------------列「B」
C:\test\gear.pdf-------C:\invoice\chan.pdf
C:\test\court.pdf------C:\tyo\dated.pdf
...

コードを変更して、列 A からプリンター HP LaserJet Professional M1213nf MFP に、列 B からプリンター HP LaserJet P1106 に 1 つずつ、2 つのプリンターで連続して印刷できるようにするのに役立つものがあります。

    Sub PrintPDFFiles() 
    zProg = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe" 
    zLastRow = [a65536].End(xlUp).Row 
    temp = "a1:a" & zLastRow 
    zPrinter = "HP LaserJet Professional M1213nf MFP " 
    For Each cell In Range(temp) 
    zFile = cell.Value 
    If zFile Like "*.pdf" Then 
    Shell """" & zProg & """/n /t """ & zFile & """" 
    End If 
    Next 
    End Sub
4

1 に答える 1

1

Excel 2003 を使用していると思います。 のような値をハード コードしないでください65536。行があるため、xl2007+ では望ましくない結果が得られる可能性があり1048576ます。

これはあなたがしようとしていることですか?(未テスト)

Option Explicit
'~~> Printer names
Const Prin1 As String = "HP LaserJet Professional M1213nf MFP"
Const Prin2 As String = "HP LaserJet P1106"
Const AcroPath As String = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Private Declare Function SetDefaultPrinter Lib "winspool.drv" _
Alias "SetDefaultPrinterA" (ByVal pszPrinter As String) As Long

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, i  As Long
    Dim prt As String

    '~~> Get current default printer
    prt = Application.ActivePrinter

    '~~> Set this to the relevant sheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        '~~> Get last row of col A
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Set default printer
        SetDefaultPrinter Prin1

        '~~> Print from Col A first
        For i = 1 To lRow
            Shell """" & AcroPath & """/n /t """ & .Range("A" & i).Value & """"
            DoEvents
        Next i

        '~~> Get last row of col B
        lRow = .Range("B" & .Rows.Count).End(xlUp).Row

        '~~> Set default printer
        SetDefaultPrinter Prin2

        '~~> Print from Col B Next
        For i = 1 To lRow
            Shell """" & AcroPath & """/n /t """ & .Range("B" & i).Value & """"
            DoEvents
        Next i
    End With

    SetDefaultPrinter prt
End Sub
于 2013-10-15T18:33:41.323 に答える