ユーザフォーム入門 - 住所入力フォームを作成する(8) 〜 フォームの起動と終了
※このトピックはテクニック集”ユーザーフォーム入門−住所入力フォームを作成する
 (6)”までの内容を前提としています。

フォームの起動は・・・

	UserForm1.Show

フォームの終了は、フォームモジュール内で・・・

	Unload Me

とするのが基本ですが、問題は、起動については”どこからどのタイミングで起動するのか”
、終了時については、”ユーザが作成者の意図しない終了の仕方をしてしまう場合の対応”、
などにあります。

■どこからどのタイミングでフォームを起動するか■

一般的には・・・
1.ブックを開いたとき(Workbook_Openイベント)
2.ワークシート上のコマンドボタン(CommandButtonのクリックイベント)
3.メニューバーやツールバーからの起動

などの方法でフォームを起動します。

●1.Workbook_Openイベントの作成●

VBEのプロジェクトウィンドウ(表示されていない場合は”表示”メニューから表示させる)
からフォームを作成したブックの”ThisWorkbook(エクセルのアイコン)”を選択。
         ↓
右クリックから表示されるショートカットメニューのうち”コードの表示”を選択。
もしくはダブルクリック。
         ↓
ワークブックオブジェクトと関連付けられたモジュールのウィンドウが開きます。
         ↓
コードウィンドウ上部左側のオブジェクトボックスより”Workbook”を選択すると、既定の
イベントであるOpenイベントのプロシージャ雛型が作成されます。ここにフォームを起動
するためのコードを記述します。

Private Sub Workbook_Open()

    UserForm1.Show
    
End Sub

●2.ワークシート上にコマンドボタンを配置して起動●

ワークシート上にコマンドボタンを配置するには・・・

”コントロールツールボックス”のツールバー(表示されていない場合はエクセルのメニュー
から”表示-ツールバー-コントロールツールボックス”を選択して表示させる)からコマンド
ボタン(四角い浮き彫り上のアイコン)をクリックし、マウスカーソルが”+”印に変わった
らシート上の配置したい任意の位置でクリックし、四角を描くようにドラッグする。
         ↓
自動的にデザインモードになる
※コントロールツールボックスのアイコン(青色の三角定規と鉛筆のアイコン)で確認
         ↓
コマンドボタンを選択して右クリック。表示されたショートカットメニューから”コードの
表示”を選ぶ。または、デザインモードでコマンドボタンをダブルクリック。
         ↓
Visual Basic Editor(VBE)が起動し、コマンドボタンクリックイベントプロシージャの
雛形がワークシートに関連付けられたモジュールに挿入される。
         ↓
フォームを起動するコードを記述

Private Sub CommandButton1_Click()

    UserForm1.Show
    
End Sub

●メニューバーやツールバーからの起動●

ここでは独自のツールバーを手動で作成し、新しいメニューを加えます。

(A)VBEのメニューから”挿入-標準モジュール”を選択し、表示されたモジュールに以下の
  プロシージャを記述。

Sub ShowUserForm()

    UserForm1.Show

End Sub

(B)ツールバーと起動メニューの作成

エクセルのメニューから”ツール-ユーザ設定”を選択。
         ↓
ユーザ設定ダイアログで”ツールバー”のタブをクリックし、”新規作成”ボタンを押す。
         ↓
”新しいツールバー”ダイアログでツールバーの名称を指定する(例:MyToolBar)
         ↓
アイコンもメニューもない小さなツールバーが表示される。
         ↓
ユーザ設定ダイアログの”コマンド”タブをクリック。左側のリストから”新しいメニュー”
を選択。右側の”コマンド”の中に表示される”新しいメニュー”をクリックして、マウスカ
ーソルが”田”上に変わったらそのまま作成したツールバーの上までドラッグし、マウスボタ
ンを離す。
         ↓
”MyToolBar”に作成された”新しいメニュー”の上で右クリック。表示されたショートカット
メニューの”名前”の欄で分かりやすい名前に変更。(例:ユーザフォーム起動)
また、ユーザ設定ダイアログの”選択したボタンの編集”のクリックでも同様のメニューが表
示されます。
         ↓
再度”新しいメニュー”の上で右クリックし、”マクロの登録”をクリック。リストの中から
(A)で作成したプロシージャ(ShowUserForm)を選択して”OK”。
         ↓
”ツールバー”タブに戻り、”添付”ボタンをクリック。
         ↓
”ブックへツールバーを登録”のダイアログの左側のリスト(ユーザ設定ツールバー)の中か
ら作成したツールバー(MyBar)を選択し、”コピー”ボタンをクリック。右側のリスト(登録
ツールバー)に名前が表示されたのを確認して”OK”。ユーザ設定ダイアログも”閉じる”
ボタンをクリックして終了。

※作成したツールバーはフロート状態のままでもかまいませんが、画面上部にドラッグしてそ
 の他のツールバーと同様に画面上部に配置することも出来ます。

●補足 - フォームのモードレス表示●

 エクセル2000においてはユーザフォームの起動を指示するShowメソッドの引数"Modal"
 に"False"を指定することでフォームのモードレス表示が可能となります。これにより、
 フォームを表示したままワークシート上で操作することなどが出来るようになります。
 (例えば、ワークシー上のデータをフォーム上のテキストボックスにコピー&ペースト
  するなど。)

Private Sub CommandButton1_Click()

    UserForm1.Show False

End Sub

※ユーザフォームのプロパティー"ShowModal"にプロパティーウィンドウから"False"を
 設定することでもモードレス表示が可能となります。

■ユーザフォームの終了■

VBEで作成したユーザフォームに配置した”終了”ボタン(CmdShuuryo)を右クリックし、
”コードの表示”を選んでクリックイベントプロシージャを作成。

Private Sub cmdShuuryo_Click()

    Unload Me

End Sub

●終了を必ず”終了”ボタンから行わせるには●
作成したアプリケーションのユーザーによる作成者の意図しない動作を防止するためには
フォーム起動時の"X"ボタン(フォーム右上端の閉じるボタン)を無効にするのが効果的
です。

閉じるボタンを無効にするにはユーザフォームの”QueryClose”イベントを用います。
フォームモジュールのオブジェクトボックスからユーザフォームを選択し、プロシージャ
ボックスから”QueryClose”を選択すると雛形が挿入されます。

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

End Sub

このイベントプロシージャの引数"CloseMode"にはフォームの終了状態が格納されます。
"X"ボタンによる終了状態は”vbFormControlMenu”です。また、フォームの終了をキャン
セルするには、このイベントプロシージャの引数"Cancel"に、イベントプロシージャ内で
"True"を格納することによって可能となります。

(サンプル)

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

    Select Case CloseMode
    Case vbFormControlMenu
        MsgBox "終了ボタンから終了してください"
        Cancel = True
    Case Else
        'とじるボタン以外の終了時にはデータブック(住所録.xls)を保存してとじます
        MsgBox "終了します。"
        Workbooks(BOOK_NAME).Close savechanges:=True
    End Select

End Sub

Excel2000



戻る


Excel Word Access VBA! モーグ