VBSでEXCELの両面印刷を可能にする方法 【完結編】
このお花なんだと思います? 答えは一番最後に書いておきます。
秘技:VBSでEXCEL両面設定する 前回内容
たどり着いた実現可能な方法 (概略)
- 両面設定したEXCELのテンプレートファイルを用意する。
- VBSでテンプレートファイルを開く
- 印刷対象のEXCELファイルを開いて、テンプレートファイルに貼り付ける
- 印刷対象のEXCELファイルの改ページ位置、印刷倍率をテンプレートファイルに設定する
- 印刷する
前回と今回の違い - 改ページ位置の設定
1~5の基本部分に違いはないです。
前回:
改ページ位置、倍率が変わると、正しく印字できない場合があった。というか、私の作業で印字するものが、固定フォーマットで、なおかつ、改ページ位置、倍率が大きく変わる物がなかったので、細かい所まで調整していませんでした。
今回
任意の改ページ位置、倍率で印字可能になりました。基本部分での違いはないのですが、コードの細かい所を見直ししました。
コードの違いと疑問
改ページ位置の指定を以下にしました。
prt_sheet.HPageBreaks(1).Location = prt_sheet.Range(w_pb1) ・・・ 右辺はRangeです。
ただ、この改ページ位置の指定は、事前に改ページプレビュー設定にしておく必要があります
xl1.ActiveWindow.View = 2 ’2: xlPageBreakPreview の行です。
改ページ位置の指定は、色々試作しましたが、中々うまく設定できるものが見つからず、今回の方法にたどり着いています。他の方法でなぜうまくいかなかったのか疑問が残りますが、実用環境ではうまく動いているので原因を追うのは止めました。。
前回と今回の違い - 拡大・縮小、改ページの設定順
手っ取り早く、今回分かった結論だけ触れておきます。
- 拡大縮小設定がなければ(=元のファイルの拡大縮小設定がfalse)、印刷用のテンプレートの拡大縮小は変更しない。
falseも設定しない。変更してもちゃんと印刷される設定を追求しませんでした。 - 拡大縮小設定があれば、テンプレートシートに反映させる。
- 改ページ位置を設定する。
- マージンを設定する。・・これ、最初落としてました。
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
トップ画像の花の答え
春菊です。普段目にすることがなかったのですが、結構かわいいお花が咲くんですね。
教えてあげてもいいけど
ディスカッション
コメント一覧
まだ、コメントがありません