VBSでEXCELの両面印刷を可能にする方法 【完結編】

2021年7月1日

このお花なんだと思います? 答えは一番最後に書いておきます。

秘技:VBSでEXCEL両面設定する 前回内容

たどり着いた実現可能な方法 (概略)

  1. 両面設定したEXCELのテンプレートファイルを用意する。
  2. VBSでテンプレートファイルを開く
  3. 印刷対象のEXCELファイルを開いて、テンプレートファイルに貼り付ける
  4. 印刷対象のEXCELファイルの改ページ位置、印刷倍率をテンプレートファイルに設定する
  5. 印刷する

前回と今回の違い - 改ページ位置の設定

1~5の基本部分に違いはないです。

前回:

改ページ位置、倍率が変わると、正しく印字できない場合があった。というか、私の作業で印字するものが、固定フォーマットで、なおかつ、改ページ位置、倍率が大きく変わる物がなかったので、細かい所まで調整していませんでした。

今回

任意の改ページ位置、倍率で印字可能になりました。基本部分での違いはないのですが、コードの細かい所を見直ししました。

コードの違いと疑問

改ページ位置の指定を以下にしました。
 prt_sheet.HPageBreaks(1).Location = prt_sheet.Range(w_pb1)  ・・・ 右辺はRangeです。

ただ、この改ページ位置の指定は、事前に改ページプレビュー設定にしておく必要があります


 xl1.ActiveWindow.View = 2 ’2: xlPageBreakPreview の行です。

改ページ位置の指定は、色々試作しましたが、中々うまく設定できるものが見つからず、今回の方法にたどり着いています。他の方法でなぜうまくいかなかったのか疑問が残りますが、実用環境ではうまく動いているので原因を追うのは止めました。。

前回と今回の違い - 拡大・縮小、改ページの設定順

手っ取り早く、今回分かった結論だけ触れておきます。

  1. 拡大縮小設定がなければ(=元のファイルの拡大縮小設定がfalse)、印刷用のテンプレートの拡大縮小は変更しない。
    falseも設定しない。変更してもちゃんと印刷される設定を追求しませんでした。
  2. 拡大縮小設定があれば、テンプレートシートに反映させる。
  3. 改ページ位置を設定する。
  4. マージンを設定する。・・これ、最初落としてました。

VBSでEXCELの両面印刷を可能にする方法 ソースコード

VBSのコードです。ご参考にどうぞ。動作確認例が少ないので、うまく動作しない場合もあると思いますが、こちらのコードを参考に頑張って下さい。
前提
2ページ限定です。改ページ位置を1ヶ所しか操作していませんので、3ページ以上の場合は、カスタマイズしてください。
あまりしっかりしたコードではありません。ご自身の作業の効率化などで使うものとお考え下さい。

PRINTOUTフォルダに印刷したいEXCELファイルをコピーして、VBSスクリプトを実行してください。フォルダ内のxls、xlsxファイルの特定のシートを印字できます。サンプルのソースコードはworksheets(1)が印字対象です。

Set f_obj = CreateObject("Scripting.FileSystemObject")
Set t_folder = f_obj.GetFolder(".\PRINTOUT")
Set c_foldert = f_obj.GetFolder(".")
Set xl1 = CreateObject("Excel.Application")
xl1.Application.DisplayAlerts = False
xl1.Visible = True
Set template_book = xl1.Workbooks.Open(c_foldert & "\" & "PrintSheet.xlsx")	' テンプレートファイルを開く
Set template_sheet = template_book.Worksheets(1)					' 実コードは固定のシート名で指定
prt_sheet.Select
For Each a In t_folder.Files
	ext = LCase(f_obj.GetExtensionName(a.Name))
	
	If ext = "xls" or ext = "xlsx"  Then
		Set book1 = xl1.Workbooks.Open(t_folder & "\" & a.Name)
		xl1.Worksheets(1).Activate						' 実コードは固定のシート名で指定
		
		w_pb1 = xl1.ActiveSheet.HPageBreaks(1).Location.Address			' 最初の改ページ位置を保存
		w_zoom = xl1.ActiveSheet.PageSetup.Zoom					' 印刷倍率を保存
		l_margin = xl1.ActiveSheet.PageSetu.LeftMargin				' マージン保存
		r_margin = xl1.ActiveSheet.PageSetu.RightMargin
		t_margin = xl1.ActiveSheet.PageSetu.TopMargin
		b_margin = xl1.ActiveSheet.PageSetu.BottomMargin
		h_margin = xl1.ActiveSheet.PageSetu.HeaderMargin
		f_margin = xl1.ActiveSheet.PageSetu.FooterMargin 


		w_printarea = xl1.ActiveSheet.PageSetup.PrintArea

		xl1.Cells.copy								' 元シートコピー
		template_book Activate							’ シート切替え
		xl1.Cells.PasteSpecial(-4104)						' 全貼りつけ
		xl1.Cells.copy								' 貼付け後に再度コピー 
		xl1.Cells.PasteSpecial(-4163)						' 値貼りつけ(式から値に変換)
		xl1.ActiveWindow.View = 2						' xlPageBreakPreview
											' ※の改ページ設定で必要
		With template_sheet .PageSetup
			.BlackAndWhite = True						' 白黒2値印字
			.PrintArea = w_printarea					' 印字範囲を反映
		End With
		if w_zoom <> false Then							' falseでないときだけ印刷倍率設定
			template_sheet .PageSetup.zoom = w_zoom				' 
		End if
		template_sheet.HPageBreaks(1).Delete					' 改ページ位置クリア 不要かも
		Set template_sheet.HPageBreaks(1).Location = prt_sheet.Range(w_pb1)	' 改ページ位置設定

		template_sheet.PageSetup.LeftMargin = l_margin				' マージン設定
		template_sheet.PageSetup.RightMargin = r_margin
		template_sheet.PageSetup.TopMargin = t_margin
		template_sheet.PageSetup.BottomMargin = b_margin
		template_sheet.PageSetup.HeaderMargin = h_margin
		template_sheet.PageSetup.FooterMargin = f_margin

		template_sheet.PrintOut ,,1
		book1.Close


	End If
Next
template_book.Close
Set book1 = Nothing
Set template_Sheet = Nothing 
Set template_book = Nothing
xl1.Quit
Set xl1 = Nothing

トップ画像の花の答え

春菊です。普段目にすることがなかったのですが、結構かわいいお花が咲くんですね。

教えてあげてもいいけど

LevUP

Posted by ozxys