- 締切済み
ExcelのExitイベントについて
こんにちは。 Excel VBA初心者です。 Formを作成し、Form上に、テキストをいくつか配置しています。 日付を入力するテキストが2つあり、それぞれ、以下の名前にしています。 オブジェクト名:txt開始日、txt入力日 3つVBAで設定をしたのですが、(2)がうまく動きません。 (1)年を入力しなくても、自動的に年(4ケタ表示)を表示する。→これは、どこかのサイトで、紹介されていた物を使用させて頂いています。 (2)txt開始日に日付を入力し、txt入力日に入力した日付より大きかったら、 MsgBOXを表示し、txt入力日の値を空白にし、再度入力するようにする (3)txt開始日が空白で、txt入力日に入力は可。 (2)が、私の作成したコードだと、うまく動かず、 ちゃんとtxt開始日<txt入力日で入力していても、 MsgBOXのメッセージが出てしまったり、 MsgBOXが表示され、再度、txt入力日に、 txt開始日<txt入力日になる値を入力しても、 同じMsgBOXが出てしまいます。 どなたか解決策を教えて頂けますでしょうか。 よろしくお願いします。 ------------------------------------------------- ------------------------------------------------- Private Sub txt予定日_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim dteDate As Date If txt予定日.Value = "" Then txt予定日.Value = "" Exit Sub End If If IsNumeric(Left$(txt予定日, 4)) <> True Then txt予定日 = Year(Date) & "/" & txt予定日 End If If IsDate(txt予定日) = True Then dteDate = CDate(txt予定日) ' 実数はTagに格納 txt予定日.Tag = CLng(dteDate) Else MsgBox "予定日入力ミスです。再度入力してください。" End If If txt確認日.Value <> "" And txt予定日.Value <> "" And txt確認日.Value > txt予定日.Value Then MsgBox "予定日と確認日の日付に間違いがあります~。再入力お願いします。" txt予定日.Value = "" Cancel = True Exit Sub End If End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TAKA_R
- ベストアンサー率32% (26/79)
私も初心者みたいなものなので、間違っていたらごめんなさい。 このイベントは使ったことはありませんが、 原因はデータ型(日付)にあると思います。 はじめに取得する「txt予定日」のデータ型は文字列でしょうか、それとも日付でしょうか。 >>IsNumeric(Left$(txt予定日, 4)) から、コードを読む限り、文字列と考えていると思います。 もし日付の場合、シリアル番号になっているので、このIF文が成り立たないというか・・・。 >>IsDate(txt予定日) = True でもその後のIF文では、いきなり日付になってますね。 中身のデータが書き換えられても、変数のデータ型そのものを変えてやらないと(関数とかで)勝手に変わることはできないです。 とりあえずIF文ごとの要所要所に「MSGBOX TYPENAME(txt予定日)」を入れてデータ型を確認したり、変数「txt予定日」に何が入っているか確認していってみては?
- nao-y
- ベストアンサー率58% (111/190)
特に問題ないように思えますが。。。 ところで質問文中では、 > オブジェクト名:txt開始日、txt入力日 となっていますが、提示されているソースコードは txt確認日、txt予定日 となっています。 提示されるコードが間違っているということはありませんか?
お礼
nao-y様 ご回答ありがとうございます。 確認日=開始日です。私の入力間違いです。ごめんなさい。 問題ないように見えますか・・・。 予定日を先に入力し、確認日に入力日より大きい日付を入力し、 tab(orEnter)で、確認日→予定日→別のテキストに移動しても、 Messageが出ないんです・・・。 別の方法を考えます。ありがとうございました!
お礼
TAKA_Rさん ご返答ありがとうございます。 色々、別のサイトで調べた所、textboxの値は、あくまでもテキストで、 日付と認識させるには、自分で指定をしないといけないみたいですね。 予定日を先に入力し、確認日を後に入力すると、 確認日>予定日であっても、Exitできてしまうんです…。 vbaは奥が深いですね。 もう少し、自分で方法を探してみます。