タブストリップで問題と解答を切り替えるコード

タブストリップで問題と解答を切り替えるコード
タブストリップで問題と解答を切り替えるコード

リンクユニット


Excel2016,2013 マクロ 42b回

タブストリップ(TabStrip)

コントロールが複数のタブを持つタブストリップは、タブを切り替えることで表示内容を切り替えることができる便利なオブジェクトです。
なかなか覚えられない憲法条文を穴埋め問題にしてみました。
(サンプルファイルは、こちらから マクロ42回サンプルデータ

タブを切り替えた時に表示する値を書き換える

タブストリップにテキストボックスを1つ設置します。タブを切り替えてもテキストボックスは共通して表示されます。表示する内容はコードで切り替えてやります。ここに、Excelのシート「kenpojyoubun!A5:A16」にあるデータを表示させましょう。
タブストリップで問題と解答を切り替えるコードマクロ1
憲法条文を表示させようと思うので、フォームにテキストボックスとコンボボックスを追加しました。ここには、条文のタイトルを表示させる予定です。
タブストリップで問題と解答を切り替えるコードマクロ2
タブの名称は変更することができます。名前を変更したいタブの上で右クリックして、名前の変更を選択。
タブストリップで問題と解答を切り替えるコードマクロ3
名前の変更ダイアログで名前を入力します。
タブストリップで問題と解答を切り替えるコードマクロ4

TabStripの名前変更と移動

タブの順序を変更するには、TabStrip上で右クリックして、移動を選択します。
タブストリップで問題と解答を切り替えるコードマクロ5
コンボボックスに表示されるセル範囲をプロパティウィンドーのRowSourceで「kenpojyoubun!A5:A21」と指定しました。
タブストリップで問題と解答を切り替えるコードマクロ6

コンボボックスの値が変わったときのコード

コンボボックスを変更すると、隣のテキストボックスに対応するセルの内容が表示されるようにします。コンボボックスに入力された内容なタブインデックスで取得します。最初のインデックスは0です。指定されたRowSource以外は-1となります。
タブストリップで問題と解答を切り替えるコードマクロ7
Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex = -1 Then
        txtName.Value = "" '-1なら何も表示しない
    Else
        txtName.Value = Cells(5 + ComboBox1.ListIndex, 2) '条文NO
    End If
        kenpoTabs_Change
End Sub

TabStrip上のテキストを表示するコード

そしてタブストリップ(kenpoTab)にテキストを表示するコードは、コンボボックスで指定したComboBox1.ListIndexを元に変更されるようにします。 kenpoTabs.Valueは、0,1,2となります。
Private Sub kenpoTabs_Change()
    jyoubun.Value = Cells(5 + ComboBox1.ListIndex, 3 + kenpoTabs.Value)
    jyoubun.WordWrap = True '文字列を折り返す
    jyoubun.MultiLine = True '複数行のテキストを表示
End Sub
Tabを切り替えると、kenpoTabs.Valueが変わるので表示されるテキストの列が変更になります。
タブストリップで問題と解答を切り替えるコードマクロ8
フォームを起動するときに初期化するコードを記入します。
Private Sub UserForm_Initialize()
  kenpoTabs.Value = 0
  ComboBox1.ListIndex = 0
  kenpoTabs_Change
End Sub
フォームを終了するコード
Private Sub CloseButton_Click()
   Unload Me
End Sub
条文を読んでから、穴埋め問題を答え、解答を見るという流れです。
タブストリップで問題と解答を切り替えるコードマクロ9
これは憲法条文をサンプルにして問題を作りましたが、TabStripは、いろいろと応用がききそうです。
タブストリップで問題と解答を切り替えるコードマクロ10