|
▼こぼらー さん:
こんばんは。
>
>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を実行してみてください。
・実行すると、チェックボックスの作成数を求められますから、指定してください。
・フレーム内に指定した数のチェックボックスが作成されます。
・フレームのスクロールバーの操作ですべてのチェックボックスの表示が可能になっています。
・コマンドボタンをクリックして、作成したチェックボックスの数以内の数字を
指定してください。
・指定された数字に相当するチェックボックスが表示されるはずです。
こんなことができればよいのでしょうか?
|
|