|
「リスト」というシートに、開きたいエクセルファイル名を縦一列に書き、それぞれファイル名の横に、印刷したいシート名を書いたマトリックス状のリストを作ります。
これを読み取って、必要ファイルの必要シートをドキュワークス印刷(つまりはパソコン上の仮想印刷)するマクロを作りました。
ところが、これがうまく動きません。
一応全部印刷されるのですが、リストの順番どおりに出ず、最後の方のシートが先に出てきたりします。
ちなみに、紙出力する普通のプリンターだと指定順序どおり、正しく動きます。
また、リスト中にMsgboxを入れて、ブレークポイント?を作ると、うまく動くよおうです(下のリストはそうなっています)。これをコメント化して完全自動にすると(それが目的です)、ドキュ印刷のシートの順序が狂います。
これはどう改善すればいいでしょうか?あるいは、ドキュワークスでの設定の問題でしょうか?
何かのヒントでも頂ければありがたいです。
Sub 印刷()
Dim MaxRow As Integer 'その列でデータの入っている最終行(上から切れるところまで)
Dim MaxCol As Integer 'その行でデータの入っている最終列(左から切れるところまで)
Dim PrintBook As Workbook
Dim Sheet_Name As String
ThisWorkbook.Sheets("リスト").Select
'ファイルが何個あるか=ファイル名が何行目まで書いてあるか
MaxRow = ThisWorkbook.Sheets("リスト").Cells(1, 3).End(xlDown).Row
'マクロ進行状況の途中確認
MsgBox "ファイルは全部で" & MaxRow - 1 & "個です"
For i = 1 To MaxRow - 1 'ひとつのファイルごとの操作
ThisWorkbook.Activate
'マクロ進行状況の途中確認
MsgBox "今から" & i & "/" & "MaxRow - 1" & "個目のファイル" & Cells(i + 1, 1).Value & "を開きます"
Workbooks.Open Cells(i + 1, 1)
'印刷対象のファイルと、マクロファイル=ThisWorkbookとを行ったり来たり出来るように、印刷対象ファイルを変数に格納する
Set PrintBook = ActiveWorkbook
'シートが何個あるか=シート名が何列目まで書いてあるか
MaxCol = ThisWorkbook.Sheets("リスト").Cells(i + 1, 1).End(xlToRight).Column
For j = 1 To MaxCol - 3 'ひとつのファイルの中のシート枚数分の操作
Sheet_Name = ThisWorkbook.Sheets("リスト").Cells(i + 1, j + 3).Value
'マクロ進行状況の途中確認
MsgBox "今から「" & ThisWorkbook.Sheets("リスト").Cells(i + 1, 3).Value & "」の" & j & "枚め「" & Sheet_Name & "」を印刷します"
PrintBook.Activate
Sheets(Sheet_Name).Activate
'ドキュワークスで印刷
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"DocuWorks Printer on Ne54:"
Next j
ActiveWorkbook.Close (False)
Next i
MsgBox "印刷終了"
End Sub
|
|