p>If you’re working with DateTmePickers on a VBA form in Excel 2010 be aware that there’s a fairly serious bug with assigning date values affecting the actual system time. For example the following code will change the system time of your PC to 1/1/1899!
Date = DateSerial(1899,1,1)
This is a big security hole in Office 2010, at least on Windows7 x64 Professional (which is the only place I tested it on). Being able to change the system time so easily is ridiculous. Up until now I’ve had to set the system time from VBA (or VB6 for that matter) by making use of the SetSystemTime API function doing someting like this:
Public Declare Function SetSystemTime Lib "kernel32" _ (lpSystemTime As SYSTEMTIME) As Long 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 Type TIME_ZONE_INFORMATION Bias As Long StandardName(31) As Integer StandardDate As SYSTEMTIME StandardBias As Long DaylightName(31) As Integer DaylightDate As SYSTEMTIME DaylightBias As Long End Type Public Declare Function getTimeZoneInformation Lib "kernel32" _ Alias "GetTimeZoneInformation" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long Private Declare Function GetTimeZoneInformationAny Lib "kernel32" Alias _ "GetTimeZoneInformation" (buffer As Any) As Long Public Function GetTimeDifference() As Long Const TIME_ZONE_ID_INVALID& = &HFFFFFFFF Const TIME_ZONE_ID_STANDARD& = 1 Const TIME_ZONE_ID_UNKNOWN& = 0 Const TIME_ZONE_ID_DAYLIGHT& = 2 'Returns the time difference between 'local & GMT time in seconds. 'If the result is negative, your time zone 'lags behind GMT zone. 'If the result is positive, your time zone is ahead. Dim tz As TIME_ZONE_INFORMATION Dim retcode As Long Dim Difference As Long 'retrieve the time zone information retcode = getTimeZoneInformation(tz) 'convert to seconds Difference = -tz.Bias * 60 'cache the result GetTimeDifference = Difference 'if we are in daylight saving time, apply the bias. If retcode = TIME_ZONE_ID_DAYLIGHT& Then If tz.DaylightDate.wMonth <> 0 Then 'if tz.DaylightDate.wMonth = 0 then the daylight 'saving time change doesn't occur GetTimeDifference = Difference - tz.DaylightBias * 60 End If End If End Function Public Function LocalToUtc(ByVal vdtLocal As Date) As Date Dim Differerence As Long Differerence = GetTimeDifference() LocalToUtc = DateAdd("s", -1 * Differerence, vdtLocal) End Function Public Function setSystemClock(datSet As Date) As Boolean Dim ST As modGlobals.SYSTEMTIME Dim datUTC As Date datUTC = modGlobals.LocalToUtc(datSet) With ST .wYear = Year(datUTC) .wMonth = Month(datUTC) .wDay = Day(datUTC) .wHour = Hour(datUTC) .wMinute = Minute(datUTC) .wSecond = Second(datUTC) End With If SetSystemTime(ST) Then setSystemClock = True Else setSystemClock = False End If End Function