Excelツールを使用して、現在の時刻と日付をUTC時刻に変換し、その時刻と日付をデータベース(Excelファイルでもあります)に保存します。メキシコの誰かがこのツールを使用しようとすると、日付の形式が異なり(MM-DD-YYではなくDD-MM-YY)、データベースに正しく保存されないという問題があります。ここではUTCに現在の時刻と日付を変換するコードは次のとおりです。ここでは、その後日付形式の問題VBA-Excel
Option Explicit
Public Declare Function SystemTimeToFileTime Lib _
"kernel32" (lpSystemTime As SYSTEMTIME, _
lpFileTime As FILETIME) As Long
Public Declare Function LocalFileTimeToFileTime Lib _
"kernel32" (lpLocalFileTime As FILETIME, _
lpFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib _
"kernel32" (lpFileTime As FILETIME, lpSystemTime _
As SYSTEMTIME) As Long
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Public Function LocalTimeToUTC(dteTime As Date) As Date
Dim dteLocalFileTime As FILETIME
Dim dteFileTime As FILETIME
Dim dteLocalSystemTime As SYSTEMTIME
Dim dteSystemTime As SYSTEMTIME
dteLocalSystemTime.wYear = CInt(Year(dteTime))
dteLocalSystemTime.wMonth = CInt(Month(dteTime))
dteLocalSystemTime.wDay = CInt(Day(dteTime))
dteLocalSystemTime.wHour = CInt(Hour(dteTime))
dteLocalSystemTime.wMinute = CInt(Minute(dteTime))
dteLocalSystemTime.wSecond = CInt(Second(dteTime))
Call SystemTimeToFileTime(dteLocalSystemTime, _
dteLocalFileTime)
Call LocalFileTimeToFileTime(dteLocalFileTime, _
dteFileTime)
Call FileTimeToSystemTime(dteFileTime, dteSystemTime)
LocalTimeToUTC = CDate(dteSystemTime.wMonth & "/" & _
dteSystemTime.wDay & "/" & _
dteSystemTime.wYear & " " & _
dteSystemTime.wHour & ":" & _
dteSystemTime.wMinute & ":" & _
dteSystemTime.wSecond)
End Function
とすると、日付と時刻を書き込み式である:localtimetoutc(NOW())
その後、私はちょうどには、このセルの値を保存しますVBA(バリアント変数)で変数を作成し、その変数の値をデータベースに貼り付けます。これは米国のユーザーには最適ですが、アメリカ以外のユーザーには失敗することがあります。どうすればそれが失敗しないことを確認できますか?つまり、VBAで必要な形式を使用するようにするにはどうすればよいですか。
よろしく、
ないトータルソリューションが、あなたは "MM" の値をチェックすることができ、そしてそれは12の上にいた場合、あなたは彼らがMM/DD/YYYYをした知っています残念ながら、これはすべてをキャッチしません...おそらくあなたは環境変数を確認し、参照することができます。 [このページ](http://www.utteraccess.com/forum/index.php?showtopic=1039007)が役立ちます。 – BruceWayne
'CDate'を使用する代わりに、' DateSerial(年、月、日)+ TimeSerial(時、分、秒) 'を使用してください。そうすれば、地域にかかわらず、日付と時刻の結果を誤って解釈することはありません。次に、必要に応じてセルをフォーマットすることができます。 – tigeravatar
@tigeravatar次に、そのコード行に 'LocalTimeToUTC = CDate(... wSecond)'を置き換えてください。 –