Per VBA Größe der .pst-Datei ermitteln - wie gehts schneller?
Hallo alle zusammen,
In unserer Firma gibt es User, die es immer wieder schaffen, Ihre .pst Dateien über die 2GB-Grenze hinaus aufzublähen.
Das bedeutet für mich jedesmal eine doch recht langwierige und lästige Reparatur mit den Tools "PST2GB" und "SCANPST" (von dem jeweiligen Datenverlust mal ganz abzusehen).
Also hab ich mir überlegt, ich schreibe ein kleines Makro, welches beim Start von Outlook dem Benutzer beim überschreiten der Größe von 1,5GB seiner .pst Datei eine entsprechende Meldung ausgibt.
Soweit - so Gut, leider konnte ich im Outlook-VBA keine Methode finden, welche mir die Gesamtgröße der Persönlichen Ordner-Datei ausgibt. D.h. ich ermittle jetzt über eine Rekursion die Größen aller einzelnen Unterordner und addiere diese dann zusammen. Hier mal mein Code:
Das Ganze funktioniert soweit auch ganz gut, aber bei entsprechend vielen Unterordnern bzw. Dateigröße kann die Abarbeitung schon mal etwas dauern.
Damit wären wir auch bei meiner Frage: Kennt vielleicht jemand eine andere (schnellere) Möglichkeit, die Größe der Persönlichen Ordner-Datei per VBA zu ermitteln?
Schon mal vielen Dank im voraus.
Gruß steini.
In unserer Firma gibt es User, die es immer wieder schaffen, Ihre .pst Dateien über die 2GB-Grenze hinaus aufzublähen.
Das bedeutet für mich jedesmal eine doch recht langwierige und lästige Reparatur mit den Tools "PST2GB" und "SCANPST" (von dem jeweiligen Datenverlust mal ganz abzusehen).
Also hab ich mir überlegt, ich schreibe ein kleines Makro, welches beim Start von Outlook dem Benutzer beim überschreiten der Größe von 1,5GB seiner .pst Datei eine entsprechende Meldung ausgibt.
Soweit - so Gut, leider konnte ich im Outlook-VBA keine Methode finden, welche mir die Gesamtgröße der Persönlichen Ordner-Datei ausgibt. D.h. ich ermittle jetzt über eine Rekursion die Größen aller einzelnen Unterordner und addiere diese dann zusammen. Hier mal mein Code:
Dim lTotalSize As Long
Private Sub Application_Startup()
ListAllFolders
End Sub
Function FolderSize(objFolder As MAPIFolder) As Long
Dim i As Long
Dim lSize As Long
With objFolder.Items
For i = 1 To .Count
lSize = lSize + .Item(i).Size
Next i
' Rückgabe in Bytes
FolderSize = lSize
End With
End Function
Sub ListAllFolders()
Dim olNS As NameSpace
Dim iTotalSize As Integer
lTotalSize = 0
Set olNS = Application.GetNamespace("MAPI")
ListFolder olNS.Folders, 0
'Ausgabe der gesamten Ordnergröße in MB
iTotalSize = Int(lTotalSize / 1024 / 1024)
'Wenn Datei > ~1,5GB dann Warnmeldung ausgeben
If iTotalSize > 1500 Then
MsgBox "Die Gesamtgröße der Persönlichen Ordner-Datei" & _
" beträgt: " & vbCrLf & CStr(iTotalSize) & " MB"
End If
End Sub
Sub ListFolder(parentfolder As Folders, i As Integer)
Dim olFold As MAPIFolder
Dim lSingleSize As Long
For Each olFold In parentfolder
'Ordnergröße ermitteln
lSingleSize = lSingleSize + FolderSize(olFold)
ListFolder olFold.Folders, i + 1
DoEventsNext
'Ordnergröße zur Gesamtgröße addieren
lTotalSize = lTotalSize + lSingleSize
End Sub
Das Ganze funktioniert soweit auch ganz gut, aber bei entsprechend vielen Unterordnern bzw. Dateigröße kann die Abarbeitung schon mal etwas dauern.
Damit wären wir auch bei meiner Frage: Kennt vielleicht jemand eine andere (schnellere) Möglichkeit, die Größe der Persönlichen Ordner-Datei per VBA zu ermitteln?
Schon mal vielen Dank im voraus.
Gruß steini.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 22715
Url: https://administrator.de/forum/per-vba-groesse-der-pst-datei-ermitteln-wie-gehts-schneller-22715.html
Ausgedruckt am: 23.04.2025 um 07:04 Uhr
8 Kommentare
Neuester Kommentar
Hi,
schau mal hier vorbei: Größe der pst-Datei per Batch ermitteln und auswerten=176#comment-1363909
Gruß
schau mal hier vorbei: Größe der pst-Datei per Batch ermitteln und auswerten=176#comment-1363909
Gruß
Moin steini,
schließe mich inhaltlich verkehrsberuhigt an: ich würde als Strategie wählen, irgendjemand zu fragen, der die Gesamtgröße der *.pst-Datei schon griffbereit hat, so wie in dem angegebenen Link der DIR-Befehl.
Dieses Zusammenstoppeln der Einzel-Ordnergrößen kann nicht der schnellste Weg sein.
Als reine VBA-Outlookvariante würde ich folgende Skizze nehmen:
- Ermitteln der "Persönlichen-Ordner"-Dateinamen/Speicherorte über Outlook
- dann über FileSystemObject-Funktionen in diesen Ordner auf dieses File-Object
- .FileSize abgreifen
- Feddich
Hat gegenüber der DIR-über-die-ganze-Platte-Mimik drei Vorteile:
a) Performanzvorteile
b) Du hast explizit nur die PST-Datei des angemeldeten Users bzw. Profils
c) Du hast kein Theater mit "langen" Byte-Angaben - der Command-Interpreter kann eben nur mit Zahlen < 10 GigaByte rechnen.
Details gerne bei Bedarf.
HTH Biber
@wiri:
Deine Variante fände ich auch von Allgemein-Interesse.
Wäre das Skript zu lang, um es hier zu posten?
schließe mich inhaltlich verkehrsberuhigt an: ich würde als Strategie wählen, irgendjemand zu fragen, der die Gesamtgröße der *.pst-Datei schon griffbereit hat, so wie in dem angegebenen Link der DIR-Befehl.
Dieses Zusammenstoppeln der Einzel-Ordnergrößen kann nicht der schnellste Weg sein.
Als reine VBA-Outlookvariante würde ich folgende Skizze nehmen:
- Ermitteln der "Persönlichen-Ordner"-Dateinamen/Speicherorte über Outlook
- dann über FileSystemObject-Funktionen in diesen Ordner auf dieses File-Object
- .FileSize abgreifen
- Feddich
Hat gegenüber der DIR-über-die-ganze-Platte-Mimik drei Vorteile:
a) Performanzvorteile
b) Du hast explizit nur die PST-Datei des angemeldeten Users bzw. Profils
c) Du hast kein Theater mit "langen" Byte-Angaben - der Command-Interpreter kann eben nur mit Zahlen < 10 GigaByte rechnen.
Details gerne bei Bedarf.
HTH Biber
@wiri:
Deine Variante fände ich auch von Allgemein-Interesse.
Wäre das Skript zu lang, um es hier zu posten?
@wiri
Danke, wiri... ist ja nix Eiliges...
Vielleicht können wir dann mal so ein "Größe der *.pst-Datei ermitteln"-Tutorial zusammenschreddern mit allen denkbaren Szenarios (lokal, Benutzerbezogen, auf dem Exchange-Server).
Diese uneinsichtigen User hören ja doch nicht auf, mehr zu mailen als M$ verkraftet... bleibt ja doch an uns hängen.
Gruß Biber
Danke, wiri... ist ja nix Eiliges...
Vielleicht können wir dann mal so ein "Größe der *.pst-Datei ermitteln"-Tutorial zusammenschreddern mit allen denkbaren Szenarios (lokal, Benutzerbezogen, auf dem Exchange-Server).
Diese uneinsichtigen User hören ja doch nicht auf, mehr zu mailen als M$ verkraftet... bleibt ja doch an uns hängen.
Gruß Biber
Danke, steini,
finde ich die richtige Einstellung, nicht jedes Rad neu erfinden zu wollen...
Deshalb habe ich mich auch gestern auf die oben genannten Stichworte beschränkt.
Mit dem Tutorial - ich glaube, das gehen wir erst an, wenn sich diese Punkte-Jieperei ein bisschen gelegt hat.. oder wir melden uns unter einem neuen Account "admin-teamwork" neu an.
Sonst fangen wiri, Du und ich auch noch an, uns um die Viertelpunkte zu balgen
Grüße Biber
finde ich die richtige Einstellung, nicht jedes Rad neu erfinden zu wollen...
Deshalb habe ich mich auch gestern auf die oben genannten Stichworte beschränkt.
Mit dem Tutorial - ich glaube, das gehen wir erst an, wenn sich diese Punkte-Jieperei ein bisschen gelegt hat.. oder wir melden uns unter einem neuen Account "admin-teamwork" neu an.
Sonst fangen wiri, Du und ich auch noch an, uns um die Viertelpunkte zu balgen
Grüße Biber