1

文件的打印是从 A 列的单元格值到单个网络打印机 (NE03:),现在我想将文件从 B 列并行打印到另一台连接的打印机 (NE05:)

Excel 文件格式:

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

一些人会帮助我修改代码,以便我可以在 2 台打印机上连续打印,其中一台从 A 列打印到打印机 HP LaserJet Professional M1213nf MFP,从 B 列打印到打印机 HP LaserJet P1106。

    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 回答