ダイアログボックス

わずかな知識で VBA!
ダイアログボックス

 ダイアログボックスを作ってみよう 1



  VBAには、MsgBox関数や、InputBox関数のほか組込みダイアログボックスなど、
  いろいろなダイアログボックスが用意され利用できますが、

  それら既成のダイアログボックスでは満足できない場合には、
  オリジナルのダイアログボックスを作成することができます。

  ダイアログボックスを作成する場合の作成手順や、
  作成したダイアログボックスをどうやって動作させるかなど、
  その方法について、「ダイアログボックスを作ってみよう1・2」で
  例題を使用して説明していきます。

  オリジナルのダイアログボックスを作成することは、難しいことではありません。
  ここで使用する各キャプチャーは、Excel2007のものです。
  Excel2003以前のものとは、デザインや色調が変更されています。
  余談ですが、私の好みとしては、以前のバージョンの方が好きです(笑)。


わずかな知識で
VBA!




  ユーザーフォームとActiveXコントロール

    ダイアログボックスは、ユーザーフォームとActiveXコントロールから構成されています。
    ダイアログボックスの背景部分に相当するのが、ユーザーフォームで、
    ActiveXコントロールを配置して利用します。
 
    ActiveXコントロールは、ダイアログボックスの部品のようなもので、
    コマンドボタンや、テキストボックスなどが用意されています。
 
    しかし、ユーザーフォームにActiveXコントロールを配置しただけでは、ダイアログボックスは機能しません。
    ボタンがクリックされたり、テキストボックスの内容が変更されたりした時に動作する、
    「イベントプロシージャ」を設定していく必要があります。
 
    これで、各ActiveXコントロールが反応して、ダイアログボックスが動くようになります。

       

   
   ダイアログボックスの作成は、VBE(Visual Basic Editor)で行います。
   VBEは、プロシージャの作成や、編集、動作チェックなどの他に、
   ダイアログボックスを作成する機能も持っているのです。

  作成用ツール類
     
   はじめに、ダイアログボックスを作成するときに使用する、ツール類を紹介します。
   ツール類の具体的な使用方法は、実際に操作しながら説明していきます。

      

  
  プロジェクトエクスプローラー
 
     ダイアログボックスとは、ユーザーフォームを実行している状態の時を言い、
     プロジェクトエクスプローラー内では、ユーザーフォームとして管理されます。
 
     ユーザーフォームが作成されると、プロジェクトエクスプローラー内に「フォーム」フォルダが作成されて、
     その中に保管されます。
 
     ユーザーフォームを表示するには、表示されているユーザーフォーム名をダブルクリックするか、
     または、ユーザーフォーム名を選択後に「オブジェクトの表示ボタン」をクリックします。

     


  プロパティウィンドウ
 
    オブジェクトの初期設定をするウィンドウです。
    オブジェクト(操作対象物)には、必ず1つ以上のプロパティ(属性)があります。

    ユーザーフォームやActiveXコントロールにもプロパティがあって、
    そのプロパティの値をここで設定します。もちろん、他のプロシージャからも設定することができますが
    プロパティウィンドウの値を変更するだけでも、設定できます。
 
    プロシージャからの操作は、必要な部分のみ行うのが通常の使い方です。
    
    プロパティウィンドウは、「オブジェクトボックス」と「プロパティリストタブ」から構成されていて、
    オブジェクトボックスには、対象となるオブジェクトの名前が表示されています。

    フォームや、フォーム上の各コントロールをマウスで選択すると、選択したオブジェクト名が表示され、
    そのオブジェクトのプロパティ値が表示されます。

    文字で書くと非常に分かりづらいですが、実際に操作してみれば、すぐにわかると思います。

      

 

  ツールボックス

    

    ユーザーフォームに配置できるコントロールは、全てここに表示されています。
    16個表示されていますが、 は、
    ユーザーフォームに配置されているコントロールを選択するためのボタンで、コントロールではありません。
 
    どのコントロールも、Windowsでよく見かけるものばかりで、今までにも紹介してきましたが、
    ここで、それぞれの名前とその働きを簡単に紹介しておきます。
    詳しくは、「ActiveXコントロール」の章をご覧ください。
    
 ラベル  Label  ユーザーフォームに文字を記入
 テキストボックス  TextBox  データの入力/表示
 ユーザーに文字列や数値を入力してもらう
 コンボボックス  ComboBox  選択項目をドロップダウン形式で表示する
 リストの中から該当するものを選択してもらうだけでなく、
 リストになければ新たに入力するためのテキストボックスが用意されている。
 リストボックス  ListBox  選択項目をリスト表示します。
 リストの中から該当するものだけを選ぶことができる。
 チェックボックス  CheckBox  チェックの表示/非表示
 オプションボタン  OptionButton  複数の選択肢の中から、1つの項目だけを選択
 トグルボタン  ToggleButton  オン/オフ を選択する
 フレーム  Frame  コントロールをグループ化する
 コマンドボタン  CommandButton  処理実行用のボタンを作成する
 タブストリップ  TabStrip  複数のページを表示する(同じレイアウト)
 マルチページ  MultiPage  複数のページを表示する(異なるレイアウト)
 スクロールバー  ScrollBar  画面の表示状態や値をスクロールにより変更する
 スピンボタン  SpinButton  矢印ボタンで値を増減させる
 イメージ  Image  ユーザーフォーム上に画像を表示する
 レフエディット  RefEdit  ユーザー操作による範囲選択ができる


  ダイアログボックスは、予定通りに動作するまで、
  何度でもデザインやイベントプロシージャを修正することができます。

  利用する人の立場に立って使いやすいものを作成しましょう。使いづらいと誰も使ってくれません。

  ユーザーフォームの作成方法
 
    ダイアログボックスのベースとなるユーザーフォームを作成してみましょう!

 
    VBEの画面で、登録したいブックのProjectのどこか(この図では「Sheet1」)を選択し、
    「ツールバー」の「挿入(I)」から、「ユーザーフォーム(U)」を選択します。

    自動的にユーザーフォームウィンドウが表示され、その中にユーザーフォームが作成されます。

         

   作成されたばかりのユーザーフォームは、上の図のように、タイトルバーとフォームだけで、
   コントロールは何も配置されていません。

   ここにコントロールを配置する場合は、同時に表示されたツールバーを使って行います。
   ツールバーは、ユーザーフォームがアクティブな状態の時に自動的に表示されます。

   ユーザーフォームの外枠にある□(ハンドル)に、
   マウスをあわせドラッグすれば、サイズを自由に調整できます。
   グリッドは、VBEの画面では表示されますが、実行時のエクセルの画面には表示されません。
 
   グリッドのサイズを変更したい場合は、メニューの「ツール(T)」⇒「オプション(O)」で
   オプションダイアログボックスが表示されるので、「全般」タグの「グリッドの設定」で調節できます。

        

 
  ユーザーフォームの名前とタイトル

 
    作成したユーザーフォームには、デフォルトで「UserForm1」という名前が設定されています。
    2つ目を作成すると「UserForm2」という具合に数値が変わっていきます。
 
    このままでも不便は感じませんが、
    できたら名前を見ただけで、内容がわかるようなものにしておきたいものです。

    名前を変更するには、プロパティウィンドウの「(オブジェクト名)」に変更したい名称を入力します。
 
    表示されるタイトルも同じように変更します。タイトルの変更は、
    プロパティウィンドウの「Caption」プロパティに入力します。

        


    詳しいプロパティ値の説明は、「各コントロールのプロパティ」の章で説明しています。


  ユーザーフォームの保存

     作成したユーザーフォームを保存するには、2つの方法があります。
    
        1. ブックにそのまま保存する
          普通に「ファイル(F)」⇒「保存(S)」

        2. 特定のユーザーフォームだけを保存する
          プロジェクトエクスプローラーで、保存したいユーザーフォーム名を
          右クリック⇒「ファイルのエクスポート(E)」をクリック⇒ファイルの保存ダイアログボックスが
          表示されるので、「ファイル名(N)」に適切なファイル名を入力して「保存(S)」ボタンをクリック

          こちらの方法で保存した場合は、「.frm」という拡張子で保存され、
          他のブックでインポートして利用することができます。

  ユーザーフォームの削除

     不要になったユーザーフォームの削除は、プロジェクトエクスプローラーで、
     削除したいユーザーフォーム名を右クリック⇒「(削除するフォームの名前)の解放(R)」をクリックします。

     確認のメッセージが表示されるので、「いいえ」をクリックすれば削除され、「はい」をクリクすれば、
     そのユーザーフォームを上記2の方法で保存し、ブックから削除されます。
 
     この操作は、各モジュールについても同じです。

       



  コントロールを作成する!

    ユーザーフォームが作成できたので、今度は、データ入力欄と、実行用のボタンを配置していきましょう。
    データ入力欄にはテキストボックス、実行ボタンにはコマンドボタンを使います。

      

  ユーザーフォームにコントロールを配置する。

   手 法 1
  
   1. ツールボックスから、ユーザーフォームに配置したいコントロールのアイコンをクリックします。
   2. マウスをフォーム上に移動します。このときのマウスカーソルは、「+」に変わっていて、
     カーソルの右下に選択したコントロールのアイコンが表示されます。
   3. コントロールを配置したい場所で、マウスをクリックし、そのまま右下方向へドラッグします。
     このときに、点線が表示されますが、その大きさがコントロールのサイズです。
   4. マウスのボタンを離せば、点線の大きさと同じサイズのコントロールが作成されます。

   手 法 2

   1 ツールボックスから、配置したいコントロールのアイコンをクリック
   2 選択したボタンがくぼんだ状態になるので、マウスをユーザーフォーム上に移動する。
     このときのマウスカーソルは「+」に変わり、
     カーソルの右下には選択したコントロールのアイコンが表示されます。
   3 そのコントロールを配置したい場所でマウスをクリック。
     これで、ある一定の大きさのコントロールが配置されます。

   コントロールも選択したときに表示されるハンドルを使用して、大きさを変更したり、
   ユーザーフォーム上の位置を移動したりできまし、プロパティ値を設定して修正することもできます。
 
   ユーザーフォームを適当な大きさに調整したら、作成作業は終了です。


   各コントロールを右クリックすると、そのコントロールに対して行えるメニューが表示されますが、
   複数のコントロールを同時に選択し、そのうちの1つを右クリックすると、
   幅や位置を揃えたりできるメニューが表示されます。

   複数のコントロールを同時に選択する方法は、
   選択したいコントロールの全部、または一部が入るように左上から右下にマウスをドラッグして行います。

     

   コントロールは、選択した状態で「Delete」キーを押せば削除できます。
   また、Excelの範囲指定と同じように、「Ctrl」キーを押しながらの複数選択も可能です。


  ユーザーフォームの表示テスト
 
    ユーザーフォームのデザインが終わったら、一度テストしてみます。
 
    まだ、何も登録していないので、コマンドボタンをクリックしても何も起こりませんが
    とりあえずの動作確認や、実際にエクセルの画面に表示された状態がわかります。
 
     1. ユーザーフォームを選択して、ツールバーの ボタンをクリックます。

        

     2. 終了させるときは、表示されたフォーム右上の「×」ボタンをクリックすれば、もとの画面に戻ります。


  コントロールに名前をつける
 
    コントロールの名前も、ユーザーフォームと同じように変更しておきましょう。
 
    コマンドボタンは、デフォルトで設定されたままでも構わないと思いますが、
    TextBoxなどはプロシージャの中で値を取得するときにその名前を指定するため、
    わかりやすくしておく必要があります。

    逆に、コマンドボタンは、「CommandButton1」では何をするボタンかユーザーはわからないため、
    表示されるタイトルを分かりやすく変更する必要があります。
 
    やり方はユーザーフォームの時に行った方法と同じです。
    名前は「(オブジェクト名)」のプロパティ値を、タイトルは「Caption」のプロパティ値を修正すればいいのです。

  コマンドボタンの「Defaultプロパティ」と「Cancelプロパティ」
 
    Excelのダイアログボックスでは、「Enter」キーが押されると「OK」ボタンが
    クリックされたと見なされるように作られています。

    これは、「Enter」キーと「OK」ボタンが関連付けられているためで、「標準ボタン」と呼ばれています。
    ユーザーは、この関連付けに慣れているので、ここでも同じように設定しておいた方が、
    より使いやすいダイアログボックスとなります。
 
    この「Enter」キーとボタンの関連付けに使用するのが「Default」プロパティです。
    「Default」プロパティを「True」に変更すれば、関連付けは終了です。
    ただしこのプロパティ値を設定できるのは、一つのユーザーフォームで一つしか設定できません。

    同じように「キャンセル」ボタンと「Esc」キーの関連付けがあります。
    こちらは、「Cancel」プロパティで設定します。
    この例では作成していませんが、「キャンセルボタン」はユーザーの選択肢として必要ですので、
    作成するようにしてください。


  ユーザーフォーム上の「×」(強制終了ボタン)
 
    システムを作成していくと、ユーザーフォーム上に「入力」ボタンの他に
    入力作業を終了する「終了」ボタンなども必要になります。

    ですが、入力作業の終了後のプロシージャが「終了」ボタンに登録してある場合、
    「×」ボタンをクリックされては、そのプロシージャが実行されません。

   それではマクロが計画通りに動作しなくなるので実に具合が悪いものとなってしまいます。
   その防護策として次の方法があります。

      Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
         If CloseMode = vbFormControlMenu Then
            MsgBox "「×」ボタンでは閉じることはできません。" & Chr(13) & Chr(10) _
                & "「終了」ボタンをクリックしてください。"
            Cancel = True
         End If
      End Sub


   これは、ユーザーフォームの「×」ボタンが押されたら、次のメッセージを表示します。

      

   作成方法は、ユーザーフォームをダブルクリックします。
   すると次のようなイベントプロシージャが作成されコードウィンドウが表示されます。

      Private Sub UserForm_Click()

      End Sub


   そのままの状態で、プロシージャボックスの「▼」ボタンをクリックして、「QueryClose」を選択します。

      

   すると、上の図のように、

       Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

       End Sub


   のイベントプロシージャの宣言が表示されるので、その間に既述のプロシージャを記入します。

      Private Sub UserForm_Click()

      End Sub


   は、不要なので、範囲選択して消去します。

   ここで、もう一つのマクロの終了方法の説明です。

   ユーザーフォームの「×」ボタンが、上記の方法で無効になっているときなどは、
   キーボードの「Ctrl」キー+「Pause」キーでマクロは中断できます。

   論理エラーで無限ループに陥ったときなどには、この手しかありません。


  テキストボックスで自動的にIMEをオンにする!

    テキストボックスでは、あらかじめIMEのモードを設定しておくことができます。

   全角のひらがなを入力するテキストボックスではIMEをONにし、
   半角数字などを入力するテキストボックスではIMEをOFFにするという設定ができるので、
   IMEを切り替える手間が省け、誤入力の一部を防ぐこともできます。
 
   IMEの設定をするには、「IMEMode」プロパティで設定します。

   指定できるモードは次のとおりです。
IMEMode
 組み込み定数  働  き
0  fmIMEModeNoContorol  IMEモードを変更しない
1  fmIMEModeOn  IMEをオンにする
2  fmIMEModeOff  IMEをオフ(英語モードに)する
3  fmIMEModeDisable  IMEをオフにしてなおかつキー操作によってもIMEをオンにできない
4  fmIMEModeHiragana  全角ひらがなモードでIMEをオンにする
5  fmIMEModekatakana  全角カタカナモードでIMEをオンにする
6  fmIMEModekatakanaHalf  半角カタカナモードでIMEをオンにする
7  fmIMEModeAlphaFull  全角英語モードでIMEをオンにする
8  fmIMEModeAlpha  半角英語モードでIMEをオンにする
9  fmIMEModeHangulFull  全角ハングルモードでIMEをオンにする
10  fmIMEModeHangul  半角ハングルモードでIMEをオンにする

  次章は、ユーザーインターフェース作成の実践編です。 
      


  わずかな知識でVBA!       TOP

  マクロで何ができる?   ユーザーインターフェース    マクロの記録   マクロの登録
 
  イベントについて      マクロの編集           ゲームで覚えるVBAプログラミング
 
  オブジェクトの操作     セルの操作            MsgBox関数・InputBox関数
 
  変数の型           ヘルプの活用          イミディエイトウィンドウ  
 
  Withステートメント      Setステートメント
 
  条件分岐のステートメント   If Then Else,Select Case
 
  繰り返しのステートメント   Do Loop
 
  繰り返しのステートメント   For Next
  
  ダイアログボックスを作ってみよう1               ダイアログボックスを作ってみよう2 【実践編】
  
  ActiveXコントロール   各コントロールのプロパティ       文字列の操作        Endプロパティ

  リンク・検索   相互リンク    マイプロフィール       YouTubeの部屋 
    

Copyright (C) わずかな知識でVBA! All Rights Reserved