アプリ版:「スタンプのみでお礼する」機能のリリースについて

ACCESS2000にて、フィールドの入力規則で「うるう年」のチェックをしたいです。

値のチェックはしますが、チェックした値の入力も許可したいのですが、それができてません。

例えば2012/2/28、2016/2/28などは「うるう年ですけど、2/29じゃなくて大丈夫ですか?」
のような警告をし、入力しているユーザーが2/28で大丈夫であれば、2/28も入力可能
2/29に修正が必要であれば、ユーザーが手動で2/29と入力し直す、としたいです。

テクストボックスの入力規則で制限してしまうと、警告は出るものの、
その禁止した値は入力ができません。

マクロでも良いです。

VBAは得意でないので。。
フィールド名やフォーム名を変えればそのまま貼付られるような感じで
お教え頂けるとありがたいです。

どうかお知恵お貸し下さい。
宜しくお願い致します。

A 回答 (4件)

VBAしかわかりませんが、月末処理が多いのなら、



月末であるかどうか判定するファンクションをつくり、
Function endofmonth(hDate) As Boolean
endofmonth = False
tyear = Year(hDate)
tmonth = Month(hDate)
If hDate = DateSerial(tyear, tmonth, 0) Then endofmonth = True
End function
コントロールの更新後処理などで、メッセージを出すのが楽。
Private Sub テキスト0_AfterUpdate()
If endofmonth(text0) <> True Then
MsgBox "月末ではありません"
End If
End Sub
あくまでもメッセージを出すだけなので、フォーカスの移動などに関してはちょっと配慮が必要。

月末処理が特に多くないなら、うるう年だけのために判定組み込むのはめんどくさいので、
何らかのカレンダーコントロールで入力させたらどうだろう。
    • good
    • 0

> 例えば2012/2/28、2016/2/28などは「うるう年ですけど、2/29じゃなくて大丈夫ですか?」


> のような警告をし、入力しているユーザーが2/28で大丈夫であれば、2/28も入力可能
> 2/29に修正が必要であれば、ユーザーが手動で2/29と入力し直す、としたいです。

下記の関数を標準モジュールに作成します。

'閏年がどうか判定する関数
Public Function IsLeapYear(aYear As Long) As Boolean
  IsLeapYear = Month(DateSerial(aYear, 2, 29)) = Month(DateSerial(aYear, 2, 28))
End Function


テキストボックスの更新前処理に、

Private Sub テキスト7_BeforeUpdate(Cancel As Integer)
  If Format(Me.テキスト7.Text, "mdd") = "228" And IsLeapYear(Year(Me.テキスト7.Text)) Then
    If MsgBox("閏年ですけど、2/29じゃなくて大丈夫ですか?", vbYesNo) = vbNo Then
      Cancel = True
    End If
  End If
End Sub

以上でどうでしょうか。
    • good
    • 0

Public Function IsLeapYear(aYear As Long) As Boolean


  IsLeapYear = Month(DateSerial(aYear, 2, 29)) = _
         Month(DateSerial(aYear, 2, 28))
End Function



Private Sub テキスト7_BeforeUpdate(Cancel As Integer)
Const cMsg = "閏年ですけど、2/29じゃなくて大丈夫ですか?"

  If Format(Me.テキスト7.Text, "mdd") = "228" And _
    IsLeapYear(Year(Me.テキスト7.Text)) Then
    If MsgBox(cMsg, vbYesNo) = vbNo Then
      Cancel = True
    End If
  End If
End Sub
    • good
    • 0

閏年判定関数は下記でもいいですね。



Public Function IsLeapYear(aYear As Long) As Boolean
  IsLeapYear = IsDate(aYear & "/2/29")
End Function
    • good
    • 0
この回答へのお礼

完璧です!
ちゃんとうるう年だけ判定出来るようになりました。
早急に回答頂き、大変助かりました。
ありがとうございました。

お礼日時:2011/08/31 01:05

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

関連するカテゴリからQ&Aを探す