ワークシートの変更イベントでこのコードスニペットを使用していますが、そのように発射する必要はありません。VBAでケースステートメントが正しく動作していない理由がわかりません
If Not Intersect(Target, rng6) Is Nothing Then
Select Case IsDate(Target.Value)
Case False
Target.NumberFormat = "m/yyyy"
Target = Empty
Case True
If Format(Target.Value, "m/yyyy") < Format(Now, "m/yyyy") Then
MsgBox "Must not be less than" & vbLf & "current month & year !", vbExclamation, "Warning.."
Target.Value = Format(Now, "m/yyyy")
Else
Target.NumberFormat = "m/yyyy"
MsgBox Format(Target.Value, "m/yyyy") & " " & Format(Now, "m/yyyy")
End If
End Select
End If
FALSEセクションは正しく機能していますが、TRUEになり、ifステートメントを実行すると、どちらか一方のみが返されます。
たとえば、私は01/2017の入力をテストし、IFの最初の部分を返しますが、10/2017に入力すると、最初の部分ALSOが返され、今日のM/YYYYに変換されます。今日のm/yyyyは今日のm/yyyよりも大きいので、それはすべきです。
エラーが何であるかは誰でも確認できますか? /あなたがいないNow
で、Date
で今日の日付を取得する必要があり
おかげ
に私はあなたのフォーマットを使用して日付を比較していないお勧めしますが、DateDiff関数を使用して。 –
単純な 'if'文がするときに' Select Case'を使うのはなぜですか? – FunThomas
なぜブール値の2つの可能な値すべてをチェックするために 'Select Case'を使用していますか? If IsDate(Target.Value)... Else ... End Select'のような何かをするだけですか? @FunThomasあなたはもっと速かったです... – deHaar