ZAPISYWANIE ZAŁĄCZNIKÓW

Pytania, problemy, uwagi związane ze starszymi wersjami Microsoft Outlook 2003, 2002 (XP), 2000, 98

Moderator: Moderatorzy

ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez rumple » Cz 22.01.2009 19:07

Czy można jakoś zautomatyzować zapisywanie załaczników z otrzymywanych i wysyłanych maili? Np, żeby Outlook przed wysłaniem wiadomosci z załącznikiem pytał czy zapisac załacznik ?
alicja
rumple
 
Posty: 72
Dołączył(a): N 07.10.2007 19:45

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez OShon » Cz 22.01.2009 21:16

Ale przecież Outlook zapisuje ten plik.
Wszystko co zostaje wysłane, zostaje w "Elementach wysłanych".
Jedynym niebezpieczeństwem jest to, iż ktoś wejdzie w wiadomość z załącznikiem, otworzy go, zmodyfikuje i zapisze zmiany.
W tym przypadku wiadomość będzie posiadała załącznik zmodyfikowany.

Dla testów możesz wysłać 2razy ten sam plik ale przed i po zmianach.
Sprawdź potem elementy wysłane i okaże się ze Outlook zmagazynował 2 (różne w treści) pliki.

To samo tyczy się otrzymanych.
Często bowiem zdarza się że ktoś wysyła cały czas ten sam raport - jednakże treść raportu się od siebie różni.
W elementach odebranych będziesz miała X maili z takim samym załącznikiem - w efekcie X różnych kopii tega samego raportu.
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez rumple » Pt 23.01.2009 13:29

nie o to mi chodziło, chciałabym zapisywać załączniki poza folderami Outlooka. To oczywiscie daje sie robić klikajac prawym przyciskiem myszy na zalącznik i wybierajac zapisz jako, ale jak jest kilka załączników trzeba to robic z kazdym z nich po kolei
alicja
rumple
 
Posty: 72
Dołączył(a): N 07.10.2007 19:45

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez OShon » Pt 23.01.2009 15:15

Teraz wszystko jasne.
Automatycznie nie polecam; jednakże jest napisana porada co do rozwiązania przypadku Zapis załączników z wszystkich zaznaczonych elementów na dysk, którą polecam przeczytać.
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez rumple » Pt 23.01.2009 15:36

Włąsnie ten artykuł mnie zainspirował do zadanie pytania. Zawarte tam makro zapisuje wszystkie załacnziki na dysk. Czy mozna zatem stworzyc makro, które tworzyłoby np przycisk w pasku narzedzi "zapisać?" którego nacisniecie powodowałaby otwarcie dialogu "Zapisz załącznik" przy czym zapisywałyby sie wewskazanym folderze wszystkie załączniki z wiadomosci?
alicja
rumple
 
Posty: 72
Dołączył(a): N 07.10.2007 19:45

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez OShon » Pt 23.01.2009 17:18

Utworzenie przycisku również jest opisane Uruchamianie makr przyciskiem na pasku narzędzi
Zapraszam do lektury.
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez rumple » Pt 23.01.2009 19:02

Uruchomić przycisk umiem, ale nie umiem napisać makra.
alicja
rumple
 
Posty: 72
Dołączył(a): N 07.10.2007 19:45

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez OShon » Pt 23.01.2009 19:10

Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez rumple » N 25.01.2009 21:59

Tyle tylko, ze to makro zapisuje załaczniki zawsze w tym samym folderze, a mnie chodzi o to, zeby otwierało okno dialogowe "zapisz jako". Czy moze ktoś potrafi mi pomóc?
alicja
rumple
 
Posty: 72
Dołączył(a): N 07.10.2007 19:45

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez OShon » Pn 26.01.2009 01:08

Wywołanie folderów Outlooka:

Kod: Zaznacz cały
Dim oFolder As Folder
Set oFolder = Application.GetNamespace("MAPI").PickFolder
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez rumple » Pt 30.01.2009 19:27

No i wyszło mi takie coś i nie działa :(

Kod: Zaznacz cały
Sub SaveAttachments()
    On Error Resume Next
   
    Dim strDestFolderPath
    strDestFolderPath = "C:\Documnets and Settings\ala\Moje Dokumenty\Dokumenty klientów\"
   
    Const bDeleteAttach = False
         
    Dim oFolder As Folder
    Set oFolder = Application.GetNamespace("MAPI").PickFolder
     
 For Each Item In Application.ActiveExplorer.Selection
    If Item.Attachments.Count > 0 And Item.UserProperties.Item("processed").Value <> 1 Then
           
 ReDim arAttachIndexes(0) As Integer
           
 For Each attach In Item.Attachments
    Dim oAttach As Attachment
    Set oAttach = attach
               
    If oAttach.Type = olByValue Or oAttach.Type = olEmbeddeditem Then
       oAttach.SaveAsFile strDestFolderPath & oAttach.FileName
                   
       ReDim Preserve arAttachIndexes(UBound(arAttachIndexes) + 1)
       arAttachIndexes(UBound(arAttachIndexes)) = oAttach.Index
    End If
Next
           
    If Not IsEmpty(arAttachIndexes) Then
           
       If bDeleteAttach Then
       End If
            Item.UserProperties.Add "processed", olNumber
            Item.UserProperties.Item("processed").Value = 1
            Item.Save
    End If
Next
End Sub
alicja
rumple
 
Posty: 72
Dołączył(a): N 07.10.2007 19:45

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez OShon » Pt 30.01.2009 22:16

Po pierwsze brakuje na początku modułu wymuszenia deklaracji zamiennych.
Od tego zaczynaj, bo nie pogubisz się w ich ilościach i przypisaniu do kategorii.
To bardzo dobra praktyka. Umieszcza się tą linijkę na początku każdego modułu.
Kod: Zaznacz cały
Option Explicit

ok co to jest za warunek który nic nie robi?
Kod: Zaznacz cały
If bDeleteAttach Then
End If

a warunek, który nie ma zakończenia?
Kod: Zaznacz cały
If Item.Attachments.Count > 0 And Item.UserProperties.Item("processed").Value <> 1 Then


Przy instrukcji np: "Set xxx" pod koniec instrukcji należny opróżnić pamięć
Kod: Zaznacz cały
Set xxx = Nothing


Instrukcja ".PickFolder" nie jest wykorzystana. To iż wyświetlasz okno folderów i nic z tym nie robisz nie doprowadzi cie do zamierzenia.

Korzystając treść z utworzonej wcześniej instrukcji "Zapis załączników z wszystkich zaznaczonych elementów na dysk" nie wycinaj z niego wartościowych elementów, bez sprawdzenia do czego były wykorzystane.
Formatuj kod tak abyś się nie pogubił. Wcięcia i odstępy dla mechanizmu nie mają znaczenia, ale dla zrozumienia tej instrukcji przez czytelnika czy twórcę ma zasadnicze znaczenie.
I już na koniec.
Jeśli przedstawiasz nam kod to umieszczaj go zaznaczając i uruchamiając w forum przycisk "Code", w tedy stanie się zielony co odróżni go od komentarzy.
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez sushuang » Wt 22.01.2013 00:28

Jeżeli nie chcecie bawić się w tworzenie MAKR bo czujecie, że zwyczajnie nie o to Wam chodzi to polecam program OutlookAttachView. Ściąga wszystkie załączniki i zapisuje je na dysku w dowolnym miejscu wybranym przez użytkownika. Jeżeli nie możecie znaleźć tego programu w internecie to zapraszam do kontaktu ze mną pod adresem e-mail: zuraw.damian@gmail.com" target="_blank" target="_blank" Przedtem jednak polecam google :P Program można pobrać np stąd: http://download.chip.eu/pl/OutlookAttac ... 53811.html" target="_blank" target="_blank

Maila sprawdzam wiele razy dziennie więc bez problemu mogę przesłać program. Jeżeli chodzi o zadawanie pytań to prosze pisać tutaj. Sam go szukałem troche po necie więc postanowiłem pomóc potrzebującym ;)

Uwaga! Program nie działa we współpracy z Outlook Express'em.
Ostatnio edytowano Pt 29.08.2014 06:30 przez sushuang, łącznie edytowano 1 raz
sushuang
 
Posty: 58
Dołączył(a): Wt 22.01.2013 00:25

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez sushuang » Śr 27.02.2013 16:29

Jeżeli natomiast nie chcecie sciagac zadnego orpogramowania na swoje kompy/badz tez nie mozecie ze wzgledu na ograniczenia w pracy polecam ponizsze makro, ktore udalo mi sie znalezc na jednej ze stron.

Funkcjonowanie bardzo proste: Zaznacz interesujace Cie wiadomosci z zalacznikami, kliknij alt+F8, uruchom makro, wybierz folder gdzie pliki maja zostac zapisane. Nastepnie program pyta sie czy pliki z maila maja zostac usuniete czy pozostawic kopie plikow w mailu.

Kod: Zaznacz cały
Public Sub ExportAttachments()
    Dim objOL As Outlook.Application
    Dim objMsg As Object
    Dim objAttachments As Outlook.Attachments
    Dim objSelection As Outlook.Selection
    Dim i As Long, lngCount As Long
    Dim filesRemoved As String, fName As String, strFolder As String, saveFolder As String, savePath As String
    Dim alterEmails As Boolean, overwrite As Boolean
    Dim result
   
    saveFolder = BrowseForFolder("Select the folder to save attachments to.")
    If saveFolder = vbNullString Then Exit Sub
   
    result = MsgBox("Do you want to remove attachments from selected file(s)? " & vbNewLine & _
    "(Clicking no will export attachments but leave the emails alone)", vbYesNo + vbQuestion)
    alterEmails = (result = vbYes)
   
    Set objOL = CreateObject("Outlook.Application")
    Set objSelection = objOL.ActiveExplorer.Selection
   
    For Each objMsg In objSelection
        If objMsg.Class = olMail Then
            Set objAttachments = objMsg.Attachments
            lngCount = objAttachments.Count
            If lngCount > 0 Then
                filesRemoved = ""
                For i = lngCount To 1 Step -1
                    fName = objAttachments.Item(i).FileName
                    savePath = saveFolder & "\" & fName
                    overwrite = False
                    While Dir(savePath) <> vbNullString And Not overwrite
                        Dim newFName As String
                        newFName = InputBox("The file '" & fName & _
                            "' already exists. Please enter a new file name, or just hit OK overwrite.", _
                            "Confirm File Name", fName)
                        If newFName = vbNullString Then GoTo skipfile
                        If newFName = fName Then overwrite = True Else fName = newFName
                        savePath = saveFolder & "\" & fName
                    Wend
                   
                    objAttachments.Item(i).SaveAsFile savePath
                   
                    If alterEmails Then
                        filesRemoved = filesRemoved & "<br>""" & objAttachments.Item(i).FileName & """ (" & _
                                                                formatSize(objAttachments.Item(i).size) & ") " & _
                            "<a href=""" & savePath & """>[Location Saved]</a>"
                        objAttachments.Item(i).Delete
                    End If
skipfile:
                Next i
               
                If alterEmails Then
                    filesRemoved = "<b>Attachments removed</b>: " & filesRemoved & "<br><br>"
                   
                    Dim objDoc As Object
                    Dim objInsp As Outlook.Inspector
                    Set objInsp = objMsg.GetInspector
                    Set objDoc = objInsp.WordEditor

                    objMsg.HTMLBody = filesRemoved + objMsg.HTMLBody
                    objMsg.Save
                End If
            End If
        End If
    Next
   
ExitSub:
    Set objAttachments = Nothing
    Set objMsg = Nothing
    Set objSelection = Nothing
    Set objOL = Nothing
End Sub

Function formatSize(size As Long) As String
    Dim val As Double, newVal As Double
    Dim unit As String
   
    val = size
    unit = "bytes"
   
    newVal = Round(val / 1024, 1)
    If newVal > 0 Then
        val = newVal
        unit = "KB"
    End If
    newVal = Round(val / 1024, 1)
    If newVal > 0 Then
        val = newVal
        unit = "MB"
    End If
    newVal = Round(val / 1024, 1)
    If newVal > 0 Then
        val = newVal
        unit = "GB"
    End If
   
    formatSize = val & " " & unit
End Function

'Function purpose:  To Browser for a user selected folder.
'If the "OpenAt" path is provided, open the browser at that directory
'NOTE:  If invalid, it will open at the Desktop level
Function BrowseForFolder(Optional Prompt As String, Optional OpenAt As Variant) As String
    Dim ShellApp As Object
    Set ShellApp = CreateObject("Shell.Application").BrowseForFolder(0, Prompt, 0, OpenAt)

    On Error Resume Next
    BrowseForFolder = ShellApp.self.Path
    On Error GoTo 0
    Set ShellApp = Nothing
     
    'Check for invalid or non-entries and send to the Invalid error handler if found
    'Valid selections can begin L: (where L is a letter) or \\ (as in \\servername\sharename.  All others are invalid
    Select Case Mid(BrowseForFolder, 2, 1)
        Case Is = ":": If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
        Case Is = "\": If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
        Case Else: GoTo Invalid
    End Select
     
    Exit Function
Invalid:
     'If it was determined that the selection was invalid, set to False
    BrowseForFolder = vbNullString
End Function

Function BrowseForFile(Optional Prompt As String, Optional OpenAt As Variant) As String
    Dim ShellApp As Object
    Set ShellApp = CreateObject("Shell.Application").BrowseForFolder(0, Prompt, 16 + 16384, OpenAt)
   
    On Error Resume Next
    BrowseForFile = ShellApp.self.Path
    On Error GoTo 0
    Set ShellApp = Nothing
     
    'Check for invalid or non-entries and send to the Invalid error handler if found
    'Valid selections can begin L: (where L is a letter) or \\ (as in \\servername\sharename.  All others are invalid
    Select Case Mid(BrowseForFolder, 2, 1)
        Case Is = ":": If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
        Case Is = "\": If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
        Case Else: GoTo Invalid
    End Select
     
    Exit Function
Invalid:
     'If it was determined that the selection was invalid, set to False
    BrowseForFile = vbNullString
End Function


Pozdrawiam ;)
sushuang
 
Posty: 58
Dołączył(a): Wt 22.01.2013 00:25

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez HamsterEve » Pt 27.09.2019 10:33

Ja mam inne zadanie.
Outlook 2016. Skrzynka dodatkowa. Do niej spływają maile wysyłane przez tool. W treści maila zamieszczony obrazek z wykresem.
Maile przychodzą z tego samego adresu, maile różnią się treścią, która pozwala je rozróżnić (kluczowe słowa). Utowrzyłam podfoldery w skrzynce, gdzie znajdują się wiadomości rozlokowane po słowie klucz.
Muszę wejść w każdą wiadomość i skopiować obrazek, wkleić do Worda pod odpowiednim opisem. Wykresy same w sobie nie mają opisu, więc muszę wiedzięc, który należy np. do ALFA, który jest pod inną nazwą kluczową, to widzę w treści maila.
Czyli w Wordzie wpisuję ALFA i kolejno przeklejam obrazki z wiadomości. Potem wpisuję inną nazwę i pod nią wklejam kolejno obrazki.
Wiadomości przychodzą w poniedziałki, jeden wykres ujmuje jeden tydzień. Kopiuję wykresy dla danego miesiąca, czyli co tydzień kopiuj/wklej z każdej wiadomości indentyfikowanej inną nazwą jak np. ALFA.
Samej wiadomości, którą wysyła tool, nie mogę zmienić czy "obrobić". Mogę tylko skopiować.
Czy istnieje sposób, aby ominąć ręczne przeklejanie? Może być nawet przeklejka do PowerPoint, gdzie dla danej nazwy będzie osobna sekcja ze slajdami.

Pozdrawiam
HamsterEve
 
Posty: 1
Dołączył(a): Pt 27.09.2019 10:19

Re: ZAPISYWANIE ZAŁĄCZNIKÓW

Postprzez OShon » Pt 27.09.2019 10:49

Oj do strasznie starego wątku się dokleiłeś, trzeba było nowy :)
Wykres osadzony w treści tak czy inaczej jest załącznikiem, o ile nie jest linkiem do obrazka osadzonego na serwerze.
Jego automatyczny zapis wchodzi w grę np. tym dodatkiem http://vbatools.pl/automatyczny-zapis-zalacznikow/
Niestety dodane pliki graficzne do treści mają zamienioną nazwę (bo user nie dodaje ich jako attachment wybierając z dysku) a może je wkleić z koszyka.
Dlatego nazwa jest jednolita z dodaniem cyferki oznaczającej, który to już jest obrazek. Jak być rozmyślał zastosowanie dodania daty do nawy pliku to będzie to jakies gotowe rozwiązanie.
Jeśli zdjęcie jest linkiem (poczta zajmuje kilka kila zamiast kilkaset) to trzeba opracować inną metodę pobrania danych ze źródła. Podobne zagadnienie ale dla Excela rozważałem tutaj http://vbatools.pl/hiperlink-do-pliku-czyli-pobieranie-zrodla/ ale oczywiście jest to inne środowisko, choć metoda podobna.

Aby jednak faktycznie pochylić się nad tym problemem to trzeba by albo skorzystać z konkretnej treści wiadomości i ją użyć jako nazwę wykresu, albo pobrać jaz tematu (wcześniej usuwając znaki które mogą przeszkodzić w jego zapisie).
Jeśli się nie czujesz aby napisać taki kod samodzielnie to musisz to po prostu zlecić, bo nikt na postawie tego opisu nie będzie się domyślał co tutaj zrobić na prędko. Po opracowaniu kodu jakieś testy i poprawki wynikające z różnych przykładków i robi się z tego tydzień pracy.
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl


Powrót do Microsoft Outlook

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 8 gości