スピンボタンは、簡単に使えて便利ですが、そのイベントがどんなタイミングでどんな順番で発生するのか、その時にValueプロパティの値はどうなっているのか、調べてみました。
以下、ユーザーフォームのコードと、それに連携した標準モジュールのコードです。とても素直に書いていますので、とくに解説はしません。
SpinButton には、けっこうたくさんのイベントが定義されていますが、とりあえずは Change、SpinUp、SpinDpwn が使えればたいていの用が足りると思いますので、この3つのイベントを対象としました。
フォーム SpinTestForm
'----- コマンドボタン
Private Sub CommandButton1_Click()
Start
End Sub
Private Sub CommandButton2_Click()
SetMinMax
End Sub
'----- スピンボタン
Private Sub SpinButton1_Change()
Record "Change"
End Sub
Private Sub SpinButton1_SpinDown()
Record "SpinDown"
End Sub
Private Sub SpinButton1_SpinUp()
Record "SpinUp"
End Sub標準モジュール RecordModule
Private index As Long
Private button As Object
'----- ここから実行開始
Public Sub ShowForm()
Start
SpinTestForm.Show vbModeless
End Sub
'----- フォーム上の START ボタンの実行マクロ
Public Sub Start()
ActiveSheet.Cells.Clear
index = 3
Set button = SpinTestForm.SpinButton1
End Sub
'----- フォーム上の SETMINMAX ボタンの実行マクロ
Public Sub SetMinMax()
button.Min = 10
button.Max = 15
End Sub
'----- イベントの種類と、発生時の Value プロパティを記録
Public Sub Record(eventName)
With ActiveSheet.Cells(index, 1)
.Offset(0, 0).Value = button.Value
.Offset(0, 1).Value = eventName
End With
index = index + 1
End Sub
結果をまとめると、次のようになっているようです。
① Value 値が変化した場合にのみ、SpinUp / SpinDown に先だって Change イベントが発生する。
② Value 値が変化するのは、SpinUp / SpinDown ボタンによって増減した場合と、Min / Max 値を変更して Value 値がその範囲を逸脱したために強制的に範囲内の値に修正された場合。
③ SpinUp / SpinDown のイベントは、該当するボタンをクリックするたびに Value 値の変化に関係なく発生する。
ついでに、Min、Max、Value の初期値は、それぞれ 0、100、0 になっているようです。
Min > Max で上下限値を設定すると、三角ボタンによる Value の増減方向は逆になります。