次は「印刷プレビュー」ボタンがクリックされたときの処理だ。
Private Sub 印刷プレビューボタン_Click() If 範囲テキストボックス.Text = "" Or 左余白テキストボックス.Text = "" Or 右余白テキストボックス.Text = "" Or 上余白テキストボックス.Text = "" Or 下余白テキストボックス.Text = "" Then MsgBox "未入力の個所があります!" Exit Sub Else UserForm1.Hide With Worksheets("Sheet1").PageSetup .PrintArea = 範囲テキストボックス.Text .Orientation = xlPortrait .Zoom = False .FitToPagesTall = 1 .FitToPagesWide = 1 .LeftMargin = Application.CentimetersToPoints(左余白テキストボックス.Text) .RightMargin = Application.CentimetersToPoints(右余白テキストボックス.Text) .TopMargin = Application.CentimetersToPoints(上余白テキストボックス.Text) .BottomMargin = Application.CentimetersToPoints(下余白テキストボックス.Text) End With Worksheets("Sheet1").PrintPreview End If End Sub
「範囲」「左余白」「右余白」「上余白」「下余白」テキストボックスに値が未入力なら、警告メッセージを発して処理を抜ける。それ以外は、以下の処理を繰り返す。
HideメソッドでUserFormを隠す。Hideメソッドを使った場合は、UserFormが隠れているだけで、メモリ上には残っているので、再度呼び出した場合は、入力した値を保持したまま表示される。
なお、UserFormを終わらせて入力した値を消去するには、Unloadメソッドを使用するとよい。こうすればメモリ上からも削除される。
Orientationプロパティには、ワークシートを印刷する場合のページの方向を設定する。ここでは、「xlPortrait」を設定して「縦モード」で印刷するよう設定している。「横モード」で印刷する場合は「xlLandscape」を設定する。
方眼紙を1ページに収めるには、FitToPagesTall/FitToPagesWideプロパティを使用し、値に「1」を指定して、1ページに収まるよう指定する。
FitToPagesTallプロパティは、ワークシートを印刷するときに、縦何ページ分で収めるかを示す値を設定する。FitToPagesWideプロパティは、ワークシートを印刷するときに、横何ページ分で収めるかを示す値を設定する。
「左余白」の設定には「LeftMargin」、「右余白」には「RightMargin」、「上余白」には「TopMargin」、「下余白」には「BotttomMargin」プロパティでそれぞれ指定し、センチからポイントに変換するCentimetersToPointsメソッドで、各余白を入力するテキストボックスの値を指定している。
最後に、PrintPreviewメソッドで印刷プレビューを表示する。
なお、このフォームで初期値に設定している値は、先にも書いたがA4サイズ用紙の縦でちょうどいっぱいの方眼紙になる。
実際に印刷すると「A4」用紙一杯の極小方眼紙が印刷される。もう少し方眼紙を大きくしたい場合は、図3の方法で「列幅」や「行高」を変更して、その値を取得して指定し、「範囲指定」の「セルの範囲」も変更する必要がある。
これは実際に設定して、「印刷プレビュー」で確認しながら、試行錯誤して設定する以外にない。
行の高さや、列の幅を同じにするには、図3のように「行幅変更」位置や「行高変更」位置ににマウスカーソルを合わせて、ツールチッブで表示される値を確認して、入力するといいだろう。
図3では同じ「42ピクセル」になっているが、実際の「高さ」や「幅」は数値が異なっている。「列幅」や「行高」に指定する値は、この「幅」と「高さ」の値を指定する。「42ピクセル」ではないので、注意してほしい。
作成した「Excel方眼紙作成フォーム」を実行すると図4のように表示される。
あとは、マクロを実行して実際にExcel方眼紙を作成したり、印刷したりして試してほしい。
今回はExcel方眼紙の作成方法をフォーム上から行うTipsを紹介した。コード自体はそんなに難しくないが、「A4」用紙に方眼紙を収めるのがちょっと面倒だ。これはプログラムというより、試行錯誤してセルの範囲を指定して、印刷プレビューで確認しながら、セルの範囲を指定していく以外にない。
またExcelの画面では大きく見える方眼紙も、実際に印刷すると極小の方眼紙になる。これは指定したページを1ページに収めるように指定しているから仕方がないだろう。
さて、せっかく作成したマクロだが、いちいちボタンを作成して呼び出すのは面倒なので、Excelのメニューからマクロを起動できるようにしたい。
次回は、今回作成したフォームをどのようにして呼び出すかを解説しよう。「Excel方眼紙作成」というメニューを追加して、そこからフォームを表示させるようにするので、お楽しみに。
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Copyright © ITmedia, Inc. All Rights Reserved.