問題は複雑です。あなたの質問には実際に2つのステップがあります:
txtStartDate
は実際に有効な日付ですか?
- 日付であれば、正しくフォーマットされていますか?
txtStartDate
の名前は、日付を(フォームで)テキストとして取得していることを意味します。しかし、txtStartDate
が実際に日付であるという前提で、関数に渡しています。これは、関数dateCheck
が日付を期待しているので明らかになります:Function dateCheck(dateValue As Date) As Boolean
。
だから、ここ一度に両方を解決するためのソリューション提案です:
Sub tmpTest()
Dim txtStartDate As String
txtStartDate = "11/20/2015"
Debug.Print dateCheck(txtStartDate)
End Sub
Function dateCheck(dateValue As String) As Boolean
If IIf(IsDate(txtStartDate), Format(CDate(txtStartDate), "mm/dd/yyyy"), "") = dateValue Then dateCheck = True
End Function
が、これは国際的な日付形式のために動作しません非常に単純なアプローチであることに留意してください。実際には、私はあなたの日付形式を持っていないので、少し調整する必要があります。より洗練されたものが必要な場合は、VBAコード(広範な検証機能を含む)をもう少し書く必要があります。
あなたは[VBA機能](https://msdn.microsoft.com/en-us/library/office/gg278584%28v=office.15%29.aspx) 'IsDate'を知っていますか? – Ralph
はい、私はそれを認識しています。 – kruk22
ユーザーは2016年1月5日を意味する05/01/2016を入力できますが、ユーザーフォームは2016年5月1日と解釈されます。すべての異常を避け、ユーザーが好きな形式で入力できるようにしますが、入力された日付を常に「dd-mmm-yyyy」形式に変更します。 Excelはローカライズされた形式を認識し、それに従って適切な形式に変更することができます。 – Rosetta