|
▼年寄り さん:
おはようございます。
>新規ブックに
>Userform1を作成し、Textbox1とCommandbutton1を作成してください。
>同じように
>Userform2を作成し、Textbox1とCommandbutton1を作成してください
>
>Userform1のモジュールに
>'============================
>Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
> If Not IsNumeric(TextBox1.Text) Then
> MsgBox "数字だけだよ"
> Cancel = True
> End If
>End Sub
>'=========================
>Private Sub UserForm_Initialize()
With TextBox1
.ControlSource = "sheet1!a1"
.Text = "123"
End With
>End Sub
>
>
>Useform2のモジュールに
>'===========================================
>Dim svcancel As Boolean
>'===========================================
>Private Sub TextBox1_AfterUpdate()
> If Not IsNumeric(TextBox1.Text) Then
> MsgBox "数字だけ"
> svcancel = True
> Else
> svcancel = False
> End If
>End Sub
>'==============================================================
>Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
> Cancel = svcancel
> svcancel = False
>End Sub
>'==============================================================
>Private Sub UserForm_Initialize()
> svcancel = False
With TextBox1
.ControlSource = "sheet1!a1"
.Text = "123"
End With
>End Sub
>
>
>このふたつのユーザーフォームで
>TextBox1に数字以外をしてしみてください。
>表示の違いとコードをよく見比べてみてください。
>Cancel=Trueとしたときの後の動作に違いが出てきます。
失礼しました。コードを上記のように訂正しないと
違いがみられません。
(事前にフォームのプロパティを変更していたことを忘れてました)
テキストボックスの変更を反映する前に発生するのがBeforeupdate、
反映後に発生するのがAfterUpdateですよね。
ControlSourceに指定したセルを使用すれば、
BoforeUpdateの場合は、上記の理由で値を元に戻せるのです(Cancel=True時)。
投稿漏れに今の今まで気が付きませんでした。
大変、失礼しました。
|
|