ユーザーフォーム 第12回 スピンボタン

ユーザーフォーム

スピンボタンの使い方

 スピンボタンは上下の▲▼マークで指定したテキストボックスなどの値を変化させたい時に使用します。
 上下の▲▼マークにはそれぞれ SpinUp, SpinDown というイベントプロシージャが用意されていますので、そこに処理を書けばOKです。
 
 ただ、テキストボックスは文字列ですので、そのままでは上手くいかない事があります。
今回はユーザーフォームに数値型のグローバル変数を設けておいて、保持した値に対して増減を行って表示させます。

使い方

 1.値を表示するテキストボックスを用意し、そこにスピンボタンを配置します。

 配置したコントロールのオブジェクト名は以下の通りです。
 
 ユーザーフォーム(UserForm1)
 表示用テキストボックス(TextBox1)
 スピンボタン(SpinButton1)
 ラベル(Label1)
 コマンドボタン(CommandButton1)

 2.グローバル変数を用意します。
 今回はユーザーフォーム内でのみ使用するので、Private で宣言します。
 ユーザーフォームモジュールに記述します。

 3.ユーザーフォームの初期化イベントにコードを書きます。
 グローバル変数の初期値、表示用テキストボックスの初期値などを書きます。
 今回は「年」の表示にします。
 ユーザーフォームのコード画面の上部のタブの右で、UserForm1 を選択。右のタブで Initialize を選択してイベントプロシージャを表示させます。
プログラムは以下の通りです。

Private Sub UserForm_Initialize()
    Dim d As Date
    d = Date       '今日の値を得る
    myYear = Year(d)  '年の値を得る
    Me.TextBox1.Text = myYear
End Sub 

 最初に日付型を宣言し、次にその変数にDate関数で今日の日付を入れます。
 次に日付のデータからYear関数で「年」の値を取りだして、先ほど宣言したグローバル変数(myYear)に代入します。
 最後にテキストボックスにグローバル変数の値を代入します。

 4.スピンボタンのイベントを追加します。
 ユーザーフォームのコード画面の上部のタブの右で、SpinButton1 を選択。右のタブで SpinDown と SpinUp を選択してイベントプロシージャを表示させます。

Private Sub SpinButton1_SpinDown()
    myYear = myYear + 1
    Me.TextBox1.Text = myYear
End Sub

Private Sub SpinButton1_SpinUp()
    myYear = myYear - 1
    Me.TextBox1.Text = myYear
End Sub

 上下の▲▼マークを押すとそれぞれ SpinUp, SpinDown が実行されます。
 グローバル変数の値を増減させて、テキストボックスで表示させています。

 5.コマンドボタンクリックで値を表示させます。
  今回は、ボタンを押すことで値をメッセージボックスに表示させます。
  値はグローバル変数ではなくテキストボックスの値を使用しましょう
 ユーザーフォームのコード画面の上部のタブの右で、CommandButton1 を選択。右のタブで Click を選択してイベントプロシージャを表示させます。

Private Sub CommandButton1_Click()
    MsgBox Me.TextBox1
End Sub

考えられるエラーに対応する

 テキストボックスはそのままの状態では、自由に編集できてしまいます。
 勝手に編集できないようにするためには、
 Lockedプロパティ入力禁止にするか、
 Enabledプロパティ編集禁止にする必要があります。

 今回はLockedプロパティを使って入力不可にします。
TextBox1のプロパティウインドウから Locked プロパティを「True」に変更します。


 これで、表示用テキストボックスはユーザーの直接編集を回避してグローバル変数の値でコントロールできるようになります。

まとめ

 スピンボタンの使い方自体は、上下の▲▼マークを押した時の SpinUp, SpinDown というイベントプロシージャに記述するだけなので難しくはありません。
 ただ、表示するテキストボックスの値は文字列なので、変換するための整数型の変数が必要になります。
 また、テキストボックスは勝手に編集できてしまうので、制限をかけなければなりません。
 
 このように、スピンボタンの使い方よりも表示用のテキストボックスの扱いの方が大変になると考えた方が良いでしょう。
 
 今回はグローバル変数を使用しましたが、テキストボックスの値を整数型に変換して処理する方法もあるでしょう。
 やり方は1つではありませんので、色々な方法を試してみましょう。

タイトルとURLをコピーしました