0

Excel 2007 の特定のセルに対して VBA で変更イベントを開発しています。これらのセルに入力された 2 つの異なる形式の日付 (時刻付き) を 1 つの形式 (アメリカ式) に変換したいと考えています。

入力された日付が2つの目的の形式のいずれかであるかどうかを確認するコードは次のとおりです。crmdate は、ActiveCell の文字列値です。

    If RegexServiceManager.test(crmdate) Then
        outputDate = Format(CDate(crmdate), "MM/dd/yyyy hh:mm")
        Application.EnableEvents = False
        ActiveCell.Value = outputDate
        ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm"
        Application.EnableEvents = True
    ElseIf RegexSiebel.test(crmdate) Then
        outputDate = CDate(crmdate)
        Application.EnableEvents = False
        ActiveCell.Value = outputDate
        ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm"
        Application.EnableEvents = True
    Else
        MsgBox "Inapropriate date and time format"
    End If

RegexServiceManager は、日付が YYYY/MM/DD HH:MM:SS 形式であるかどうかをチェックし、これは正常に機能します。RegexSiebel は、日付が int DD-MMM-YYYY HH:MM 形式であるかどうかをチェックします。これが問題の始まりです。

オンラインで「タイプの不一致」エラーが発生しoutputDate = CDate(crmdate)ます。エラーが CDate によるものであることを確認するために、上の "If" のような Format メソッドを削除しました。

誰でもこれについてアドバイスできますか?CDate は DD-MMM-YYYY (例: 01-Jan-2013) 形式を認識しないのでしょうか? もしそうなら、誰かが回避策を提案できますか?

ターゲット形式は MM/DD/YYYY HH:MM です。

よろしくお願いいたします。

マチェイ

編集:

outputDate は日付形式です!

4

1 に答える 1

0

私は答えを見つけたと思います。少しばかげていますが、上記のコードはポーランドの地域設定では機能しません。アメリカ (そしておそらくイギリスも) の地域設定で問題なく動作します。

また、outputDate を Variant 型に変更しました。

私はこれで終わった:

    If RegexServiceManager.test(crmdate) Then
        MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate)
        outputDate = CDate(crmdate)
        MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate)
        Application.EnableEvents = False
        ActiveCell.Value = outputDate
        ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm"
        Application.EnableEvents = True
    ElseIf RegexSiebel.test(crmdate) Then
        MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate)
        outputDate = CDate(crmdate)
        MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate)
        Application.EnableEvents = False
        ActiveCell.Value = outputDate
        ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm"
        Application.EnableEvents = True
    Else
        MsgBox "Inapropriate date and time format"
    End If

メッセージ ボックスは、デバッグのみを目的としています。

プログラムの開始時に地域設定を検出するか、これを回避するためにより適切な方法で記述することがおそらく賢明です。:)

これが誰かに役立つことを願っています。

よろしくお願いいたします。

于 2013-04-05T09:36:38.353 に答える