「VBScript」でプログラムを組みました。
従って、「Windows」専用です。
このプログラムでは、「A」フォルダの中にプログラムファイルを放り込んで、ダブルクリックすると、枚数をたずねてきますので、数字を入力すると、その枚数を、プログラムのあるフォルダ内のすべてのエクセルファイルのすべてのシートをプリントアウトします。
(こうしておけば、どのフォルダでも、汎用的に対応できますが、「C:\A」以外、あり得ないのでしたら、後ほど説明します。)
従って、前提条件としては、プリントアウトしたいプリンタを「通常使うプリンタ」に設定しておく必要があります。
以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。
「~」部分は、何でもかまいませんが、「.vbs」は、必ず半角でなければなりません。
Option Explicit
Dim a, b, c, i, j, v, w, x, y, z
Set v = CreateObject("Scripting.FileSystemObject")
Set w = v.GetFolder(".")
Set x = CreateObject("Excel.Application")
c = InputBox("枚数 = ")
For Each a In w.Files
b = LCase(v.GetExtensionName(a.Name))
If b = "xls" or b = "xlsx" Then
Set y = x.Workbooks.Open(w & "\" & a.Name)
For i = 1 to y.Worksheets.Count
Set z = y.Worksheets(i)
For j = 1 to c
z.PrintOut()
Next
Set z = Nothing
Next
y.Close
Set y = Nothing
End If
Next
x.Quit
Set x = Nothing
Set w = Nothing
Set v = Nothing
もし、「C:\A」以外、あり得ないのでしたら、4行目を
Set w = v.GetFolder("C:\A")
としてください。
次に、簡単なプログラムの説明です。
Set v = CreateObject("Scripting.FileSystemObject")
ファイルやフォルダを扱えるようにしています。
Set w = v.GetFolder(".")
プログラムファイルのあるフォルダを取得しています。
Set x = CreateObject("Excel.Application")
エクセルを扱えるようにしています。
c = InputBox("枚数 = ")
枚数をたずねています。
For Each a In w.Files
フォルダ内のすべてのファイルを順次処理します。
b = LCase(v.GetExtensionName(a.Name))
拡張子を取得しています。
If b = "xls" or b = "xlsx" Then
拡張子が「xls」か「xlsx」の場合、
Set y = x.Workbooks.Open(w & "\" & a.Name)
そのファイルを開いています。
For i = 1 to y.Worksheets.Count
シートの数だけ処理します。
Set z = y.Worksheets(i)
シートを設定して今s。
For j = 1 to c
シートの数だけ順番に処理します。
z.PrintOut()
そのシートをプリントしています。
従って、このプログラムでは、同じシートを枚数分プリントしてから、次のシートにいきます。
質問者にとって、このプロントが不適切な場合で、ファイル単位に必要枚数をプリントしたい場合は、
For i = 1 to c
For j = 1 to y.Worksheets.Count
Set z = y.Worksheets(j)
としてください。
これで、ファイル単位になります。
以下は、閉じていたりするだけです。
もし、不明な点がありましたら、お知らせください。
できる限りの対応はさせて頂きます。
お礼
すごいです 汎用性もあってこんな形でもプログラムできるんだと初めて知りました 本当にありがとうございます