2016-06-23 11 views
0

は、外部ファイルを開くことなくこのVBA 1行コマンドを出力することができます。ループ中にVBAを印刷しても外部ファイルが出力されない

CreateObject("Shell.Application").Namespace(0).ParseName("F:\testprint.pdf").InvokeVerb ("Print") 

完璧に機能します!さて、私はループに挿入して一連のファイルを特定の順序で印刷しようとしましたが、最初のものを印刷して停止します。エラーは表示されませんが、マクロはしばらく停止しているようです。

マイコード:

Sub PrintFile() 

    For r = 1 To 3 

     FileToPrint = Sheet7.Cells(1 + r, 5).Value 

     If FileToPrint = "" Then 
      GoTo MainLoop 
     Else 
      Debug.Print r; " - "; FileToPrint 
      CreateObject("Shell.Application").Namespace(0).ParseName(FileToPrint).InvokeVerb ("Print") 
      Debug.Print r; " --- "; FileToPrint 
     End If 
     MainLoop: 
    Next r 

End Sub 

任意の提案、アイデア?

ありがとう

+0

forループの外側にオブジェクトを一度宣言して再利用できますか? – Jules

答えて

0

別の印刷ジョブを開始する前に、最初の印刷ジョブを完了する必要があります。

#If VBA7 Then 
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems 
#Else 
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems 
#End If 

Sub PrintFile() 
    Dim objShell, WshShell 
    Set objShell = CreateObject("Shell.Application") 


    For r = 1 To 3 

     FileToPrint = Sheet7.Cells(1 + r, 5).Value 

     If FileToPrint = "" Then 
      GoTo MainLoop 
     Else 
      Debug.Print r; " - "; FileToPrint 
      objShell.Namespace(0).ParseName(FileToPrint).InvokeVerb ("Print") 
      Sleep 300 
      Debug.Print r; " --- "; FileToPrint 
     End If 
MainLoop: 
    Next r 

End Sub 
+0

「for」の各ラウンドを遅らせて順番に印刷しないという私の問題を解決してくれてありがとう@thomas。私のマクロ全体の問題は、ファイルの1つが.xlsm形式であるため、別の方法で処理して解決したようです。 – Diego

関連する問題