Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1672to1676
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Letzter Ordnerzugriff im Excel einlesen

Letzter Ordnerzugriff im Excel einlesen
14.02.2019 09:38:28
Ralph
Hallo Zusammen
VIelleicht kann mir hier jemand Helfen. Ich habe ein Excelsheet erstellt, wo die Homelaufwerke sämtlicher User eingetragen sind. Nun brauchen wir immer mal wieder eine Auswertung mit folgenden Daten:
- Orderngrösse des Benutzers auf dem Share
- Letzter Zugriff auf diesen Ordner
Das automatische Auslesen (mit der Varibale UNC-Pfad des Homelaufwerkes aus der Exceltabelle) klappt - Und es wird mir die korrekte Gesamtgrösse in die zugehörige Spalte eingetragen.
Nur das mit dem letzten Zugriff klappt nicht. Ich bin in VBA überhaupt nicht so Fit und hoffe es kann mir hier jemand Helfen :\
Hier der bisherige Code, welcher klappt:
Public Sub Log(strLog As String)
Dim strFile As String, strMeld$
Dim f As Integer
strFile = DBPfad & "C:\Temp\Userhome-Migration-Errors.txt"
strMeld = Format(Now, "yyyy.mm.dd") & ";" & strLog
f = FreeFile
Open strFile For Append As #f
Print #1, strMeld
Close #f
End Sub
Function fileSizeinMB(path$)
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
Dim dir, v
If fs.FolderExists(path) Then
Set dir = fs.GetFolder(path)
fileSizeinMB = dir.Size / 1024 / 1024
End If
End Function Sub FileSize()
Dim Zelle
On Error GoTo Ende:
For Each Zelle In Selection.Cells
Cells(Zelle.Row, "F").Value = fileSizeinMB(Cells(Zelle.Row, "E").Value)
Next
Exit Sub
Ende:
' MsgBox (Cells(Zelle.Row, "D").Value)
Log (Cells(Zelle.Row, "A").Value) & ";" & (Cells(Zelle.Row, "G").Value) & ";" & (Cells(Zelle.Row, "H").Value) & ";" & (Cells(Zelle.Row, "E").Value) & ";" & (Cells(Zelle.Row, "I").Value)
Resume Next
End Sub

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Letzter Ordnerzugriff im Excel einlesen
14.02.2019 12:10:43
Nepumuk
Hallo Ralf,
ein Beispiel:
Public Sub test5()
    Dim objWMIService As Object, objFolders As Object, objFolder As Object
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objFolders = objWMIService.ExecQuery("SELECT * FROM Win32_Directory WHERE PATH = " & _
        "'\\Eigene Dateien\\Eigene Tabellen\\' AND DRIVE = 'G:'")
    For Each objFolder In objFolders
        Debug.Print objFolder.Name, objFolder.LastAccessed
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Letzter Ordnerzugriff im Excel einlesen
14.02.2019 13:24:51
Ralph
Hallo Nepumuk
Nein, das Funktioniert nicht. Wie gesagt:
- Das ganze soll per Button angestartet werden innerhalb der Exceltabelle
- Der Pfad zum dementsprechenden Ordner soll aus einer Feld der Tabelle Bsp: "A2" ausgelesen werden
- Das Datum des letzten Zugriffes soll dann in ein anderes Feld Bsp: "B2" geschrieben werden.
Mit einem fest verdrahteten Pfad (wie in Deinem Code) geht das nicht...
Liebe Grüsse
Ralph
AW: Letzter Ordnerzugriff im Excel einlesen
14.02.2019 14:48:36
Nepumuk
Hallo Ralf,
was genau steht denn in A2? Mein Code war nur ein Beispiel zum weiterbasteln.
Gruß
Nepumuk
AW: Letzter Ordnerzugriff im Excel einlesen
14.02.2019 15:24:38
Ralph
Ein UNC - Pfad zum Benutzerprofil. Beispiel: \\server1\users$\mustermann
in A3 würde stehen: \\server1\users$\mustermann2
usw...
Anzeige
AW: Letzter Ordnerzugriff im Excel einlesen
14.02.2019 17:17:44
Nepumuk
Hallo Ralf,
teste mal:
Option Explicit

Public Sub LastAccess()
    
    Dim objWMIService As Object, objFolder As Object
    Dim strDateTime As String, strPath As String
    Dim avntInputFolder As Variant, vntItem As Variant
    Dim adtmOutputDateTime() As Date
    Dim ialngIndex As Long
    
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    
    With Worksheets("Tabelle1") 'Tabellenname anpassen !!!
        
        avntInputFolder = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value2
        
        Redim adtmOutputDateTime(1 To UBound(avntInputFolder))
        
        For Each vntItem In avntInputFolder
            
            ialngIndex = ialngIndex + 1
            
            If Not IsEmpty(vntItem) Then
                
                strPath = Replace(vntItem, "\", "\\")
                
                Set objFolder = objWMIService.Get("Win32_Directory='" & strPath & "'")
                
                strDateTime = Split(objFolder.LastAccessed, ".")(0)
                
                adtmOutputDateTime(ialngIndex) = CDate(DateValue(Mid$(strDateTime, 7, 2) & "." & _
                    Mid$(strDateTime, 5, 2) & "." & Mid$(strDateTime, 1, 4)) + _
                    TimeValue(Mid$(strDateTime, 9, 2) & ":" & Mid$(strDateTime, 11, 2) & ":" & _
                    Mid$(strDateTime, 13, 2)))
                
            End If
        Next
        
        .Cells(2, 2).Resize(UBound(avntInputFolder), 1).Value = Application.Transpose(adtmOutputDateTime)
        
    End With
    
    Set objWMIService = Nothing
    Set objFolder = Nothing
    
End Sub

Die Spalte B muss benutzerdefiniert mit "TT.MM.JJJJ hh:mm:ss" formatiert sein.
Gruß
Nepumuk
Anzeige
AW: Letzter Ordnerzugriff im Excel einlesen
15.02.2019 09:14:39
Ralph
Hallo Nepumuk
Danke Dir für den Code....
Ich habe die Spalte mit "TT.MM.JJJJ hh:mm:ss" formatiert, aber sobald ich den Button
betätige kommt ein Pop Up mit folgenden Meldung:
Run-time error '13':
Type mismatch
Und der Debugger springt mir direkt zu dieser Zeile:
ReDim adtmOutputDateTime(1 To UBound(avntInputFolder))
Irgendwas haut noch nicht hin....
Viel liebe Grüsse
Ralph
AW: Letzter Ordnerzugriff im Excel einlesen
15.02.2019 09:39:30
Ralph
Stop, mein Fehler -> Ich hatte die falsche Spalte^^
Aber dafür kommt dieser Fehler
Run-time error
Not found
Und der Debugger springt zu dieser Zeile:
Set objFolder = objWMIService.Get("Win32_Directory='" & strPath & "'")
Kann es sein, das Du hier den "\" und den "\\" aus dem Pfad herausnimmst? Dann ist es klar das er den Ordner nicht findet, denn diese Zeichen müssen drin bleiben:

strPath = Replace(vntItem, "\", "\\")"
Es müsste also als Varibale zum Beispiel so übergeben werden:
\\server01\users$\testbenutzer
wobei dann auf den Ordner "Testbenutzer" gezeigt wird.
Anzeige
AW: Letzter Ordnerzugriff im Excel einlesen
15.02.2019 10:32:40
Nepumuk
Hallo Ralf,
Dann gibt es den Ordner nicht. Soll ich das abfangen und in die Spalte B "NOT FOUND" schreiben?
Gruß
Nepumuk
AW: Letzter Ordnerzugriff im Excel einlesen
15.02.2019 11:39:57
Ralph
Den Ordner gibt es aber Definitiv ;-)
Auf dem Server existiert ein Verzeichnis mit der Bezeichnung "users". Darunter befinden sich für jeden Benutzer ein Ordner mit seinem Namen. Dieser Ordner wird als Laufwerk "Z" in die Session verbunden wenn sich der Benutzer an der Windows Domäne anmeldet.
Im Excelsheet in der Spalte "A" ist dementsprechend der UNC-Pfad hinterlegt. Und genau au diesen Benutzerordner soll das Makro jeweils angewendet werden.
AW: Letzter Ordnerzugriff im Excel einlesen
15.02.2019 11:43:31
Nepumuk
Hallo Ralf,
ich kann hier private nicht mit UNC-Pfaden testen. Da musst du dich bis Montag gedulden bis ich in der Firma bin.
Gruß
Nepumuk
Anzeige
AW: Letzter Ordnerzugriff im Excel einlesen
15.02.2019 12:59:56
Ralph
OK, Cool. Und vielen Dank für Deine Hilfe :)
AW: Letzter Ordnerzugriff im Excel einlesen
18.02.2019 09:48:55
Nepumuk
Hallo Ralf,
mit WMI hatte ich keinen Erfolg, aber das FileSystemObject funktioniert:
Option Explicit
Public Sub LastAccess()
Const NOT_FOUND As String = "NOT FOUND"
Dim objFileSystemObject As Object, objFolder As Object
Dim avntValues As Variant, vntItem As Variant
Dim lngRow As Long
On Error GoTo err_exit
Set objFileSystemObject = CreateObject(Class:="Scripting.FileSystemObject")
lngRow = 2
With Worksheets("Tabelle1") 'Anpassen
avntValues = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value2
For Each vntItem In avntValues
Set objFolder = objFileSystemObject.GetFolder(vntItem)
If objFolder Is Nothing Then
.Cells(lngRow, 2).Value = NOT_FOUND
Else
.Cells(lngRow, 2).Value = objFolder.DateLastAccessed
End If
lngRow = lngRow + 1
Next
End With
sub_exit:
Set objFolder = Nothing
Set objFileSystemObject = Nothing
Exit Sub
err_exit:
Select Case Err.Number
Case 76
Set objFolder = Nothing
Resume Next
Case Else
Call MsgBox("Fehler: " & CStr(Err.Number) & vbLf & vbLf & _
Err.Description, vbCritical, "Progammfehler")
Resume sub_exit
End Select
End Sub

Gruß
Nepumuk
Anzeige
AW: Letzter Ordnerzugriff im Excel einlesen
19.02.2019 07:56:17
Ralph
Hallo Nepumuk
Du bist Genial - Das Script Funktioniert :)
Vielen Dank und beste Grüsse
Ralph

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige