非表示にできる< 目次 >
本記事で出来ること
本記事では、以下の内容が出来ます。
おまけ程度ですが、印刷するところにも触れています。
-出来ること-
①利用者に処理対象のEXCELを都度選ばせる。
②上記①選択したEXCEL内の全シートを印刷できる。
はじめに
EXCEL VBAの作成依頼を受けた際に、
私が大切にしていることは 2つあります。
1つ目は、正しく依頼内容をコーディングすること(当たり前)
2つ目は、VBA動作時の環境に応じたプログラム構成にすること(どゆこと?)
前者は、文字通りです。実現したい内容を達成できるプログラムを組めばよいです。
後者については 深堀します。
VBA動作時の環境って?
僕自身が良く体験していたのですが、
VBA作成依頼で一番困るのは 「納品後のメンテナンス」です。
プログラムを作成していたタイミングでは
意図していなかった動作環境で VBAが実行された場合、
当然ですが VBAはエラーになります。
一例をあげますが、
例えば、VBAが他のEXCELファイルと連携している場合、
連携先EXCELファイルの保管場所(ディレクトリ情報)が変更されていたら
VBAはエラーになります。
(VBAで設定していたディレクトリ情報が変わるため)
作り手からしたら「なんでそんなことも…」と思いますが、攻めてはいけません。
依頼者(ノンプログラマー)からしたら 本当に良く分からないものなんです。
それでも、ファイル保管場所が変更されるたびに
「納品後のメンテナンス」の仕事が増えてしまっては
作り手としては たまったものではありません。
それでは、どのようにすればよいのか。
連携先EXCELを都度 依頼者(VBA利用者)に選択させれば良いのです。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Sub 対象EXCELの全シートを印刷() Dim rtn As String MsgBox "印刷するファイルを選択して下さい" '現在開いているEXCELが一覧で表示されます。 '処理対象のEXCELを選択すると変数 rtnに格納されます。 rtn = Application.Dialogs(xlDialogActivate).Show 'rtnがFalse=EXCELが選択されたなかった場合はVBAがExit Subで完了します。 If rtn = False Then Exit Sub End If 'rtn(選択しEXCELファイル)の全てのワークシートを選択されます。 '注意点:rtn内に非表示シートがある際 エラーとなります。 Worksheets.Select '印刷可否の最終確認 If MsgBox("印刷します。よろしいですか?", vbYesNo) = vbNo Then MsgBox ("中断しました。") Exit Sub End If 'rtn のEXCELファイルをすべて印刷します。 '尚、Copies:=1 は部数1の意味 ' Collate:=True は部数単位で印刷するの意味 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub |
解説
1 2 3 |
Sub 対象EXCELの全シートを印刷() Dim rtn As String MsgBox "印刷するファイルを選択して下さい" |
↑のコード実行後の画面↓
1 2 3 |
'現在開いているEXCELが一覧で表示されます。 '処理対象のEXCELを選択すると変数 rtnに格納されます。 rtn = Application.Dialogs(xlDialogActivate).Show |
↑のコード実行後の画面↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'rtnがFalse=EXCELが選択されたなかった場合はVBAがExit Subで完了します。 If rtn = False Then Exit Sub End If 'rtn(選択しEXCELファイル)の全てのワークシートを選択されます。 '注意点:rtn内に非表示シートがある際 エラーとなります。 Worksheets.Select '印刷可否の最終確認 If MsgBox("印刷します。よろしいですか?", vbYesNo) = vbNo Then MsgBox ("中断しました。") Exit Sub End If |
↑のコード実行後の画面↓
1 2 3 4 5 6 |
'rtn のEXCELファイルをすべて印刷します。 '尚、Copies:=1 は部数1の意味 ' Collate:=True は部数単位で印刷するの意味 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub |
おわりに
いかがでしたでしょうか。
利用者に都度EXCELファイルを選択させる方式でVBAを組む
そしてそれは依頼側が抱える「得体のしれないストレス」を軽減することができ、満足度を向上することにも繋がります。
「得体のしれないストレス」とは、発生したエラーが プログラム側が原因なのか、自身が原因のものなのか、問題の切り分けが難しいことから生じる 「何をどうしたらいいか分からない」状態のことです。
仮に、仮にプログラム側が原因だったとしても、ツール改修依頼も言葉選びが難しいことから、満足度を低下させることに繋がります。
連携先のEXCELファイルを選択させる手法は、「ファイル連携には問題ない」という問題を事前にクリアでき、原因判明を一歩早く行うことができ、
依頼側・作成側の双方にとって 大きなメリットを与えてくれるため、非常にオススメしたい手法の一つとなります。
このようにちょっとしたプロセスを追加することで、大きなメリットを享受することができるため、活用いただければと思います。