|
おはようございます。
>それぞれ年と月の増減をさせようと考え以下のように
>コードを書いたのですが、どうも力業のような感じで
コードを少しでも少なくしたいと言うことでしたら
使用可能なプロパティを活用する方法もあります。
新規ブックのユーザ―フォーム(Userform1)に
Textbox1---年入力表示用(西暦)
SpinButton1---Textbox1の値の上下の変更用
Textbox2---月入力表示用(1〜12)
SpinButton2---Textbox2の値の上下の変更用
を配置してください。
コントロールのプロパティは既定値のままで変更しないで下さい。
他には、Sheet1というシート名を持つシートのセルA1とA2を使用します。
上記のUserform1のモジュールに
'=================================================================
Private Sub SpinButton1_Change()
TextBox1.Value = SpinButton1.Value
End Sub
'=================================================================
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
Cancel = True
If IsNumeric(.Text) Then
If Val(.Text) >= 1900 And Val(.Text) <= 9999 Then
Cancel = False
End If
End If
End With
End Sub
'=================================================================
Private Sub SpinButton2_Change()
TextBox2.Value = SpinButton2.Value
End Sub
'=================================================================
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox2
Cancel = True
If IsNumeric(.Text) Then
If Val(.Text) >= 1 And Val(.Text) <= 12 Then
Cancel = False
End If
End If
End With
End Sub
'=================================================================
Private Sub UserForm_Initialize()
With Worksheets("sheet1")
.Range("a1").Value = Year(Date)
.Range("a2").Value = Month(Date)
End With
With SpinButton1
.Max = 9999
.Min = 1900
.ControlSource = "=sheet1!a1"
End With
TextBox1.ControlSource = "=sheet1!a1"
TextBox2.ControlSource = "=sheet1!a2"
With SpinButton2
.Max = 12
.Min = 1
.ControlSource = "=sheet1!a2"
End With
End Sub
これでUserform1を表示させて試してみて下さい。
尚、UserForm_Initializeイベントで記述しているコードは、
事前にプロパティ設定が可能です。
が、結構スピンボタンのControlSourceの指定に苦慮しました。
ControlSourceに指定するセルの値が
Min、Maxプロパティの範囲を逸脱した値が入っていたりすると
ControlSourceが指定できないので注意して下さい。
コツとしては、UserForm_Initializeで
コードで設定している順序でプロパティを設定することです。
試してみて下さい。
|
|