即効テクニック |
以下のサンプルでは複数のフレームを用い、コマンドボタン、あるいはコンボボックスによる画面の切り替え(フレームのZorderの操作)を行い、1つのフォームで機能別の複数画面を実現します。また、参考までにフォームの概観をエクセル2000の”ファイルを開く”ダイアログに似せた形にしてみます。さらにフォームの表現力を高めることを希望する場合などは、例えばコマンドボタンにPictureを設定する、などの方法があります。 (前提) コマンドボタン:6、フレーム:6、コンボボックス:1 ※フレームの配置に気をつけてください。フレームは他のコントロールのコンテナとなることができるため、フレームの中にフレームを配置してしまうと、サンプルで意図した動作になりません。 ※サンプルではコマンドボタンクリックによりフレームが切り替わったことを調べるためキャプションにフレーム番号を設定していますが、さらにフレーム内にテキストボックスなどを配置してみてください。その際にはコード中で使用しているコントロールとオブジェクト名が重複しないようにしてください。(Frame1-6,CommandButton1-6,ComboBox1)
'============================================================================= 'フォーム初期化イベント Private Sub UserForm_Initialize() Dim i As Integer Dim CmdTop As Integer Height = 300 Width = 500 For i = 1 To 6 CmdTop = CmdTop + 30 With Controls("CommandButton" & i) .Top = CmdTop .Width = 50 .Height = 30 .Left = 0 .Caption = "画面" & i End With Next i For i = 1 To 6 With Controls("Frame" & i) .Left = 55 .Top = 30 .Width = Width - 65 .Height = Height - 55 .BackColor = &H80000005 .SpecialEffect = 2 .Caption = i End With Next i With ComboBox1 .Top = 5 .Left = 350 For i = 1 To 6 ComboBox1.AddItem "画面" & i Next i End With '初期画面をフレーム1とする Call CmdEvent(1) End Sub
'============================================================================= 'コンボボックスのチェンジイベント、6つのコマンドボタンのクリックイベントから'呼び出される、引数としてフレームとボタンのインデックスを受け取り、対象のコントロールの設定変更を行う。 Private Sub CmdEvent(objID As Integer) Dim i As Integer '指定されたフレームを前面にもってくる Controls("Frame" & objID).ZOrder fmZOrderFront 'コンボボックスの値を変化させる ComboBox1.ListIndex = objID - 1 'クリックされたボタンの背景色を強調表示、フォントを白 'その他のボタンは元に戻す For i = 1 To 6 If i <> objID Then Controls("CommandButton" & i).BackColor = &H8000000F Controls("CommandButton" & i).ForeColor = &H80000012 Else Controls("CommandButton" & i).BackColor = &H8000000D Controls("CommandButton" & i).ForeColor = &HFFFFFF End If Next i End Sub
'============================================================================= '画面切り替え用コンボボックスのチェンジイベント Private Sub ComboBox1_Change() Dim j As Integer j = ComboBox1.ListIndex + 1 Call CmdEvent(j) End Sub '============================================================================= '画面切り替え用コマンドボタン(1−6)のクリックイベント Private Sub CommandButton1_Click() Call CmdEvent(1) End Sub Private Sub CommandButton2_Click() Call CmdEvent(2) End Sub Private Sub CommandButton3_Click() Call CmdEvent(3) End Sub Private Sub CommandButton4_Click() Call CmdEvent(4) End Sub Private Sub CommandButton5_Click() Call CmdEvent(5) End Sub Private Sub CommandButton6_Click() Call CmdEvent(6) End Sub