VBA講座ツイート今回は鑑別報告書を印刷するコードを書いていきましょう。印刷する枚数等も決めておいて、印刷ボタンを押すとプリントアウトされるというコードも書くことができます。普段使用するプリンタはモノクロで、鑑別報告書はカラープリンタで印刷したい場合もあると思いますし、印刷前にプレビュー画面を見たいという方もいるかもしれません。そのため今回は印刷ダイアログ画面を表示するように設定したいと思います。スポンサーリンクApplication.Dialogs(xlDialogPrint).Show印刷ボタンをダブルクリック。右クリックからコードの表示。シートの保存の前も印刷の前も基本的に同じ処理が必要です。VBA講座5-13で書いたコードを使い回す事ができます。btnPrint_Click()の下に貼り付けます。そのままは使えませんので一部修正します。印刷シートをアクティブにしておく必要がありますので、.Acivateを加えています。赤で×を付けた部分は削除して下さい。ファイルの保存に関するコードは今回は使用しません。印刷ダイアログを表示する方法ですが、Application.Dialogs(xlDialogPrint).ShowこれでOKです。これはこれで定型文のようなものなので、まず覚えて下さい。今回はこれだけだとちょっと問題があるんですね。先ほど修正したコードの下にApplication.Dialogs(xlDialogPrint).Showを書いてF5で実行してみてください。印刷ダイアログが表示されましたね。続いて左下の印刷プレビューを押してみて下さい。印刷プレビュー画面が出ましたが、frmInputがその上に表示されてフリーズしたようになっていませんか?frmInputを閉じる事もできないし、印刷プレビューを閉じる事もできません。ユーザーフォームが開いている状態で印刷プレビューを表示すると、ユーザーフォームが動作を受け付けなくなってしまいます。そのため印刷プレビューを行う時は、一時的にユーザーフォームを隠すという作業が必要になります。パソコンの故障ではありませんのでご安心を(笑)。それではExcelのタスクバー(パソコン画面下のExcelのタブ)を右クリックしてウインドウを閉じるを選択すると、印刷プレビューが閉じられます。その後右上の×をクリックしてユーザーフォームを閉じて下さい。Hideメソッド先ほどユーザーフォームを一時的に隠すというお話をしました。それを行うのがHideメソッドです。Me.HidefrmMenu.Hide今回は上記のように使用します。これを印刷ダイアログボックスを表示する前、つまりApplication.Dialogs(xlDialogPrint).Showの上に追加して下さい。Meは今現在開いているfrmInputを意味します。frmMenu(システムで起動時に表示されるユーザーフォーム)も実はその裏で開かれています。それを文字通りHideする(隠す)のがHideメソッドです。ここでこう思う方もいるかもしれませんね。Me」よりも「Hide」を使用する方が都合がいいのです。その理由を解説しますね。Me」はユーザーフォームを完全に閉じることになりますので、テキストボックスやコンボボックスに入力されたデータは残りません。「Hide」はあくまで隠すだけ(システム利用者に見えないようにするだけ)なので、印刷プレビューから戻ってもテキストボックスやコンボボックスに入力されたデータがそのまま残っているからです。それではコードを追加した状態で、もう一度印刷プレビューを表示させて問題ない事を確認して下さい。大丈夫でしょうか?さてプレビューを確認したり、実際に印刷した後は、またユーザーフォームを表示する必要がありますよね。それがfrmMenu.ShowMe.Showになります。「frmMenuを表示する。」「frmInputを表示する。このコードを追加して、F5を押して実行します。印刷プレビューを表示させ、印刷プレビューを閉じるを押して戻ると、frmMenuは表示されますが、なぜかfrmInputが表示されませんね。見た目上コードは間違っていません。?スポンサーリンクvbModalとvbModelessとは?ここでvbModalとvbModelessについてお話します。これまでユーザーフォームを表示する時はユーザーフォーム.Showと書いてきましたね。Showの後に実は省略されている部分があるのです。それがvbModalとvbModelessになります。vbModalvbModalはどういう意味を持つかというと、例えばユーザーフォームを表示している時に「そのユーザーフォーム以外の動作を行う事ができない」という事です。vbModelessvbModeless。lessは否定を意味しますので上記の逆、つまり「そのユーザーフォーム以外の動作を行う事ができる」となります。ちなみにShowの後に何も書かなければvbModalとなります。vbModalとなっているのです。frmInputが表示されなかったのか?それはfrmMenuがvbModalで表示されたからです。「frmMenu以外の動作は受け付けないよ!」という状態になっているのです。そのためMe.Showは単純に実行されていない、という事になります。