dポイントプレゼントキャンペーン実施中!

UserFormにTextBoxがTextBox1からTextBox10の10個あり、すべて日付を入力します。

たとえば「12/10」と入力し、EnterもしくはTabキーなどで他のTextBoxにカーソルを移動させると
「2008/12/15」と前に年を表示させたいと思っています。

もし、日付ではないものを入力された場合は、エラーメッセージを表示したいと思っています。

日付入力はTextBox1から順に入力していくのですが、いつも10個すべてのTextBoxが入力される
わけではありません。(TextBox1~TextBox3のみ入力などがあります。)

どのようにしたら日付データ「12/10」と入力したら自動的に「2008/12/10」と年を追加させる
ことができ、日付データではない場合はエラー表示することができるのでしょうか。
(「2008/12/10」と入力された場合は、そのまま表示)

ご教授のほど、よろしくお願いします。

A 回答 (4件)

こんな感じでいいんじゃないかな


#2さんのと被ってるけど^^;

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Dim tmp As String
  Cancel = validateDateString(Me.TextBox1.Text, tmp)
  Me.TextBox1.Text = tmp
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Dim tmp As String
  Cancel = validateDateString(Me.TextBox2.Text, tmp)
  Me.TextBox2.Text = tmp
End Sub

Private Function validateDateString(dateString As String, ByRef resultString As String) As Boolean
  validateDateString = False
  dateString = Trim(dateString)
  If Len(dateString) = 0 Then
    resultString = vbNullString
  ElseIf IsDate(dateString) Then
    resultString = Format(CDate(dateString), "yyyy/mm/dd")
  Else
    MsgBox "日付を入力してください", vbExclamation
    resultString = dateString
    validateDateString = True
  End If
End Function
    • good
    • 0

日付チェックを始めるきっかけは、何を使うか、はっきり認識すべきです。


(1)入力完了済みの意志のコマンドボタンのクリック
(2)テキストボックスのイベント
など
ーー
12/10を2808/12/10と解するのはたやすいが、実際には危険を伴う。2009年になったらどうする。
・操作時の年
・毎年初プログラムを手直し
なども有ると思うが、やはり年は1箇所か、全テキストボックスに入れるべきではないかな。10個とも日付年がそろうものかな。
ーー
日付として、日付シリアル値数的・カレンダー的に有効かどうかはIsDate関数が有る
Sub test01()
If IsDate(Cells(1, "A")) = True Then
MsgBox "日付OK"
Else
MsgBox "日付NO"
End If
End Sub
0,13月、33日などチェックしてくれる。
ーーー
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
t = "2008/" & UserForm1.TextBox1.Text
If IsDate(t) = True Then
MsgBox "日付1 OK"
Else
MsgBox "日付1 NO"
End If
End Sub
ーーーーー
これは1つのテキストボックス対応だけだが、VBAでは、とりあえずは各テキストに対応した10個似たものを並べてください。
将来1つのルーチンで済ます方法を勉強してください。
    • good
    • 0

日付かどうかをチェックし、日付なら編集後の文字列を返し、


日付として不正ならエラーメッセージを表示して、空文字列を
返す関数の例

Function 日付検査(ByVal 文字列 As String) As String
  If Trim(文字列) = "" Then Exit Function '空文字列は許可
  If IsDate(文字列) Then
    日付検査 = Format(CDate(文字列), "YYYY/MM/DD")
  Else
    MsgBox "日付として不正です", vbCritical, "日付エラー"
  End If
End Function
    • good
    • 0

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)


Dim a As Date
If TextBox1.Text = "" Then Exit Sub
On Error GoTo ErrorHandler
a = TextBox1.Text
If a < #1/1/2000# Then GoTo ErrorHandler
TextBox1.Text = a
Exit Sub
ErrorHandler:
TextBox1.Text = ""
MsgBox "error"
Cancel = True
End Sub

完全ではないので、参考までに
特に日付関係はムズイ
もっと条件を絞らないとエラーの回避は出来ないと思う
月と日を分けて別々のtextboxに入力させた方がエラー対処がしやすいと思う
他の入力方法としてカレンダコントロールを使用するのが良いかも
マウスで入力できるし、エラー処理も殆んどしなくてよいと思うよ
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!