フォームとコントロールの活用−1つのフォームを使いまわす

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

Excel97,2000



戻る


Excel Word Access VBA! モーグ