Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8597 / 13644 ツリー ←次へ | 前へ→

【32373】フレームとチェックボックスとスクロールバーの連動 こぼらー 05/12/13(火) 15:26 質問[未読]
【32382】Re:フレームとチェックボックスとスクロー... ichinose 05/12/13(火) 19:16 発言[未読]
【32383】Re:フレームとチェックボックスとスクロー... こぼらー 05/12/13(火) 19:49 お礼[未読]
【32384】Re:フレームとチェックボックスとスクロー... ichinose 05/12/13(火) 20:03 発言[未読]

【32373】フレームとチェックボックスとスクロール...
質問  こぼらー  - 05/12/13(火) 15:26 -

引用なし
パスワード
   早速質問させていただきます。

1.ユーザフォーム上にフレームを配置
2.フレーム上にチェックボックスを配置
3.フレーム上にスクロールバーを配置

上記の場合にフォーム上でスクロールバーをスクロールさせたときに、
どのようにするとチェックボックスも同様にスクロールされるのでしょうか?

その辺りの連動がよくわかりませんでした。

モジュールで
スクロール幅によってチェックボックスを表示したり、非表示にしたりしなくてはならないのでしょうか?

ちょっと説明が難しくわかりにくいかもしれませんが、よろしくお願いいたします。

【32382】Re:フレームとチェックボックスとスクロ...
発言  ichinose  - 05/12/13(火) 19:16 -

引用なし
パスワード
   ▼こぼらー さん:
こんばんは。
>
>1.ユーザフォーム上にフレームを配置
>2.フレーム上にチェックボックスを配置
>3.フレーム上にスクロールバーを配置
>
>上記の場合にフォーム上でスクロールバーをスクロールさせたときに、
>どのようにするとチェックボックスも同様にスクロールされるのでしょうか?
>
>その辺りの連動がよくわかりませんでした。
新規ブックにユーザーフォームのみ(Userform1)を作成してください。
このフォームモジュールに


'========================================
Private WithEvents btn As MSForms.CommandButton
Private chkbx() As MSForms.CheckBox
Private chkcnt As Variant
'==============================================================
Private Sub UserForm_Initialize()
  chkcnt = Application.InputBox("チェックボックスの数を入力", , , , , , , 1)
  If TypeName(chkcnt) <> "Boolean" Then
    If chkcnt > 0 Then
     ReDim chkbx(1 To chkcnt)
     With Controls.Add("Forms.Frame.1")
       .Top = 10
       .Left = 30
       .Height = 280
       .Width = 250
       .ScrollBars = 2
       For idx = 1 To chkcnt
        Set chkbx(idx) = .Controls.Add("Forms.CheckBox.1", "Frame1")
        With chkbx(idx)
          .Top = (idx - 1) * 50 + 10
          .Left = 15
          .Height = 16
          .Font.Name = "MS ゴシック"
          .Font.Size = 16
          .Caption = "チェックボックス" & idx
          .AutoSize = True
          End With
        Next idx
      .ScrollHeight = chkcnt * 50 + 30
      End With
     Set btn = Controls.Add("Forms.CommandButton.1")
     With btn
       .Top = 10
       .Left = 300
       .Width = 50
       .Height = 30
       .Caption = "スクロール"
       End With
     With Me
      .Width = 400
      .Height = 350
      End With
     End If
    End If
End Sub
'======================================================
Private Sub btn_Click()
  Dim chknum As Variant
  chknum = Application.InputBox("スクロールして表示したいチェックボックスの番号を指定してください", , , , , , , 1)
  If TypeName(chknum) <> "Boolean" Then
    If chknum > 0 And chknum <= chkcnt Then
     Controls("frame1").ScrollTop = chkbx(chknum).Top
    Else
     MsgBox "指定に誤りがあります"
     End If
    End If
End Sub
'======================================================
Private Sub UserForm_Terminate()
  Erase chkbx()
End Sub


標準モジュールに
'================================================
Sub main()
  UserForm1.Show
End Sub

として、mainを実行してみてください。

・実行すると、チェックボックスの作成数を求められますから、指定してください。

・フレーム内に指定した数のチェックボックスが作成されます。

・フレームのスクロールバーの操作ですべてのチェックボックスの表示が可能になっています。

・コマンドボタンをクリックして、作成したチェックボックスの数以内の数字を
指定してください。

・指定された数字に相当するチェックボックスが表示されるはずです。


こんなことができればよいのでしょうか?

【32383】Re:フレームとチェックボックスとスクロ...
お礼  こぼらー  - 05/12/13(火) 19:49 -

引用なし
パスワード
   ichinoseさん

とりあえず実行してみました。
ばっちりです!!

いまからコードを順にみていきます。
大変勉強になりました。
ほんとうにありがとうございました。

【32384】Re:フレームとチェックボックスとスクロ...
発言  ichinose  - 05/12/13(火) 20:03 -

引用なし
パスワード
   以下のフォームのイベントプロシジャーだけ差しかえてください

'======================================
Private Sub UserForm_Initialize()
  chkcnt = Application.InputBox("チェックボックスの数を入力", , , , , , , 1)
  If TypeName(chkcnt) <> "Boolean" Then
    If chkcnt > 0 Then
     ReDim chkbx(1 To chkcnt)
     With Controls.Add("Forms.Frame.1", "Frame1")
       .Top = 10
       .Left = 30
       .Height = 280
       .Width = 250
       .ScrollBars = 2
       For idx = 1 To chkcnt
        Set chkbx(idx) = .Controls.Add("Forms.CheckBox.1")
        With chkbx(idx)
          .Top = (idx - 1) * 50 + 10
          .Left = 15
          .Height = 16
          .Font.Name = "MS ゴシック"
          .Font.Size = 16
          .Caption = "チェックボックス" & idx
          .AutoSize = True
          End With
        Next idx
      .ScrollHeight = chkcnt * 50 + 30
      End With
     Set btn = Controls.Add("Forms.CommandButton.1")
     With btn
       .Top = 10
       .Left = 300
       .Width = 50
       .Height = 30
       .Caption = "スクロール"
       End With
     With Me
      .Width = 400
      .Height = 350
      End With
     End If
    End If
End Sub

8597 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free