Dateieigenschaften werden von einem Rechner NICHT eingelesen

  • Excel

    Dateieigenschaften werden von einem Rechner NICHT eingelesen

    Hallo zusammen,

    Ich hab zur einheitlichen Dokumentenbereitstellung eine Datei erstellt, welche automatisch vorab definierte Eigenschaften sämtlicher Dateien in einem Verzeichnis ausliest und diese für weitere Schritte bereitstellt.
    Den Basis-Code hab ich vor einiger Zeit bei Recherchen im Netz gefunden.

    Nachdem das ganze Konstrukt auf meinem Rechner fehlerfrei läuft und ich damit nun auch schon eine Weile arbeite, hab ich die ersten Testläufe bei ein paar Kollegen vorgenommen.
    Alles läuft einwandfrei, aber ein einzelner Rechner zickt rum.
    Im Gegensatz zu allen anderen vorab durchgeführten Testläufen, läuft hier der Code zwar ebenfalls fehlerfrei durch, jedoch werden hier die falschen Dateieigenschaften ausgelesen.
    Alle Rechner laufen mit Windows 10, Office 365, Excel 365.

    Hier der Code:
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Option Explicit
    2. Public glngFolder As Long, garrFolders() As Variant
    3. Sub Dateeigenschaften_gezielt()
    4. 'Stufe 1
    5. 'Einlesen der (Unter-)Ordner, Dateitypen (#164), Pfade (#194) und evtl. Verlinkungen (#203)
    6. Call Dateieigenschaften("P:\qm\_Management-Dokumentation\Ablage\", _
    7. varEigenschaften:=Array(164, 194, 203), NrIndex:=False)
    8. End Sub
    9. Private Sub Dateieigenschaften _
    10. (ByVal STRFOLDER As Variant, _
    11. Optional varEigenschaften As Variant, _
    12. Optional NrIndex As Boolean = False, _
    13. Optional bolUnterOrdner As Boolean = True)
    14. 'STRFOLDER: Ordner in dem die Eigenschaften der Dateien ausgelesen werden sollen
    15. 'varEigenschaften: Array mit den Index-Nummern der Eigenschaften, die ausgelesen werden sollen
    16. 'wird der parameter weggelassen, werden alle Eigenschaften ausgelesen
    17. 'NrIndex: optional, wenn True, dann werden in Zeile 1 die Index-Nrn der Eigenschaften ausgegeben
    18. 'bolUnterOrdner:optional, wenn True, dann wird in Spalte A das Unterverzeichnis der Datei ausgegeben
    19. Dim objShell As Object
    20. Dim objFolder As Object
    21. Dim x As Byte
    22. Dim intColumn As Integer
    23. Dim lngRow As Long
    24. Dim varName, arrHeaders(255)
    25. Dim varWert
    26. Dim wksAusgabe As Worksheet
    27. 'Statusbar einblenden
    28. Application.ScreenUpdating = True
    29. Application.DisplayStatusBar = True
    30. 'Abfrage, ob aktualisiert werden soll
    31. If MsgBox("Soll die Übersicht aktualisert werden?" & Chr(13) & Chr(13) & _
    32. "(das kann u.U. etwas dauern)", vbYesNoCancel) = vbYes Then
    33. GoTo SPRUNG1
    34. Else
    35. If MsgBox("ACHTUNG!" & Chr(13) & Chr(13) & _
    36. "Sie haben der Aktualisierung nicht zugestimmt." & Chr(13) & _
    37. "Es besteht somit die Gefahr, dass Sie mit einem veraltetem Stand arbeiten und somit nicht alle relevanten Daten angezeigt bekommen." & Chr(13) & Chr(13) & _
    38. "Möchten Sie die Übersicht doch noch aktualisieren?", vbYesNoCancel) = vbYes Then
    39. GoTo SPRUNG1
    40. Else
    41. MsgBox "Aktualisierung wurde abgebrochen."
    42. Exit Sub
    43. End If
    44. End If
    45. SPRUNG1:
    46. 'Prüfen, ob Ablage vorhanden
    47. If Dir(STRFOLDER, 16) = "" Then
    48. MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!" & Space(10), 64, "weise hin..."
    49. Exit Sub
    50. End If
    51. 'Tabelle entsperren
    52. Tabelle1.Unprotect
    53. 'Tabelle leeren
    54. Dim letzteZeile As Integer
    55. letzteZeile = Tabelle1.Cells(Rows.Count, 6).End(xlUp).Row
    56. Tabelle1.Range("B21:P" & letzteZeile).ClearContents
    57. 'Ordnerliste zurücksetzen
    58. glngFolder = 0
    59. Erase garrFolders
    60. 'Anzeige Statusbar einstellen
    61. Application.StatusBar = "Ordner im Verzeichnis """ & STRFOLDER & """ werden eingelesen"
    62. 'Makro für Unterordner aufrufen
    63. Call ListFoldersInFolder(SourceFolderName:=STRFOLDER)
    64. Set objShell = CreateObject("Shell.Application")
    65. 'Start Einlesen
    66. For glngFolder = 1 To UBound(garrFolders)
    67. 'Anzeige in Statusbar
    68. Application.StatusBar = "Schritt 1 von 3 >>> Dateien im Verzeichnis """ & _
    69. garrFolders(glngFolder) & """ werden eingelesen (Ordner " & glngFolder & _
    70. " von " & UBound(garrFolders) & " )"
    71. 'Bildschirmaktualisierung ausschalten
    72. With Application
    73. .ScreenUpdating = False
    74. .Calculation = xlCalculationManual
    75. .EnableEvents = False
    76. End With
    77. Set objFolder = objShell.Namespace(garrFolders(glngFolder))
    78. If glngFolder = 1 Then
    79. 'On Error Resume Next
    80. Set wksAusgabe = Tabelle1
    81. intColumn = 1
    82. 'Unterverzeichnis angeben
    83. If bolUnterOrdner = True Then
    84. intColumn = intColumn + 1
    85. With wksAusgabe
    86. If NrIndex = True Then
    87. .Cells(2, intColumn) = "Unterverzeichnis"
    88. Else
    89. .Cells(1, intColumn) = "Unterverzeichnis"
    90. End If
    91. End With
    92. End If
    93. 'Index-Nummer und Namen der Dateieigenschaften
    94. For x = 0 To 254
    95. If fncCheck(IIf(VBA.IsMissing(varEigenschaften), -1, x), varEigenschaften) Then
    96. intColumn = intColumn + 1
    97. arrHeaders(x) = objFolder.GetDetailsOf(varName, x)
    98. With wksAusgabe
    99. If NrIndex = True Then
    100. .Cells(19, intColumn) = x
    101. .Cells(20, intColumn) = arrHeaders(x)
    102. Else
    103. .Cells(20, intColumn) = arrHeaders(x)
    104. End If
    105. End With
    106. End If
    107. Next
    108. 'Anfang Auflistung
    109. If NrIndex = True Then
    110. wksAusgabe.Rows(20).Font.Bold = True
    111. lngRow = 21 'Start der Detail-Auflistung
    112. Else
    113. wksAusgabe.Rows(20).Font.Bold = True
    114. lngRow = 21 'Start der Detail-Auflistung
    115. End If
    116. End If
    117. 'Details auflisten
    118. For Each varName In objFolder.Items
    119. Select Case LCase(objFolder.GetDetailsOf(varName, 2))
    120. Case "dateiordner", "folder", "filefolder"
    121. 'Ordner in Dateiliste nicht ausgeben
    122. Case Else
    123. intColumn = 1
    124. 'Unterordner auflisten
    125. If bolUnterOrdner = True Then
    126. intColumn = intColumn + 1
    127. wksAusgabe.Cells(lngRow, intColumn) = "'" & Mid(garrFolders(glngFolder), Len(STRFOLDER) + 1)
    128. End If
    129. For x = 0 To 254
    130. 'Eigenschaften
    131. If fncCheck(IIf(IsMissing(varEigenschaften), -1, x), varEigenschaften) Then
    132. intColumn = intColumn + 1
    133. varWert = ""
    134. varWert = objFolder.GetDetailsOf(varName, x)
    135. Select Case x
    136. Case 3, 4, 5, 152, 153, 154 'Datum Zeit
    137. If IsDate(varWert) Then varWert = CDate(varWert)
    138. Case 12 'Aufnahmedatum (enthält sonderzeichen deshalb keine echtes Exceldatum
    139. If IsDate(varWert) Then
    140. varWert = CDate(varWert)
    141. End If
    142. Case Else
    143. varWert = "'" & varWert
    144. End Select
    145. wksAusgabe.Cells(lngRow, intColumn) = varWert
    146. End If
    147. Next
    148. lngRow = lngRow + 1
    149. End Select
    150. Next
    151. Next glngFolder
    152. 'Bildschirmaktualisierung einschalten
    153. With Application
    154. .ScreenUpdating = True
    155. .Calculation = xlCalculationAutomatic
    156. .EnableEvents = True
    157. End With
    158. 'Info-Box
    159. MsgBox "Übersicht wurde aktualisiert"
    160. 'Ordnerliste zurücksetzen
    161. glngFolder = 0
    162. Erase garrFolders
    163. 'Statusleiste zurücksetzen
    164. Application.StatusBar = False
    165. 'Tabelle sperren
    166. Tabelle1.Range("A1").Select
    167. Tabelle1.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
    168. End Sub
    169. Private Function fncCheck(ByVal x As Integer, Optional varWerte) As Boolean
    170. Dim intJ As Integer
    171. fncCheck = False
    172. If x < 0 Then 'alle Eigenschaften
    173. fncCheck = True
    174. Else
    175. For intJ = LBound(varWerte) To UBound(varWerte)
    176. If x = varWerte(intJ) Then
    177. fncCheck = True
    178. Exit For
    179. End If
    180. Next
    181. End If
    182. End Function
    183. Private Sub ListFoldersInFolder(ByVal SourceFolderName As String)
    184. 'Makro erstellt zum Ordner-Namen ein Daten-Array mit den Namen der Ordner im Verzeichnis inkl. Unterverzeichnissen
    185. Dim FSO As Object, SourceFolder As Object, SubFolder As Object
    186. Set FSO = CreateObject("Scripting.FileSystemObject")
    187. Set SourceFolder = FSO.GetFolder(SourceFolderName)
    188. On Error GoTo Err_Zugriff: 'sollte Ordner geschützt sein
    189. glngFolder = glngFolder + 1
    190. ReDim Preserve garrFolders(1 To glngFolder)
    191. 'Pfadname
    192. garrFolders(glngFolder) = SourceFolderName
    193. For Each SubFolder In SourceFolder.SubFolders
    194. ListFoldersInFolder SubFolder.Path
    195. Next SubFolder
    196. Err_Zugriff:
    197. Set SourceFolder = Nothing: Set FSO = Nothing
    198. End Sub


    Hat jemand eine Ahnung, was hier das Problem an dem einem Rechner verursacht / verursachen könnte?

    Besten Dank im Voraus für Eure Unterstützung

    Spoiler hinzugefügt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()