以下のサンプルでは複数のフレームを用い、コマンドボタン、あるいはコンボボックスに
よる画面の切り替え(フレームの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
|