Microsoft Outlook troubleshooting

Outlook radzi sobie z prezentacją załączonych do wiadomości plików. Jednakże, co dzieje się, kiedy plik załącznika jest zapisywany w Outlook a następnie wysyłany do adresata? Co dzieje się, kiedy tendencyjnie obrabiany jest jeden plik?

Co prawda prawidłowo jest zapisać plik przed obróbką na dysku w przeznaczonym do tego katalogu a następnie dokonać modyfikacji poza klientem poczty (mamy wtedy kontrolę nam plikiem), jednakże praktyka, która jest przedmiotem artykułu jest dość często spotykana. Outlook podczas otwierania i modyfikacji pliku nie zapisuje go wprost w Outlook.pst, ale w katalogu tymczasowym. Taki proces jest bezkolizyjny, gdy użytkownik sporadycznie realizuje tę czynność (zwłaszcza na różnych plikach). Jeśli plików w katalogu jest wiele to Outlook tworzy sobie nowy katalog. 

Proces oczyszczania dysku nie opróżnia nam plików z tych katalogów, pomimo tego, iż kopia tych samych plików została umieszczona w „Wysłanych elementach”, co czyni nasz dysk i system bardziej obciążony. Usunięcie pliku z wiadomości powinno usunąć również plik w katalogu na naszym dysku, jednak czasem nie jest to realizowane. Usunięcie zaś pliku z katalogu nie kasuje kopii tego pliku z wiadomości Outlook. 

Co więcej, podczas obróbki dużej ilości tak samo nazywających się plików może dość do przepełnienia. Polega to na tym, iż kopia tak samo nazywających się plików przekracza 99. W tym momencie Outlook nie pozwala nam umieścić w wiadomości pocztowej nowego załącznika o identycznej jak poprzednio nazwie. 

Poniższa procedura „ Kasowanie_plikow_tymczasowych ” jest opracowana z myślą o czyszczeniu plików we wszystkich katalogach tymczasowych Outlooka. Należy do wkleić i odpalić z Modułu Outlooka lub Excela.

Option Explicit
Declare Function SHGetSpecialFolderLocation Lib "Shell32.dll" _
  (ByVal hwndOwner As Long, ByVal nFolder As Long, _
  pidl As ITEMIDLIST) As Long

Declare Function SHGetPathFromIDList Lib "Shell32.dll" _
  Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _
ByVal pszPath As String) As Long

Public Type SH_ITEMID
cb As Long
abID As Byte
End Type

Public Type ITEMIDLIST
mkid As SH_ITEMID
End Type

Public Declare Function SetFileAttributes Lib "kernel32" _
Alias "SetFileAttributesA" (ByVal lpFileName As String, _
ByVal dwFileAttributes As Long) As Long
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const MAX_PATH As Integer = 260

Private Function fGetSpecialFolder(ByVal CSIDL As Long) As String
    Dim sPath As String
    Dim IDL As ITEMIDLIST
    fGetSpecialFolder = ""
    If SHGetSpecialFolderLocation(0, CSIDL, IDL) = 0 Then
        sPath = Space$(MAX_PATH)
        If SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath) Then
            fGetSpecialFolder = Left$(sPath, InStr(sPath, vbNullChar) - 1) & "\"
        End If
    End If
End Function

Public Sub Kasowanie_plikow_tymczasowych()

On Error GoTo ErrMess
    Dim MyArray(300) As String, i&, file_name$, path$
    file_name = Dir$(fGetSpecialFolder(32) & "Content.Outlook" & "\*.*", vbDirectory)
    i = 0
    Do While (Len(file_name) > 0) And (i < 101)
        MyArray(i) = file_name
        i = i + 1
        file_name = Dir$()
    Loop
    For i = 1 To UBound(MyArray)
        If Len(MyArray(i)) > 0 And MyArray(i) <> ".." Then
            path = CStr(fGetSpecialFolder(32) & "Content.Outlook\" & MyArray(i))
            Call MakeMeArchive(path)
            On Error Resume Next 'w przypadku braku plików w folderze
            Kill (path & "\*.*")
        End If
    Next i
   
    MsgBox "Wykonano czyczenie folderów.", vbExclamation, "MVP OShon VBATools.pl"

    Exit Sub
ErrMess:
    MsgBox Err.Description, vbExclamation, "MVP OShon VBATools.pl"
End Sub

Private Sub MakeMeArchive(ByVal path$)
    Dim fso As Object, fsoFile As Object, ile&
    Set fso = CreateObject("Scripting.FileSystemObject")
    For Each fsoFile In fso.GetFolder(path).Files
        SetFileAttributes fsoFile, FILE_ATTRIBUTE_ARCHIVE
    Next fsoFile
End Sub

 

Aby osadzić procedurę „ Kasowanie_plikow_tymczasowych ” pod przyciskiem w menu MS Outlook, polecam uwadze ten artykuł.

 


(c) Shon Oskar www.VBATools.pl



© Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.

Komentarze

Komentarze
Kask
Kask 2011-10-10 10:01:44
Witam. Jak uruchamiam makro pojawia mi się komunikat o tytule: O'Shon VBATools.pl z tekstem: File not found Nie wiem skąd to się bierze. Nie da się jakoś ręcznie skasować tych plików tymczasowych, w jakim katalogu się one znajdują?
OShon
OShon, VBATools.pl 2012-11-05 16:25:11
Procedura jest skomplikowana, z przyczyny tego iż katalog zapisu plików tymczasowych jest u każdego użytkownika różny, jak i może być powielany wielokrotnie. Kod ma na zadanie wyszukać je i usunąć wraz z plikami jakie one przechowują. Na etapie twojej odpowiedzi nie jestem wstanie stwierdzić jaki błąd występuje, jednakże komunikat jaki zwraca obsługa błędu mówi o tym iż nie ma pliku jaki został podany do wyszukania. Możesz uruchomić kod krokowo aby sprawdzić z jaką nazwą jest problem. Zapraszam na forum do dalszej dyskusji.
Pablo
Pablo 2013-06-05 09:39:19
Witam, Office 2010, po uruchomieniu marka czyszczącego pliki tymczasowe pojawia się błąd MVB for Applications i komunikat: Compile error: Constatnts, fixed-length strings, arrays, user-defined types and Declare statements not allowed as Public members of object modules oraz na czerwono zaznaczony fragment kodu: Public Const FILE_ATTRIBUTE_READONLY = &H1 Public Const FILE_ATTRIBUTE_TEMPORARY = &H100 Public Const FILE_ATTRIBUTE_ARCHIVE = &H20 Public Const MAX_PATH As Integer = 260 Proszę o pomoc w uruchomieniu makra albo/i w oczyszczeniu plików tymczasowych aby możnabyło otwierać pliki pdf via outlook. Dziękuję
Pablo
Pablo 2013-06-05 13:11:46
Witam, Office 2010, po uruchomieniu marka czyszczącego pliki tymczasowe pojawia się błąd MVB for Applications i komunikat: Compile error: Constatnts, fixed-length strings, arrays, user-defined types and Declare statements not allowed as Public members of object modules oraz na czerwono zaznaczony fragment kodu: Public Const FILE_ATTRIBUTE_READONLY = &H1 Public Const FILE_ATTRIBUTE_TEMPORARY = &H100 Public Const FILE_ATTRIBUTE_ARCHIVE = &H20 Public Const MAX_PATH As Integer = 260 Proszę o pomoc w uruchomieniu makra albo/i w oczyszczeniu plików tymczasowych aby możnabyło otwierać pliki pdf via outlook. Dziękuję
OShon
OShon, VBATools.pl 2014-01-22 12:28:10
Poczyniłem pewne modyfikacje kodu.
OShon
OShon, VBATools.pl 2014-01-22 12:31:58
Poczyniłem pewne modyfikacje kodu.