Excelの組み込みダイアログを表示する


たとえば、あなたがあるマクロを作ったとします。それは、何らかの処理をした後で、ワークシートを印刷するようなマクロです。処理から印刷までをプログラミングして完成しました。ところが、ユーザーからある要望が……。

「印刷する時さ、そのつど部数を指定できるようにしてくれない?」

印刷を実行するPrintOutメソッドは、引数Copiesに印刷部数を指定できます。AcriveSheet.PrintOut Copies:=2 とすれば2部印刷されます。ここはInputBoxを使って、

Sub Sample1()
    Dim n As Long
    n = Val(InputBox("印刷部数を入力してください"))
    If n < 1 Then Exit Sub
    ActiveSheet.PrintOut Copies:=n
End Sub

よしOKだ…と動作確認していたら電話が……。

「あのさ、印刷ページも指定できるようにして」

は?

「あとさ、印刷の前にプレビューで確認したいときもあるんだよね」

……さぁ、どうしましょう。

もはやInputBoxだけでは対応できません。こうなったらUserFormか?印刷の前にプレビューも選択できるようにするんだから……って、それならいっそ[印刷]ダイアログボックスを表示して、ユーザーに操作してもらった方がよいのではないでしょうか。でも、Excelの組み込みダイアログを表示してユーザーに制御を渡すって、どうやるんでしょう。

前置きが長くなりましたが、今回は「Excelの組み込みダイアログボックス」を表示するテクニックを紹介します。使うのはDialogsコレクションです。Excelが持つすべての組み込みダイアログボックスはDialogオブジェクトで操作できます。そのDialogオブジェクトの集合がDialogsコレクションです。たとえば[印刷]ダイアログボックスを表示するには、次のようにします。

Sub Sample2()
    Application.Dialogs(xlDialogPrint).Show
End Sub

定数xlDialogPrintはDialogsコレクション用の定数で実体は「8」です。DialogsコレクションでExcelの組み込みダイアログボックスを表示するには、このように表示したいダイアログボックスを表す定数を指定して、Showメソッドを実行します。

どんな定数でどのダイアログボックスが表示されるかなどの詳細はヘルプに書いてあります。

表示されるダイアログボックスの初期状態を設定するには、Showメソッドの引数に数値や値を指定します。次のサンプルは「開始ページ=2」「終了ページ=4」「印刷部数=10」の状態で[印刷]ダイアログボックスを表示します。

Sub Sample2()
    Application.Dialogs(xlDialogPrint).Show Arg1:=2, Arg2:=2, Arg3:=4, Arg4:=10
End Sub

DialogsコレクションのShowメソッドに指定できる引数は「Arg1」「Arg2」という名称の名前付き引数です。上記のサンプルでは、Arg2=開始ページ、Arg3=終了ページ、Arg4=印刷部数です。Arg1に「2」を指定して「印刷範囲」の[ページ指定]オプションボタンをオンにしています。表示するダイアログボックスの種類によって指定できる引数の数や意味も異なります。どの引数に何を指定するとどうなるかなど、詳しいことはヘルプに書かれていますので興味がある方は調べてみてください。(リクエストがあるようなら、まとめて公表しましょうか)

DialogsコレクションはExcel 5.0時代から実装されている古い機能です。Excelが持つすべての組み込みダイアログボックスを表示できるのですから、ユーザーに制御を渡すときなどには威力を発揮します。ただ、不思議と昔から詳細な使い方はあまり公になっていません。引数の一覧がヘルプに掲載されるようになったのも最近ですし、実用的なサンプルなども見かけません。Microsoftとしては、あまり推奨していない機能なのかもしれません。