Excel2003: Pfad zur Zeitzonenermittlung nur 126 Zeichen???

18/04/2008 - 17:05 von TomTau | Report spam
Hallo,

ich habe bei Microsoft eine API gefunden, um die Weltzeit einer Datei
zu ermitteln.
Der Dateipfad + Name darf aber nur 126 Zeilen lang sein, sonst kommt
eine Fehlermeldung.
Kann man das umgehen oder gibt es eine andere Lösung?

Über Eure Hilfe würde ich mich natürlich sehr freuen ;-)
MfG
TomTau

Hier mein Code (der originale Code ist lànger, wird aber von mir nicht
benötigt):

Zuerst das Modul:
Option Explicit

'*****für Weltzeitermittlung*****
'********************************

Const TIME_ZONE_ID_DAYLIGHT As Long = 2

Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String,
ByRef lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As
Long
Declare Function GetFileTimeAPI Lib "kernel32" Alias
"GetFileTime" (ByVal hFile As Long, ByRef lpCreationTime As Any, ByRef
lpLastAccessTime As Any, ByRef lpLastWriteTime As Any) As Long
Declare Function FileTimeToSystemTime Lib "kernel32" (ByRef lpFileTime
As FILETIME, ByRef lpSystemTime As SYSTEMTIME) As Long
Declare Function GetTimeZoneInformation Lib
"kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long

Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

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

Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(128) As Byte
End Type

Type TIME_ZONE_INFORMATION
Bias As Long ' Basis-Zeitverschiebung in
Minuten
StandardName(1 To 64) As Byte ' Name der Sommerzeit-
Zeitzone
StandardDate As SYSTEMTIME ' Beginn der Standardzeit
StandardBias As Long ' Zusàtzliche
Zeitverschiebung der Standardzeit
DaylightName(1 To 64) As Byte ' Name der Sommerzeit-
Zeitzone
DaylightDate As SYSTEMTIME ' Beginn der Sommerzeit
DaylightBias As Long ' Zusàtzliche
Zeitverschiebung der Sommerzeit
End Type

' Ermittelt die GMT-Zeit einer Datei und gibt diese als Date-
Variable zurück.

Function GetGMTTime(ByVal Pfad As String) As Date
Dim SysTime As SYSTEMTIME
Dim FTLastWriteTime As FILETIME
Dim dummy As FILETIME
Dim OFS As OFSTRUCT, hFile As Long

hFile = OpenFile(Pfad, OFS, &H0) ' Versuchen, die betroffene Datei
zu öffnen
If hFile = 0 Then Exit Function ' OpenFile ist gescheitert =>
Ausgang
GetFileTimeAPI hFile, dummy, dummy, FTLastWriteTime ' Ermitteln der
Zeitstempel
CloseHandle hFile
FileTimeToSystemTime FTLastWriteTime, SysTime ' Umsetzung in UTC-
Systemzeit

With SysTime ' Rückgabe als VB-Date
GetGMTTime = DateSerial(.wYear, .wMonth, .wDay) +
TimeSerial(.wHour, .wMinute, .wSecond)
End With
End Function

Hier mein Code bei 'DieseArbeitsmappe' als Test, 'Deutsche Sommerzeit'
trifft nur jetzt zu ;-):

Private Sub Workbook_Open()
MsgBox "Deutsche Sommerzeit der Datei ist: " &
FileDateTime(ActiveWorkbook.FullName)
MsgBox "Es müsste als nàchstes die Weltzeit folgen (Deutsche
Sommerzeit - 2 Stunden)"
MsgBox "GetGMTTime: " & GetGMTTime(ActiveWorkbook.FullName)
End Sub
 

Lesen sie die antworten

#1 TomTau
19/04/2008 - 23:35 | Warnen spam
Hallo,

ich habe es selbst gefunden:

nehme ich für die allerletzte Zeile:

Msgbox "GetGMTTime: " & FileDateTime(ActiveWorkbook.FullName) -
CurrentBias() / 1440

habe ich die Pfadbegrenzung auf 126 Zeichen umgangen, da
'FileDateTime' diese Begrenzung nicht kennt.

Im Modul muss dazu noch folgende Funktion stehen (stammt nicht von
mir):

'Gibt die aktuelle Zeitverschiebung gegenüber GMT-Uhrzeit in Minuten
zurück.

Function CurrentBias() As Integer
Dim udtTZI As TIME_ZONE_INFORMATION
Dim RetVal As Long
RetVal = GetTimeZoneInformation(udtTZI)
With udtTZI
If RetVal = TIME_ZONE_ID_DAYLIGHT Then
CurrentBias = -(.Bias + .DaylightBias)
Else: CurrentBias = -(.Bias + .StandardBias)
End If
End With
End Function

MfG
TomTau



On 18 Apr., 17:05, TomTau wrote:
Hallo,

ich habe bei Microsoft eine API gefunden, um die Weltzeit einer Datei
zu ermitteln.
Der Dateipfad + Name darf aber nur 126 Zeilen lang sein, sonst kommt
eine Fehlermeldung.
Kann man das umgehen oder gibt es eine andere Lösung?

Über Eure Hilfe würde ich mich natürlich sehr freuen ;-)
MfG
TomTau

Hier mein Code (der originale Code ist lànger, wird aber von mir nicht
benötigt):

Zuerst das Modul:
Option Explicit

'*****für Weltzeitermittlung*****
'********************************

Const TIME_ZONE_ID_DAYLIGHT As Long = 2

Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String,
ByRef lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As
Long
Declare Function GetFileTimeAPI Lib "kernel32" Alias
"GetFileTime" (ByVal hFile As Long, ByRef lpCreationTime As Any, ByRef
lpLastAccessTime As Any, ByRef lpLastWriteTime As Any) As Long
Declare Function FileTimeToSystemTime Lib "kernel32" (ByRef lpFileTime
As FILETIME, ByRef lpSystemTime As SYSTEMTIME) As Long
Declare Function GetTimeZoneInformation Lib
"kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long

Type FILETIME
  dwLowDateTime As Long
  dwHighDateTime As Long
End Type

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

Type OFSTRUCT
  cBytes As Byte
  fFixedDisk As Byte
  nErrCode As Integer
  Reserved1 As Integer
  Reserved2 As Integer
  szPathName(128) As Byte
End Type

Type TIME_ZONE_INFORMATION
     Bias                   As Long       ' Basis-Zeitverschiebung in
Minuten
     StandardName(1 To 64)  As Byte       ' Name der Sommerzeit-
Zeitzone
     StandardDate           As SYSTEMTIME ' Beginn der Standardzeit
     StandardBias           As Long       ' Zusàtzliche
Zeitverschiebung der Standardzeit
     DaylightName(1 To 64)  As Byte       ' Name der Sommerzeit-
Zeitzone
     DaylightDate           As SYSTEMTIME ' Beginn der Sommerzeit
     DaylightBias           As Long       ' Zusàtzliche
Zeitverschiebung der Sommerzeit
End Type

  ' Ermittelt die GMT-Zeit einer Datei und gibt diese als Date-
Variable zurück.

Function GetGMTTime(ByVal Pfad As String) As Date
Dim SysTime As SYSTEMTIME
Dim FTLastWriteTime As FILETIME
Dim dummy As FILETIME
Dim OFS As OFSTRUCT, hFile As Long

  hFile = OpenFile(Pfad, OFS, &H0)  ' Versuchen, die betroffene Datei
zu öffnen
  If hFile = 0 Then Exit Function ' OpenFile ist gescheitert =>
Ausgang
  GetFileTimeAPI hFile, dummy, dummy, FTLastWriteTime  ' Ermitteln der
Zeitstempel
  CloseHandle hFile
  FileTimeToSystemTime FTLastWriteTime, SysTime  ' Umsetzung in UTC-
Systemzeit

  With SysTime  ' Rückgabe als VB-Date
    GetGMTTime = DateSerial(.wYear, .wMonth, .wDay) +
TimeSerial(.wHour, .wMinute, .wSecond)
  End With
End Function

Hier mein Code bei 'DieseArbeitsmappe' als Test, 'Deutsche Sommerzeit'
trifft nur jetzt zu ;-):

Private Sub Workbook_Open()
    MsgBox "Deutsche Sommerzeit der Datei ist: " &
FileDateTime(ActiveWorkbook.FullName)
    MsgBox "Es müsste als nàchstes die Weltzeit folgen (Deutsche
Sommerzeit - 2 Stunden)"
    MsgBox "GetGMTTime: " & GetGMTTime(ActiveWorkbook.FullName)
End Sub

Ähnliche fragen