2013-10-15 40 views
1

文件的打印是从塔A的单元值,以一个单一的网络打印机(NE03 :),现在我想文件并行地从列B打印到另一个连接的打印机(NE05 :)印刷文件的外部文件

Excel文件格式:

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

一定会帮我修改的代码,所以我可以在2台打印机连续一个从列的打印打印机的HP LaserJet 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 

回答

1

我相信你使用Excel 2003.你不应该硬编码像65536这样的值。因为他们有1048576行,您可以在xl2007 +中获得不想要的结果。

这是你正在尝试? (UNTESTED

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 
+0

由于溃败,我测试它的工作,仍然需要一个小的变化时,它就把将输出列“A” competely&然后转移到列“B”,而不是这是它能够每行之后交替移动。然后开始校样A2,然后校准B2下一个校准A3,B3,这样可以节省时间连续/并行打印,因为我有很多打印。 – user2876879

+0

它工作?大声笑! kool :)是的,这是可能的你在问什么,但它会减慢你的代码。因为你将会改变循环中的打印机。你确定要这么做吗? –

+0

是的,如果可能的话,我会试一试。 – user2876879