2

Access 2007 テーブルに "m/d/yyyy hh:mi:ss" という形式のテキスト列があります。つまり、1 ~ 2 桁の月、1 ~ 2 桁の日、4 桁の年、および「アメリカ」の日付形式です。ローカルの日付形式は dd/mm/yyyy です。

これらの日付を日付/時刻フィールドに変換してソートできるようにしたいのですが、CDate を使用して更新クエリを実行すると、月と日の処理に一貫性がありません。日付が明確であるため、12 日を超えても問題ありませんが、8 月 1 日 (2011 年 8 月 1 日) が 1 月 8 日に変換されます...

私には自分のロケールを変更する権利がありません - 一時的に変更できるのであれば、応急処置かもしれません。

Left、Right、Mid、InStr などで多くの作業を行って変換を「強制」することはできますが、1 ~ 2 桁の日と月のため、必要以上に多くの作業が必要になります。

私が欲しいのは(しかし見つけられない)のは、日付文字列と各桁が何を表すかを変換に伝えるフォーマット文字列を渡す Borland Delphi/Pascal の StrToDate に相当する VB です。

Delphi では、次のように簡単です。

MyDate:= StrToDate(MyAmericanFormattedDate,'d/m/yyyy hh24:mi:ss');

VBに相当するものはありますか?

4

1 に答える 1

2

そのDelphi関数のようなVBAには何もありません。文字列値を正しく変換する関数を作成できます。Leftそして、それらのRight、、、MidおよびInStr関数を使用する必要はありません。このSplit()関数はAccess2000から使用できるようになっているため、日付部分を分割してDateSerial()関数にフィードできます。

Public Function DateFromAmericanFormat(ByVal pIn As String, _
        Optional ByVal pDelimiter As String = "/") As Date
    Dim strDate As String
    Dim strTime As String
    Dim dteReturn As Date
    Dim astrFirstSplit() As String
    Dim astrDateParts() As String
    Dim intMonth As Integer
    Dim intDay As Integer
    Dim intYear As Integer

    astrFirstSplit = Split(pIn, " ")
    strDate = astrFirstSplit(0)
    strTime = astrFirstSplit(1)

    astrDateParts = Split(strDate, pDelimiter)
    intMonth = CInt(astrDateParts(0))
    intDay = CInt(astrDateParts(1))
    intYear = CInt(astrDateParts(2))
    dteReturn = DateSerial(intYear, intMonth, intDay) + CDate(strTime)
    DateFromAmericanFormat = dteReturn
End Function

それは大まかな概要にすぎません。「添え字が範囲外」のNull入力では失敗します。したがって、これには改善が必要かもしれませんが、うまくいけば、それは合理的な出発点です。

于 2012-08-23T07:33:39.533 に答える