• ベストアンサー

TextBoxに日付を自動的に入れる

VBAについて教えて下さい! 今、UserFormに「TextBox1」,「TextBox2」,「TextBox3」,「CommandButton1」があります。 「TextBox1」には自動的に年"yy"(上書き修正も出来るようにする) 「TextBox2」には自動的に月"mm"(上書き修正も出来るようにする) 「TextBox3」には自動的に日"dd"(上書き修正も出来るようにする) が入るようにして 「CommandButton1」をクリックすることによりExcelの「A1」に"yy/mm/dd" と言う形で自動的に入力することは出来ないでしょうか? また、その時にありえない日にちが入力された時にエラーが出て、「TextBox3」にカーソルが戻るようなことは出来ないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Private Sub CommandButton1_Click() If IsDate(TextBox1 & "/" & TextBox2 & "/" & TextBox3) = False Then TextBox3.SetFocus Else Range("A1") = "'" & TextBox1 & "/" & TextBox2 & "/" & TextBox3 End If End Sub Private Sub UserForm_Activate() TextBox1 = Format$(Now(), "yy") TextBox2 = Format$(Now(), "mm") TextBox3 = Format$(Now(), "dd") End Sub

noname#168961
質問者

お礼

出来ました!有難うございます!

その他の回答 (1)

  • HIROs-NET
  • ベストアンサー率78% (15/19)
回答No.2

まず、自動的に年月日を取得し、それぞれのテキストボックスへ入るようにするには、フォームのイニシャライズ時に下記のように行えばよいかと思います。 Private Sub UserForm_Initialize() TextBox1.Text = Format(Now, "YY") TextBox2.Text = Format(Now, "MM") TextBox3.Text = Format(Now, "DD") End Sub Nowは現在日時を示しており、Format関数を使用することで、年、月、日を取り出しています。このときYYやMM,DDとすることで2桁で値を取得することができます。 つぎに、ボタンが押されたときの処理ですが Private Sub CommandButton1_Click() Cells(1, 1) = Format(TextBox1.Text & "/" & TextBox2.Text & "/" & TextBox3.Text, "yy/mm/dd") End Sub といった感じでしょうか 「あり得ない日にちが入力された時にエラーが出て」とありますが、何を持ってあり得ないとするのでしょうか? たとえば1900年以前はあり得ないとする等... (この辺はご自分でどう処理したいかを考えコードに置き換えてみてください。その上でわからなければ、どういった処理を作成しようとしてどこで躓いたのかを教えてください) 最後に、TextBox3へカーソルを戻す方法ですが Textox3.SetFocus と記述することで実現可能です。

noname#168961
質問者

お礼

出来きました。 ありえない日付ですが、「08/02/30」とか「08/03/32」と手入力したときに注意を促すコメントがでればと思ったのですが、とりあえず上記の回答で何とかなりそうです。 有難うございました。

関連するQ&A

専門家に質問してみよう