EXCEL VBA トグルボタン、リストボックスの使い方とIntegralHeight対策の一例

EXCEL Ver 2016(32ビット)で確認。

フォームにトグルボタン、ラベル、リストボックスを配置。(イメージ:左)

UserForm1のコード

Private Sub ToggleButton1_Click()
   'イベントが有効な場合、myToggle関数を呼び出す。
   If Application.EnableEvents Then myToggle (1)
End Sub


Private Sub ToggleButton2_Click()
   If Application.EnableEvents Then myToggle (2)
End Sub


Private Sub ToggleButton3_Click()

   If Application.EnableEvents Then myToggle (3)

End Sub


Private Sub myToggle(num As Integer)

   'イベントを一時的に無効にする。

   Application.EnableEvents = False

   'トグルボタンを押していない状態にする。

   ToggleButton1.Value = 0

   ToggleButton2.Value = 0

   ToggleButton3.Value = 0

   If num = 1 Then

      ToggleButton1.Value = 1

   ElseIf num = 2 Then

      ToggleButton2.Value = 1

   Else

   ToggleButton3.Value = 1

   End If

   Application.EnableEvents = True

   'リストボックスにアイテムを表示する関数。

   list_items (num)

   'ラベルにリストボックスの高さを表示する。

   Label1.Caption = CStr(ListBox1.Height)

End Sub


Private Sub list_items(num As Integer)

   Dim str As String

   'トグルボタンにより、表示するデータを変える。

   If num = 1 Then

      str = "sheet1!A2:E51"

   ElseIf num = 2 Then

      str = "sheet1!G2:K51"

   Else

      str = "sheet1!M2:Q51"

   End If


   With ListBox1

      '項目を5列にする。

      .ColumnCount = 5

      '項目のサイズを指定する。

      .ColumnWidths = "20;30;30;30;30"

      '項目に見出しを表示する。

      .ColumnHeads = True

      'データを指定する。

      .RowSource = str

   End With

End Sub

sheet1のデータ(サンプル)

A~E列(51行まで連番)
ID コード 種類 個数 コメント
1 100100 果物 10 なし

2 100101 果物 11 なし


G~K列(51行まで連番)
ID コード 種類 個数 コメント
1 200100 野菜 60 なし
2 200101 野菜 61 なし


M~Q列(51行まで連番)

ID コード 種類 個数 コメント

1 300100 魚 110 なし

2 300101 魚 111 なし

  • リストボックスのIntegralHeightが有効になっていると、トグルボタンを押すたびにリストボックスが小さくなる。
  • IntegralHeightを無効にすると、リストボックスの一番最後のデータがうまく表示されない。

対策は、

  • トグルボタンを何度押しても小さくならない値をHeightに設定する。
  • 上の値の倍数だと近い数字になる。

Height=330.5(下のイメージ:左)

Height=82.65(下のイメージ:右)

※作成時と閲覧時で環境が違う場合、再調整が必要かもしれない。

0コメント

  • 1000 / 1000