ホーム > ユーザーフォーム > Lesson12: マルチページ

マルチページ
マルチページ マルチページ
タブストリップとそっくりなマルチページ。
違いは、マルチページには各ページに異なるコントロールを配置することができるところ。
マルチページ
マルチページを使って、性別と好きな食べ物を表示できるようします。
ユーザーフォームを広げて、マルチページを配置します。
プロパティ 設定
オブジェクト名 mltData
ページのタブの名前をそれぞれ変更します。
プロパティ(タブ1) 設定
Caption 性別
プロパティ(タブ2) 設定
Caption 好きな食べ物
1つ目のページにオプションボタンを2つ配置。
プロパティ 設定
オブジェクト名 optB
Caption 男の子
プロパティ 設定
オブジェクト名 optG
Caption 女の子
2つ目のページにはテキストボックスを1つ配置。
プロパティ 設定
オブジェクト名 txtFav
マルチページを配置1 マルチページを配置2
マルチページを切り替えるごとに表示が変わるようにします。
どのページが選択されているかを知るには、mltData.Value を見ます。
mltData.Value は、0,1,2...です。
ここでは、性別が0、好きな食べ物が1。
番号1のしげっちの性別なら、Cells(3, 9)。
番号1のしげっちの好きな食べ物なら、Cells(3, 10)。
番号2のえんどーくんの性別なら、Cells(4, 9)。
番号2のえんどーくんの好きな食べ物なら、Cells(4, 10)。
番号3のロボたんの性別なら、Cells(5, 9)。
   ・・・
これを、cmbNum.ListIndex を使って表すと
性別 Cells(3 + cmbNum.ListIndex, 9)
好きな食べ物 Cells(3 + cmbNum.ListIndex, 10)
Private Sub mltData_Change()
  
  If Cells(3 + cmbNum.ListIndex, 9) = "男の子" Then
    optB.Value = True
  ElseIf Cells(3 + cmbNum.ListIndex, 9) = "女の子" Then
    optG.Value = True
  Else
    optB.Value = False
    optG.Value = False
  End If
  
  txtFav.Value = Cells(3 + cmbNum.ListIndex, 10)
  
End Sub

成績表に性別と好きな食べ物を追加して、
表
実行してみました。
ページを切り替えると、それぞれの性別、好きな食べ物が表示されました。
実行結果
2007年8月
マルチページ その2 マルチページ その2
マルチページを切り替えると、対応する人の性別、好きな食べ物が表示されるようになりました。
でも、ユーザーフォームが表示されたとき、ページを切り替えるまで性別が表示されない。
フォームが表示されたときにも表示させたいな...
ユーザーフォームが表示されるとき、UserForm_Initialize
マルチページを切り替える mltData_Change を実行する
Private Sub UserForm_Initialize()
  
  cmbNum.ListIndex = 0
  tstKamoku_Change
  mltData_Change
  
End Sub

もう一つ。
番号を変えたとき cmbNum_Change にも mltData_Change を実行する
Private Sub cmbNum_Change()
  
  If cmbNum.ListIndex = -1 Then
    txtName.Value = vbNullString
  Else
    txtName.Value = Cells(3 + cmbNum.ListIndex, 3)
  End If
  
  tstKamoku_Change
  mltData_Change
  
End Sub

フォームが表示されたときと番号を変えたときに、性別などが表示されるようになりました。

しかし、バグ発見。
コンボボックスに直接入力したら、こうなった。
実行結果2
好きな食べ物:好物...
というわけで、また修正。
cmbNum.ListIndex = -1 のときの処理を追加。
Private Sub mltData_Change()
  
  If Cells(3 + cmbNum.ListIndex, 9) = "男の子" Then
    optB.Value = True
  ElseIf Cells(3 + cmbNum.ListIndex, 9) = "女の子" Then
    optG.Value = True
  Else
    optB.Value = False
    optG.Value = False
  End If
  
  If cmbNum.ListIndex = -1 Then
    txtFav.Value = vbNullString
  Else
    txtFav.Value = Cells(3 + cmbNum.ListIndex, 10)
  End If
  
End Sub

バグ修正
2007年8月