■ ScrollBarコントロールについて詳しく知ろう
前回に引き続き、ExcelエクセルにおけるUserFormユーザーフォームの解説です。
今回は、ScrollBarコントロールオブジェクトの解説です。
ScrollBarコントロール (スクロールバー)オブジェクト
スクロールボックスの位置を移動させることで、他コントロールに値を設定します。値の取得も可能です。
既定のプロパティ:Valueプロパティ
既定のイベント:Changeイベント
■ ScrollBarコントロールオブジェクトのプロパティ
・BackColor:コントロールの背景色を設定します。背景色はRGB関数、整数、定数で指定することが可能です。
・ForeColor:コントロールの前景色を指定します。ScrollBarコントロールの場合、矢印の色に適用されます。
・ControlSource:コントロールのValueプロパティにリンクさせるExcelワークシートのセル範囲を指定します。
(例)
ScrollBar1.ControlSource = "a1"
この例では、ScrollBar1コントロールのValueプロパティがA1セルにリンクしています。ScrollBar1コントロールの初期値にA1セルの値が設定され、ScrollBar1コントロールの値を書き換えるとA1セルの値も変わります。 |
・ControlTipText:マウスポインタをコントロール上に置いたとき、表示する文字列を設定します。
・Delay:ScrollBarコントロールで、Changeイベントを発生させる際の遅延時間を設定します。
ScrollBarコントロールのボタンをクリックしたまま離さないでいると、Changeイベントが続けて発生しますが、Delayプロパティは、これらのイベントの発生間隔を設定します。クリックした直後は遅延なしにイベントが発生し、その後Delayプロパティの5倍の時間が経過してからイベントが発生します。この遅延時間については、イベントが連続発生することを防ぐため長めに設定されています。それ以降は設定値の間隔でイベントが発生します。
(例)
Dim MyLng As Long
Private Sub UserForm_Initialize()
ScrollBar1.Delay = 50
End Sub
Private Sub ScrollBar1_Change()
MyLng = MyLng + 1
ListBox1.AddItem MyLng
End Sub
この例では、ScrollBar1コントロールのボタンをクリックし続けたとき、ListBox1に「1」が表示されたあと、250ミリ秒後に「2」が表示され、以降50ミリ秒ごとに1づつ加算された数字が表示されます。 |
・Enabled:ScrollBar1コントロールの場合、Trueで通常の表示と操作ができます、Falseで淡色表示となり、イベントに応答しなくなります。
・Height、Width:コントロールの高さ、幅をポイント単位で指定します。
・Left、Top:コントロールの位置をフォーム左端、上端からの距離を基準に設定します。
・Max、Min:ScrollBarコントロールのValueプロパティに設定できる最大値と最小値を設定します。
・LargeChange:矢印ボタンとスクロールボックスの間をクリックしたときに移動するスクロール量を設定します。
・SmallChange:スクロール矢印をクリックしたときのスクロール量を設定します。
・Orientation:ScrollBarコントロールを垂直方向に配置するか、水平方向に配置するかを設定します。
fmOrientationAuto:-1 は、コントロールの大きさによって向きを自動判定させます (既定値)。
fmOrientationVertical:0 は、垂直方向に配置します。
fmOrientationHorizontal:1 は、水平方向に配置します。
・MousePointer、MouseIcon:コントロールの上にカーソルを置いたときに表示する形状を設定します。MouseIconはMousePointerが99-fmMousePointerCustomのときに、表示する画像をLoadPicture関数で読み込みます。
(例)
ScrollBar1.MousePointer = fmMousePointerHourGlass
この例では、コントロールにカーソルを合わせるとカーソル形状が砂時計に変更されます。 |
ScrollBar1.MousePointer = fmMousePointerCustom
ScrollBar1.MouseIcon = LoadPicture("C:\test.ico")
この例では、コントロールにカーソルを合わせるとC:\にあるtest.icoにカーソル形状が変更されます。 |
・Name:コントロールの名前を設定、取得します。
・Parent:指定したコントロールを含む親オブジェクトを操作します。
(例)
ScrollBar1.Parent.BackColor = vbRed
この例では、ScrollBar1コントロールが配置されている親オブジェクト(UserFormやFrameなど)の背景色を赤に変更します。 |
・ProportionalThumb:スクロールボックスのサイズをスクロール領域に合わせて可変にするか、固定するかを設定します。Trueでスクロール領域のサイズに比例させます(既定値)。Falseで固定にします。
スクロールボックスのサイズを可変にした場合、ウィンドウ内に表示されているオブジェクト部分のパーセンテージに従って表示します。固定にするとスクロールバーの高さと幅に従って自動的にサイズを決定します。
・Value:コントロールの状態を取得、設定します。ScrollBarコントロールでは、Maxプロパティの値とMinプロパティの値の間の整数値を表します。
・Tag:コントロールに補足的な情報(文字列)を設定、取得できます。
・TabIndex:タブオーダー内の順番を設定します。先頭のインデックスは0 です。
・TabStop:FalseにするとTab キーによるフォーカス移動の際、このオブジェクトをスキップします。
・Visible:オブジェクトの表示・非表示を設定します。Trueで表示、Falseで非表示です。
■ ScrollBarコントロールオブジェクトのメソッド
・Move:コントロールを移動します。
(例)
ScrollBar1.Move 100, 50, 200, 150
この例では、ScrollBar1コントロールをUserFormの左端から100、上端から50ポイントの位置に移動させ、幅200、高さ150ポイントで表示します。 |
・SetFocus:コントロールにフォーカスを移します。
・ZOrder:指定されたオブジェクトのZオーダーを変更します。fmTopでその他のコントロールの最前面に、fmBottomでその他のコントロールの最背面に表示します。
■ ScrollBarコントロールオブジェクトのイベント
・Change:スクロールボタンをクリックまたはスクロールボックスを動かしたときに発生します。
・Scroll:スクロールボックスを動かすと発生します。コードまたはスクロールボックス以外のクリックによって、コントロールの値が変更されたときにはScrollイベントは発生しません。
(例)
Dim MyLng As Long
Private Sub UserForm_Initialize()
ScrollBar1.Min = 0
ScrollBar1.Max = 100
End Sub
Private Sub ScrollBar1_Change()
Label1 = "現在のScrollBarの値 " & ScrollBar1
Label2 = "Changeイベントによって変化した値 " & (ScrollBar1 - MyLng)
MyLng = ScrollBar1
End Sub
Private Sub ScrollBar1_Scroll()
Label1 = "現在のScrollBarの値 " & ScrollBar1
Label2 = "Scrollイベントによって変化した値 " & (ScrollBar1 - MyLng)
MyLng = ScrollBar1
End Sub
この例では、0〜100の範囲でScrollBar1コントロールの値が変化します。スクロールボタンをクリックしたり、スクロールボックスを移動させたりすると、Label1コントロールに現在の値が、Label2コントロールに変化した値がそれぞれ表示されます。スクロールボタンをクリックした場合はScrollイベントは発生しませんが、スクロールボックスを移動させた場合はScrollイベントが発生します。 |
・AfterUpdate、BeforeUpdate:コントロールの文字列を変更した後、他のコントロールにフォーカスを移したときに発生します。AfterUpdateは実際にデータが変更された後に発生します。BeforeUpdateは変更を実際にデータが変更される前に発生するため引数CancelにTrueを設定すると、フォーカスは元のコントロールに残り、AfterUpdateイベントもExitイベントも発生しません。
(例)
Private Sub ScrollBar1_Change()
Debug.Print "Change"
End Sub
Private Sub ScrollBar1_AfterUpdate()
Debug.Print "AfterUpdate"
End Sub
Private Sub ScrollBar1_BeforeUpdate( _
ByVal Cancel As MSForms.ReturnBoolean _
)
Debug.Print "BeforeUpdate"
If ScrollBar1 < 100 Then
Cancel = True
End If
End Sub
この例では、ScrollBar1コントロールの値が変更されるたびにChangeイベントが発生します。他のコントロールにフォーカスを移す際、BeforeUpdateイベントでコントロールの値が100未満かどうかをチェックし、100未満であれば変更をキャンセルします。100以上の場合は、他のコントロールにフォーカスが移り、AfterUpdateイベントが発生します。 |
・Enter、Exit:Enterイベントは、同一フォーム上にある別のコントロールからフォーカスを受け取る前に発生します。Exit イベントは、同一フォーム上にある別のコントロールにフォーカスを移す前に発生します。
以上で、ScrollBarコントロールオブジェクトの解説を終わります。
次回は、SpinButtonコントロールオブジェクトの解説を行います。
|