[[20160623115139]] 『『シート名指定』の 複数ファイル一括印刷』(SUS316L) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『『シート名指定』の 複数ファイル一括印刷』(SUS316L)

 いつもお世話になっています。
 複数ファイルの一括印刷は、過去にMARBINさんが、
 作成された以下のコードを使わせて頂いてますが、
 2つの調整ができず、困窮しています。
 過去ログを検索し続けましたが、相談させてください。

 Sub insatu()
  Dim fol As String
  Dim f As String
  Dim wb As Workbook
  Dim wscnt As Long
  Dim i As Long
   fol = "D:\marbin"
   f = Dir(fol & "\*.xls")
    Do While f <> ""
     Set wb = Workbooks.Open(fol & "\" & f)
     wscnt = wb.Worksheets.Count
      For i = 1 To wscnt
       wb.Worksheets(i).PrintOut
      Next i
     wb.Close
     f = Dir()
    Loop
    Set wb = Nothing
 End Sub

 1 シート名指定
   印刷対象ブックのシート名”1-3) 出力対比表”だけを
   印刷対象にしたいのですが、修正方法が分からず、
   過去ログの他から引用できないか探しましたが、
   見つけられず、おしえていただ

 2 対象ファイルが印刷されない。
   対象のExcelは『Microsoft Excel 97-2003ワークシート』で、
   f = Dir(fol & "\*.xls")の拡張子も確認しましたが、
   印刷されませんでした。
   ※試しに.xlsxのファイルを*.xlsxに変更したら印刷できました。

 印刷対象のファイルが、拡張子で認識できないことが
 理由と考えられますが、どのように修正したらよいか、
 教えてください。
 (そもそもが間違っていればご指摘頂きたく。)

 いつもありがとうございます。よろしくお願い致します。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


 1だけ。

 >     wscnt = wb.Worksheets.Count
 の部分で開いたブックの総シート数を求め

 >     For i = 1 To wscnt
       〜
 >     Next i
 で、その枚数分処理を繰り返し

 >      wb.Worksheets(i).PrintOut
 で、i番目のシートを印刷している。

 なので
 >     wscnt = wb.Worksheets.Count
 >     For i = 1 To wscnt
 >      wb.Worksheets(i).PrintOut
 >     Next i
 を
 >      wb.Worksheets("1-3) 出力対比表").PrintOut
 だと思うが。
(ねむねむ) 2016/06/23(木) 14:35

 ねむねむさん
 ご回答ありがとうございます。取り急ぎ、 
 xlsxファイルで保存して、検証しましたが、
 シート指定できました。
 各行の解説もありがとうございます。
 .xlsの方が解決できてませんが、前進しました。
 ありがとうございます。
(SUS316L) 2016/06/23(木) 14:50

 試行錯誤しておりますが、解決できません。
 f = Dir(fol & "\*.xls")の、””の中の、
 拡張子をファイル名からコピーなどして
 置換してますが、無反応です。

 対象のファイルは、『Microsoft Excel 97-2003ワークシート』
 で、開くとExcel画面の一番上に、ファイル名.xls〔互換モード〕
 と、互換モードであることは関係ないでしょうか。
 念のため、ご連絡致します。
(SUS316L) 2016/06/23(木) 16:00

 念のため確認だがそのXLSブックはD:\marbin配下にきちんとあるのだろうか?
(ねむねむ) 2016/06/23(木) 16:05

 確認指示ありがとうございます。
 1つのフォルダの中のファイルとありましたので、
 xlsブックはまとめていました。

 が、

 マクロ(VBA)を記録したブックも同じフォルダに
 入れていた為、ファイルを開く対象になり、
 弾かれていたようです。

 マクロを記録したブックを別のフォルダに保存して
 実行したら、解決しました。
 お騒がせしてすいません。小職の誤認識でした。
 ファイル名指定の方法、教示ありがとうございました。
(SUS316L) 2016/06/23(木) 16:45

 解決してよかったがこのような記事を見つけた。

 Dir関数では3文字拡張子は前方一致で検索されるそうだ。
 (私のところでもDir関数で「*.XLS」を検索したところ「.XLSX」「.XLSM」も検索された)
 もし、XLSXやXLSMは除外したいと思ったらブックを開く前に拡張子のチェックを行う必要があるようだ。

http://officetanaka.net/excel/vba/tips/tips69.htm

(ねむねむ) 2016/06/23(木) 16:52


 ご返信ありがとうございます。
 対象ファイルの拡張子を確認する様にします。
 (印刷対象だけをフォルダに入れることと、
  xlsだけが判別されるわけではないのですね。)

 今検証して、印刷されたのですが、
 ご返信頂いたので相談させてください。

 1指定以外の「その他のシート」もブックに入っているが、

 2シート名は指定されているので、対象シートだけが
 印刷される。

 3印刷枚数が、その他のシートの数だけ、印刷されます。

 4指定シートだけを、1回だけ印刷するにはどうしたら
 よいでしょうか。

(SUS316L) 2016/06/23(木) 17:04


 もしかして
 >      wb.Worksheets(i).PrintOut
 を
 >      wb.Worksheets("1-3) 出力対比表").PrintOut
 にしただけだろうか?

 私としては
 >>     wscnt = wb.Worksheets.Count
 >>     For i = 1 To wscnt
 >>      wb.Worksheets(i).PrintOut
 >>     Next i
 >を
 >>      wb.Worksheets("1-3) 出力対比表").PrintOut
 >だと思うが。
 で、
 >>     wscnt = wb.Worksheets.Count
 >>     For i = 1 To wscnt
 >>      wb.Worksheets(i).PrintOut
 >>     Next i
 全体を
 >>      wb.Worksheets("1-3) 出力対比表").PrintOut
 に置きかえるつもりで書いたのだが。

 つまり
    Do While f <> ""
     Set wb = Workbooks.Open(fol & "\" & f)
     wb.Worksheets("1-3) 出力対比表").PrintOut
     wb.Close
     f = Dir()
    Loop
 としてくれ。

 説明不足で済まなかった。

(ねむねむ) 2016/06/23(木) 17:11


 なるほど、了解です。各行の解説してもらっていたので、
 なんとなく何をしているかは、分かっているつもりでした。
 修正箇所のナビゲーションとして、4行の後に記載されたと
 思い込んでました。
 全体を入れ替えるのですね。「つまり、」も記載頂いて
 たすかりました。
 毎日、1日50件程度の数のファイルが毎日送信されてきており、
 小職が印刷し、課員が作業に入る、外出する、と、
 印刷時間の短縮が必要でした。
 ご協力ありがとうございました。
(SUS316L) 2016/06/23(木) 17:20

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.