Automatyczne zapisywanie załączników

Pytania, uwagi, problemy związane z Microsoft Office Outlook, wersje 2007, 2010, 2013 i 2016.

Moderator: Moderatorzy

Automatyczne zapisywanie załączników

Postprzez ronnie » Cz 01.12.2011 07:40

Witam

Chciałbym aby wiadomości które w tytule wiadomości mają text "ABC" oraz zawierają załącznik automatycznie były przenoszone do utworzonego przezemnie folderu w outlooku a załączniki z tych wiadomości automatycznie zapisywane były na dysku sieciowym pod określoną lokalizacją. Szukałem troche na necie i znalazłem taki kod:

Kod: Zaznacz cały
Dim WithEvents objInbox As Outlook.Items

 Private Sub Application_Startup()
   Set objInbox = Session.GetDefaultFolder(olFolderInbox).Items
End Sub
 
Private Sub objInbox_ItemAdd(ByVal Item As Object)
   If Item.Class = olMail And Item.Subject = "ABC" Then
      If Item.Attachments.Count > 0 Then
         Dim objAttachments As Outlook.Attachments
         Set objAttachments = Item.Attachments
         For Each objAttach In objAttachments
            ' Nie działa w sytuacjach, gdy występują zduplikowane nazwy plików
            objAttach.SaveAsFile "\\serwer\test\" & objAttach.FileName
         Next
         Set objAttachments = Nothing
      End If
   End If
End Sub


O ile dobrze zrozumiałem należy utworzyć regułę w Outlooku i "podpiać" pod nią to makro. I teraz moje pytanie jak to zrobić. Nie wiem czy to ma duże znaczenia ale korzystam z Outlooka 2010.
ronnie
 
Posty: 8
Dołączył(a): Cz 01.12.2011 07:23

Re: Automatyczne zapisywanie załączników

Postprzez OShon » Cz 01.12.2011 10:11

Tak - umieszczasz kod w developerze VBA Outlooka.
[Alt+F11]\Menu\insert\module
kopiujesz kod i zapisujesz [Ctrl+S]
Oczywiście w ustawieniach Outlooka musisz mieć makra odblokowane - inaczej kod się nie wywoła.

Po tym w regule jako skrypt wskazujesz nazwę tej procedury.
linijkę And Item.Subject = "ABC" możesz opuścić i zdefiniować w regule.
Aby sie nie nadpisywały wiadomości (jak podaje komentarz w kodzie) możesz dodać datę do nazwy klików.
zamiast objAttach.SaveAsFile "\\serwer\test\" & objAttach.FileName
wpisujesz:
Kod: Zaznacz cały
objAttach.SaveAsFile "\\serwer\test\" & Format(Now, "YYYY-MM-DD") & "_" & objAttach.FileName

Dzięki temu będzie można łatwo te same pliki wyselekcjonować w porządku jako odebrane.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez ronnie » Cz 01.12.2011 12:15

Wklejałem ten kod wcześniej tak jak napisałeś ale pierwszą linię:
Kod: Zaznacz cały
Dim WithEvents objInbox As Outlook.Items

pokolorowało na czerwono. Wyczytałem na necie, że ta procedura musi być zawarta w oknie ThisOutlookSession. I tutaj jest pytanie: czy cały ten kod ma być tutaj umieszczony czy tylko ta pierwsza linijka kodu?
Drugi problem jest taki, że gdy robie regule w outlooku i ustawiam ze po spelnieniu okreslonych warunkow ma sie uruchomić skrypt to na liście rozwijanej nie ma żadnej możliwości do wyboru. Może coś robię zle? Wszystko sprawdzam na Outlooku 2010.
ronnie
 
Posty: 8
Dołączył(a): Cz 01.12.2011 07:23

Re: Automatyczne zapisywanie załączników

Postprzez OShon » Cz 01.12.2011 13:21

Deklaracja nowego zdarzenia: WithEvents wiąże się z umieszczeniem jej w klasie ThisOutlookSesion, ale w tym przypadku nie jest konieczne ponieważ bedzie to rozwiązanie połączone z reguła to też nie w 100% automatyczne.
Nie widzisz tej procedury ponieważ ma atrybut Private oraz deklaracje ByVal - usuń je z kodu.
Kod: Zaznacz cały
Sub objInbox_ItemAdd(Item As MailItem)

OL_Reguła_zapisz_do_katalogu.png

Tutaj masz parę przykładów
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez ronnie » Cz 01.12.2011 14:47

Dziekuję bardzo. Teraz wszystko działa jak trzeba :)
ronnie
 
Posty: 8
Dołączył(a): Cz 01.12.2011 07:23

Re: Automatyczne zapisywanie załączników

Postprzez memorial » So 10.12.2011 13:02

Witam.
Mam podobny problem.
Po wpisaniu linijki:
Sub objInbox_ItemAdd(Item As MailItem) zamiast Private Sub objInbox_ItemAdd(ByVal Item As Object)
przy uruchamianiu Outlooka dostaje komunikat:
procedure declaration does not match description of event or procedure having the same name


oto moj kod:
Kod: Zaznacz cały
  Dim WithEvents objInbox As Outlook.Items

    Private Sub Application_Startup()
       Set objInbox = Session.GetDefaultFolder(olFolderInbox).Items
    End Sub

      Sub objInbox_ItemAdd(Item As Object)
       If Item.Class = olMail Then
          If Item.Attachments.Count > 0 Then
             Dim objAttachments As Outlook.Attachments
             Set objAttachments = Item.Attachments
             For Each objAttach In objAttachments
                ' Nie działa w sytuacjach, gdy występują zduplikowane nazwy plików
                objAttach.SaveAsFile "c:\test1\" & objAttach.FileName
             Next
             Set objAttachments = Nothing
          End If
       End If
    End Sub


Co robię nie tak?
Jakas sugestia?
memorial
 
Posty: 12
Dołączył(a): So 10.12.2011 12:44

Re: Automatyczne zapisywanie załączników

Postprzez OShon » N 11.12.2011 10:10

Komunikat mówi że deklaracja zdarzeń nie może być zastosowana/nie pasuje do procedury.
Może masz zastosowane w tym samym module dwie procedury o tej samej nazwie (a nie pokazujesz wszystkiego).
Jeśli nie wpisz w ThisOutlookSession:
Kod: Zaznacz cały
WithEvents objInbox as items


Zresztą pow opracowaliśmy podobny warunek, ale na zasadzie skryptu do zastosowania w regule.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez memorial » Wt 13.12.2011 09:10

Dzieki za pomoc.
Juz działa
Mam jeszcze jedna zagwozdke.
Potrzebuję aby załączniki przychodzące na konto aaa@aa.pl były zapisywane w katalogu c:\aa
natomiast załączniki przychodzące na konto bbb@bb.pl były zapisywane w katalogu c:\bb

Jak można to pokonać?
memorial
 
Posty: 12
Dołączył(a): So 10.12.2011 12:44

Re: Automatyczne zapisywanie załączników

Postprzez OShon » Wt 13.12.2011 09:19

Wystarczy że ten sam skrypt podłączysz w regule która będzie miała warunek na konto:

OL_Reguła różne konra.png

Dodatkowo zaznacz zaniechanie dalszych reguł.
I powtórz tą operacje dla drugiego konta.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez memorial » Wt 13.12.2011 10:03

hmmm.
Wydaje mi się że jednak trzeba coś pokombinować w skrypcie.
Jeśli zastosuję się do reguł to i tak w skrypcie jest ścieżka do katalogu gdzie mają być zapisywane załączniki.
Sądzę że trzeba by było zrobić skrypt1 do zapisywania załączników do c:\aa i skrypt2 do zapisywania do c:\bb
Wtedy przepuścić przez regułę i ma działać.
Niby proste ale jak zrobić skrypt1 i skrypt2??
memorial
 
Posty: 12
Dołączył(a): So 10.12.2011 12:44

Re: Automatyczne zapisywanie załączników

Postprzez OShon » Wt 13.12.2011 10:23

Jeśli będziesz to wywoływał reguła to zdarzenie WithEvents ... i procedura Application_StartUp nie są ci potrzebne
Skopiuj procedurę, jej nazwę rozgranicz, np:
Kod: Zaznacz cały
Sub objInboxA(Item As MailItem)
'....
objAttach.SaveAsFile "c:\sciezkaA\" & objAttach.FileName
'...
end sub

Sub objInboxB(Item As MailItem)
'....
objAttach.SaveAsFile "c:\sciezkaB\" & objAttach.FileName
'...
end sub

Po tym wybierzesz jako kod skryptu w regule objInboxA lub objInboxB
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez memorial » Wt 13.12.2011 15:49

I o to właśnie chodziło. :)
Wielkie dzięki za pomoc.

Pozdrawiam.
memorial
 
Posty: 12
Dołączył(a): So 10.12.2011 12:44

Re: Automatyczne zapisywanie załączników

Postprzez memorial » Wt 13.12.2011 16:40

Jeszcze jedno pytanko.
Potrzebuję aby po wykonaniu skryptu uruchomiła się aplikacja (nie odwrotnie).
W kreaturze reguł jest możliwość dodania "uruchom aplikację" ale wyskakuje najpierw aplikacja potem skrypt.
Chcę aby po zapisaniu załącznika plik był rozpakowywany przez program.
Jak to przeskoczyć?
memorial
 
Posty: 12
Dołączył(a): So 10.12.2011 12:44

Re: Automatyczne zapisywanie załączników

Postprzez OShon » Wt 13.12.2011 19:20

Uruchomić aplikacje kodem VBA, po wykonaniu procedury.
Jaką aplikacje chcesz uruchomić ?

Po prostu uruchomić czy, ma się wykonać jeszcze jakaś akcja?
Pytam bo potem okaże się cze coś jeszcze ukrywasz ;]
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez memorial » Śr 14.12.2011 08:17

Uruchomić aplikację kodem VBA.
Konkretnie skrypt.bat który wypakowuje zahasłowane pliki z załącznika i umieszcza je w docelowych katalogach.
Aby nic nie ukrywać :)
Dostaje z banku zahasłowane pliki z załącznikami w postaci xxxx.7z na dwa różne konta (za każdym razem inna_nazwa.7z)
Mam dwa programy które mają zassać dane z tych załączników. 1-program z załącznika przychodzącego na konto aaa@2.pl
2-program z załącznika bbb@b.pl.
Fakt że pliki są spakowane 7zip i mają hasło mam skrypcik.bat który wypakuje interesujące mnie dane i umieszcza je w katalogach danych programów.
Chyba że wszystko można w kodzie VBA-z którym niestety nie miałem jeszcze przyjemności :)
memorial
 
Posty: 12
Dołączył(a): So 10.12.2011 12:44

Re: Automatyczne zapisywanie załączników

Postprzez OShon » Śr 14.12.2011 09:36

Pewnie się da to zrobić z pod VBA i wyeliminować patche.
Tak czy inaczej skoro nie znam konkretnych instrukcji to pozostańmy przy koncepcji uruchomienia pliku .bat

Będzie to tak; w procedurze na końcu dodajesz wywołanie:
Kod: Zaznacz cały
dim dblTest as double
dblTest = Shell("c:\sciezka\skrypcik.bat", vbNormalFocus)
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez memorial » Śr 14.12.2011 15:05

Działa jak należy :)
Wielkie dzięki za pomoc.
Na jaki adres wysłać piwo?? :)
memorial
 
Posty: 12
Dołączył(a): So 10.12.2011 12:44

Re: Automatyczne zapisywanie załączników

Postprzez ronnie » Pt 20.01.2012 11:02

Witam

Mam mały problem z makrem. Do reguły mam podpięte makro zapisujące załączniki. I teraz chciałbym aby makro zapisywało załączniki w formacie .xls* w tym celu dodałem warunek (If objAttach.FileName = "*.xls*" Then) jednak coś nie działa.

Druga kwestia chciałbym aby przy zapisywaniu załączników na dysk przed nazwą pliku była dodatkowo data oraz godzina w formacie "YYYY-MM-DD hh:mm". Po dopisaniu przezemnie "hh:mm" do nazwy pliku dodana została data oraz godzina. Jak to poprawić aby było do nazwy pliku dodany był pełni czas tzn godzina i minuta.

Kod: Zaznacz cały
Sub objInbox_ItemAdd(Item As MailItem)

         Dim objAttachments As Outlook.Attachments
         Set objAttachments = Item.Attachments
         
            For Each objAttach In objAttachments
               If objAttach.FileName = "*.xls*" Then
                objAttach.SaveAsFile "\\serwer\zapytania\" & Format(Now, "YYYY-MM-DD hh:mm") & "_" & objAttach.FileName
               End If
            Next
         
         Set objAttachments = Nothing

End Sub
ronnie
 
Posty: 8
Dołączył(a): Cz 01.12.2011 07:23

Re: Automatyczne zapisywanie załączników

Postprzez OShon » Pt 20.01.2012 11:31

Zamiast = musisz użyć operatora Like, ponieważ nie można zapisać pliku z gwiazdką.
Innym sposobem stosowanym przeze mnie też jest wyszukanie kropki od tyłu stringa. Podpowiem że jest to polecenie InStrRev() w połączeniu z Mid()
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9497
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Automatyczne zapisywanie załączników

Postprzez sebool12 » Śr 15.01.2014 14:12

Sorry, że odkopuje ten stary teamt, ale mam problem.
Nie wiem dlaczego, ale nie działa mi ten skrypt:

Kod: Zaznacz cały
Sub Application_Startup()
   Set objInbox = Session.GetDefaultFolder(olFolderInbox).Items
End Sub
 
Sub objInbox_ItemAdd(Item As MailItem)
   If Item.Class = olMail Then
      If Item.Attachments.Count > 0 Then
         Dim objAttachments As Outlook.Attachments
         Set objAttachments = Item.Attachments
         For Each objAttach In objAttachments
           objAttach.SaveAsFile "\\lodnt001\Wspolny\!TestAutoSave\" & Format(Now, "YYYY-MM-DD") & "_" & objAttach.FileName
         Next
         Set objAttachments = Nothing
      End If
   End If
End Sub



Umieściłem go w module zapisuje się ok, doodaje regułę aby w temacie szukał słowa "test", że zawiera załącznik, oznacz jako przeczytany oraz uruchom skrypt i wskazuje na ten co mi się dodał do listy.
Po dodaniu wywala ostrzeżenie, że bedzie to działać tylko wtedy gdy outlook jest włączony.
Po przyjściu maila oznacza go automatycznie jako przeczytany, ale żadne pliki w lokalizacji się nie pojawiają :/
Próbowałem wysyłać pliki zarówno txt jaki i xls i efekt ten sam :/

Obrazek
sebool12
 
Posty: 14
Dołączył(a): Śr 15.01.2014 14:04

Następna strona

Powrót do Microsoft Outlook 2007 / 2010 / 2013 / 2016

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 gości