本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

ダイナミックダイアログボックス

文書番号: 410594

最終更新日: 1998/02/05


この資料は以下の製品について記述したものです。

この記事は、以前は次の ID で公開されていました: JP410594

概要

Excel 4.0 ではダイナミックダイアログボックスを作成することが可能です。ダイナミックダイアログボックスを利用すると、ユーザーが選択した項目に応じて、それに関連した別の項目を自動的に更新することが可能です。ダイナミックダイアログボックスを使うには、トリガーとして働くダイアログボックス項目を定義し、これらの項目が選択されたときにボックスを表示あるいは非表示にするマクロコードを作成する必要があります。

どんなときにダイナミックダイアログボックスを使用するのか?

画面上からダイアログボックスを消さないでユーザーのアクションに応答したいときにダイナミックダイアログボックスを使います。たとえば、[他] - [作業状態設定] コマンドを選択したとき現れる作業状態設定ダイアログボックスがこれにあたります。このダイアログボックスでは、[桁数] チェックボックスを選択すると、それに応じて [入力単位] テキストボックスが選択可能になります。
[GRAPHIC: ]

ダイナミックカスタムダイアログボックスの作成

ダイナミックカスタムダイアログボックスを作成するには、通常のダイアログボックスのためにダイアログ定義テーブルを作成するのと基本的には同じ方法です。トリガーとして働かせる項目を定義することによって、ダイアログボックスをダイナミック化することができます。これは、指定項目の項目タイプ番号 (定義テーブルの一列目) に 100 を加えることによって行います。たとえば、リストボックス項目をトリガーにするには、項目タイプ番号の 15 に 100 を加えて 115 に変えてください。(注.ダイアログエディタでもトリガーとして項目を設定することができます。)
以下の項目を除く、すべてのダイアログボックス項目がトリガーとして利用することができます。
  • 文字(項目 5 )
  • 編集ボックス(項目 6 ~ 10 , 22 )
  • グループボックス(項目 14 )
  • アイコン(項目 17 )
  • ディレクトリ文字列(項目 20 )
  • ヘルプボタン(項目 24 )
ダイアログボックス中において、選択可能なオプションと選択不可能 (淡色表示) なオプションを作成することもできます。これにより、ユーザーが関連し
た項目を選択するまで、あるダイアログボックスの項目を選択不可能にすることができます。ダイアログボックス項目を選択不可能にするためには、項目番号に200 を足してください。たとえば、オプションボタン (項目番号 12) を選択不可能にするには、ダイアログボックス定義テーブルの項目番号列に 212 を指定してください。

トリガー項目が選択されたことを決定する

ダイナミックダイアログボックスと通常のダイアログボックスの一番大きな違いは、ダイアログボックスを画面上に残したまま、マクロを実行することが可能であるということです。これは、マクロがダイアログボックス定義テーブルを変更して、ダイアログボックスを変更するコマンドを実行させることにより実現できます。これらの変更は、ユーザーが選択したトリガー項目に応じて行い、ダイアログボックスを再表示したときにその変更をダイアログボックスに反映します。
トリガー項目が選択されると、画面にダイアログボックスを残したままマクロに制御を戻します。ダイアログボックスの項目は、ダイアログボックス定義テーブルの一行目から 0,1,2,・・・ というように番号が付けられます。この番号はDIALOG.BOX 関数によって返され、ダイアログボックスの中でどの項目が選択されたのかを決定するために利用されます。(ただし、取消ボタンだけはDIALOG.BOX 関数に常に FALSE を返します。)  これを利用することにより、マクロコードがダイアログボックスを再表示する前にその定義テーブルを変更することが可能です。

マクロ構造

以下に典型的なダイナミックダイアログボックスのマクロ構造の基本フォーマットを示します。
  DIALOG.BOX 初期設定
  WHILE Loop
                          DIALOG.BOX の呼び出し
                          DIALOG.BOX 定義テーブルの変更
  NEXT
DIALOG.BOX の初期設定では、ダイアログボックスを表示するための初期状態を決定します。ここでは、テキストエディットボックス内の既定値や、項目の淡色表示化、または編集可能な項目の消去を行います。それは、ダイアログボックス定義テーブル内のセルを編集することによって変更します。一列目の項目タイプ番号の変更、および種々の編集可能な項目に値を設定又は消去して、既定値を変更します。
WHILE ループ構造内を用いて、トリガー項目を選択したときに、マクロを実行してダイアログボックスを再表示します。WHILE ループの終了条件には、ユーザーによって行われた選択を反映します。たとえば、 DIALOG.BOX 関数によって返される特定の値に応じて WHILE 関数を抜け出すことが可能です。

ダイアログボックスの定義テーブルに変更を加えるときの留意点

ダイアログボックスの定義テーブルに変更を加えるときは以下のことを考慮してください。
  • 定義テーブルで選択可能または選択不可能を設定するには、実際に項目番号から 200 を加減するよりもむしろ、SET.VALUE コマンドを使用する方が良いでしょう。これは、もし同じトリガー項目を 2 回選択したとき、200 を項目番号から 2 回加減するという問題を避けるためです。
  • 更新の過程をユーザーに見えないようにするには、同じダイアログボックス定義テーブルか、同次元のダイアログボックス定義テーブルを呼び出してください。
  • ダイナミックダイアログボックスが呼び出されるときに、ECHO(FALSE) を使うと、再描画に異常をきたす恐れがあります。
  • ダイナミックダイアログボックスは、できる限り数式バーとステータスバーの内側に表示させるように設計してください。再描画がスムーズに行えます。

実用例

この実用例は、単独でも利用することが可能です。マクロシートに実際に入力して、試してみてください。ダイナミックダイアログボックスのメカニズムをより理解していただくには、ステップ実行でマクロを実行していただくと良いでしょう。[マクロ] - [実行] コマンドで <ステップ> ボタンを選択することによってステップ実行を行うことが可能です。
この例では、顧客からの送り状を管理するダイナミックダイアログボックスを作成します。ユーザーが住所の変更を指定したら、新しい住所の指定を入力できるようになります。もしこのオプションがダイアログボックスで選択されていなければ、この項目は不必要なフィールドであるため、淡色表示になります。
次の表は、このマクロで使用するダイアログボックス定義テーブルです。
[GRAPHIC: ]
この定義テーブルを入力した後、E2:K16 を反転表示し、[式] - [名前定義] コマンドを選択してください。この例では定義テーブルの名前に "box" が定義してあります。定義テーブルに名前を定義しておくと、マクロを書くときにその参照が容易になります。
8 行目の項目はこのダイアログボックスではトリガーになっていることに注意してください。9 ~ 12 行目の項目は選択不可能(または淡色表示)になっています。このダイアログボックスが初期状態で実行されているとき、以下のように画面に表示されます。
[GRAPHIC: ]
もし、[住所変更] チェックボックスを選択すると、ダイアログボックスが画面に残ったまま、マクロの実行が継続されます。マクロは、トリガーが選択されていることを確認し、その選択に基づいてタスクを実行して、ダイアログボックスが再描画されるかどうかチェックします。以下にこのマクロ例を示します。
[GRAPHIC: ]

説明

  • A2:
    既定値ダイアログボックスセクションに項目 4 ,送付番号テキストボックスをセットします。
  • A3:
    FALSE で終了した変数をセットします。この変数は <入力> コマンドボタンが選択されたときに使われます。
  • A4:
    WHILE ループの開始。入力コマンドボタン (Finished=TRUE) が押されるまで続きます。
  • A5:
    もし住所変更チェックボックスが選択されていなければ、新住所フィールドが淡色表示になります。
  • A6:
    ダイナミックダイアログボックスを実行します。
  • A7:
    <取消> コマンドボタンが押されているかどうかチェックし、もし TRUE ならばマクロがストップします。(BREAK をここに書いても、WHILE ループの外にブレークし、マクロの残りを継続します。)
  • A8-A10:
    もし 8 行目のトリガー項目(つまり、住所変更チェックボックス)が選択されていれば、テキストフィールドとテキストボックス 9 ~ 12 行目の項目が項目番号から 200 を引かれて、選択(利用可能)されます。また、既定値のダイアログボックスセクションが 12 行目の項目にセットされます。
  • A11-A12:
    もし <入力> ボタンが選択されたら、変数 Finished が TRUE にセットされます。
  • A13:
    ネストされた IF ステートメントの終わり。
  • A14:
    WHILE ループの終わり。Finished が TRUE ではない間、ループの開始に戻ります。
  • A15:
    マクロの終わり (マクロはこの地点で継続されてダイアログボックスに入力された情報を処理します)。

関連情報

カスタムダイアログボックスの作成については、『機能事典 (マクロ編) 』の 54ページ以降をご参照ください。
ダイナミックダイアログボックスの作成については、『機能事典 (マクロ編) 』の61 ページ以降をご参照ください。

Keywords: KB410594
Technology: kbExcel400 kbExcelSearch kbExcelWinSearch

inserted by FC2 system