Problem z makrami w Outlooku 2016

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

Moderator: Moderatorzy

Problem z makrami w Outlooku 2016

Postprzez Skywanter » Śr 29.11.2017 11:17

Witam,

chciałem utworzyć reguły poczty wychodzącej, które przenosiłyby wysłane wiadomości do określonych folderów. Standardowy kreator reguł w Outlooku pozwala jedynie na kopiowanie wysłanych wiadomości do określonych folderów, jednak to rozwiązanie mnie nie satysfakcjonuje bo nie chce aby wysłane wiadomości były zdublowane zarówno w folderze 'Elementy wysłane' jaki i w podfolderach tego folderu. Dlatego też próbowałem stworzyć makra w VBA, które spełniałyby właśnie to zadanie, ponieważ jest to jedyny sposób na zaprogramowanie Outlooka w taki sposób aby przenosił wysłane wiadomości do wskazanych folderów. Niestety procedura jaką napisałem nie działa i zwraca błąd lub w zależności od jej zmodyfikowania nie działa nie informując w ogóle o błędach. Poniżej kod procedury:

Kod: Zaznacz cały
Option Explicit
Private WithEvents oSentItems As Items

Private Sub Application_Startup()
Set oSentItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub

Private Sub oSentItems_ItemAdd(ByVal Item As Object)
'a condition to your account Name ..4exemple My account name is Łukasz Przybylski
If Item.SenderName = "Łukasz Przybylski" Then
'or a condition to recipient your massage, we n't consider now
If Item.To = "amwnawrotspj@gmail.com" Then
Item.Move Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Folders("Arkadiusz Besler")
End If
End Sub


Natomiast zwracany błąd inrormuje 'Bloch If without End If'.

Procedurę zapisałem w kasie ThisOutlookSesion i za każdym razem resetowałem aplikację Outlooka. Ponadto włączyłem pełną obsługę makr, co jednak nie jest rozwiązaniem jakie chciałbym stosować ze względów bezpieczeństwa. W związku z tym proszę o pomoc w utworzeniu procedury, która wiadomości wysłane z konkretnego konta pocztowego do konkretnego korespondenta przenosiłaby do konkretnego podfolderu w 'Elementach wysłanych'. Proszę o wskazówki jak napisać taką procedurę, gdzie dokładnie ją zapisać i czy można w Outlooku 2016 włączyć automatyczne respektowanie wyłącznie makr stworzonych przez użytkownika.
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez OShon » Śr 29.11.2017 11:52

Warunek jeśli jest wielo-linijkowy powinien być zakończony.
I z na pierwszy rzut oka brakuje ci jednego end if albo zawinięcia wiersza _

Kod: Zaznacz cały
if coś_tam then coś_innego

'albo

if coś_tam then
coś_innego
end if

'albo

if coś_tam then _
coś_innego
Obrazek
Oskar Shon - MVP Office System/Development 11/17, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9224
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Śr 29.11.2017 14:15

Jednak to tak nie działa. Zmieniłem kod zgodnie ze wskazówkami. teraz prezentuje się on tak:

Kod: Zaznacz cały
Option Explicit
Private WithEvents oSentItems As Items

Private Sub Application_Startup()
Set oSentItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub

Private Sub oSentItems_ItemAdd(ByVal Item As Object)
'a condition to your account Name ..4exemple My account name is Łukasz Przybylski
If Item.SenderName = "Łukasz Przybylski" Then
Item.Move Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Folders("Arkadiusz Besler")
End If
'or a condition to recipient your massage, we n't consider now
If Item.To = "amwnawrotspj@gmail.com" Then
Item.Move Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Folders("Arkadiusz Besler")
End If
End Sub


Niestety wyskakuje inny błąd: '''Run-time error '-2147221233 (8004010f)' Próba wykonania operacji nie powiodła się. Nie można odnaleźć obiektu''. Po wejściu do debuggera okazuje się że ma problem z folderem ''Arkadiusz Besler''. Czy powodem może być to, że jest to podfolder innego podfolderu w elementach wysłanych. Jeśli tak to jak to obejść?
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez OShon » Śr 29.11.2017 14:30

Ja nie wiem gdzie masz szukany folder.
Uruchom w Outlooku skrót [Ctrl+6], a zobaczysz prawdziwą strukturę folderów.

Oby sprawdzić to kodem możesz wywołać procedurę:
Kod: Zaznacz cały
sub jaka_sciezka()
dim objFolderDst as MAPIFolder
set objFolderDst = application.getnamespace("MAPI").Pickfolder
msgbox objFolderDst.folderpath


Czyli GetDefaultFolder, a następnie podfoldery (to foldery poprzednika....podobnie jak u ciebie, w tym ze brakuje konta, no chyba że robisz na domyślnym).
Obrazek
Oskar Shon - MVP Office System/Development 11/17, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9224
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Wt 05.12.2017 11:33

Dziękuję za odpowiedź. Tylko jak to zapisać w kodzie że docelowy folder 'Arkadiusz Besler' znajduje się w 'Elementy wysłane'\'AMW'\'Arkadiusz Besler'? Ponadto jak zapisać w kodzie wskazanie na konto, że reguła dotyczy konkretnego konta mailowego (adresu bo kilka kont jest pod tym samym imieniem i nazwiskiem)?
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez OShon » Wt 05.12.2017 11:44

Sprawdź tak jeśli to konto jest domyślne:
Kod: Zaznacz cały
Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Folders("AMW").Folders("Arkadiusz Besler")


jeśli nie jest domyślne, to trzeba się do niego odwołać inaczej:
Kod: Zaznacz cały
Application.GetNamespace("MAPI").Folders("Nazwa_konta").Folders("AMW").Folders("Arkadiusz Besler")


Kiedyś napisałem taki kod, który ma podobną zasadę działania: Przenoszenie wielkich maili do archiwum
Obrazek
Oskar Shon - MVP Office System/Development 11/17, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9224
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Śr 20.12.2017 11:18

Witam. Zmodyfikowałem kod podając zdefiniowane foldery i niestety procedura dalej nie działa. Po próbie wywołania wyrzuca błąd, że zmienna nie jest zdefiniowana wskazując na linię Private Sub oSentItems_ItemAdd(ByVal Item As Object). Poniżej zamieszczam mój kod po modyfikacji i proszę o wskazówkę jak go poprawić tak by wiadomości wysłane ze zdefiniowanego konta na zdefiniowany adres przenosiły się do zdefiniowanego folderu.

Kod: Zaznacz cały
Option Explicit
Private WithEvents oSentItems As Items

Private Sub Application_Startup()
Set oSentItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub

Private Sub oSentItems_ItemAdd(ByVal Item As Object)
'a condition to your account Name ..4exemple My account name is Łukasz Przybylski
If Item.SenderName = "Łukasz Przybylski" Then
Item.Move Application.GetNamespace("MAPI").Folders("Łukasz_Przybylski").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")
End If
'or a condition to recipient your massage, we n't consider now
If Item.To = "amwnawrotspj@gmail.com" Then
IItem.Move Application.GetNamespace("MAPI").Folders("Łukasz_Przybylski").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")
End If
End Sub
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez OShon » Śr 20.12.2017 12:45

Literówka:
IItem zamiast Item

Kod powinien działać po zapisaniu i ponownym uruchomieniu aplikacji.
Obrazek
Oskar Shon - MVP Office System/Development 11/17, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9224
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Śr 20.12.2017 13:00

Dziękuję za za odpowiedź, nie dostrzegłem tego wcześniej. Jednak po poprawieniu procedura wciąż nie działa. Wyświetla teraz komunikat, że nie można odnaleźć obiektu wskazując na ścieżkę folderu po pierwszym warunku. Uruchomiłem wyświetlenie struktury folderów w Outlooku i jest dokładnie taka jak w kodzie. Czy problemem nie jest tutaj konto, z którego wysyłana jest wiadomość?
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Pt 05.01.2018 07:32

Z góry przepraszam za pisanie jednego postu pod drugim ale to dlatego by zwrócić na niego uwagę moderatorów lub innych osób które potrafią i chcą pomóc w rozwiązywaniu problemów z Outlookiem. Czy mógłbym uzyskać pomoc?
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez OShon » Pt 05.01.2018 08:55

W którym miejscu ci wywala błąd. Wpisz na samej górze modułów linijkę:
Kod: Zaznacz cały
Option Explicit

Jeśli nic nie będzie zgłaszało podczas uruchomienia to uruchom VBA developer/Menu/Debug/Compile
Sprawdź czy zadeklarowana ścieżka istnieje albo napisz przypisanie do obiektu i sprawdź czy nie jest pusty

Kod: Zaznacz cały
dim sciezka as mapifolder
on error resume next
set sciezka = Application.GetNamespace("MAPI").Folders("Łukasz_Przybylski").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")
if not sciezka is nothing then msgbox "Brak ścieżki"
on error goto 0
Obrazek
Oskar Shon - MVP Office System/Development 11/17, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9224
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Cz 11.01.2018 12:09

Błąd wywala mi 9 linii kodu od góry, czyli Item.Move Application.GetNamespace("MAPI").Folders("Łukasz_Przybylski").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")

Kod: Zaznacz cały
Option Explicit
Private WithEvents oSentItems As Items

Private Sub Application_Startup()
Set oSentItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub

Private Sub oSentItems_ItemAdd(ByVal Item As Object)
'a condition to your account Name ..4exemple My account name is Łukasz Przybylski
If Item.SenderName = "Łukasz Przybylski" Then
Item.Move Application.GetNamespace("MAPI").Folders("Łukasz_Przybylski").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")
End If
'or a condition to recipient your massage, we n't consider now
If Item.To = "amwnawrotspj@gmail.com" Then
Item.Move Application.GetNamespace("MAPI").Folders("Łukasz_Przybylski").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")
End If
End Sub


Jak uruchomić VBA developer?
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez OShon » Cz 11.01.2018 12:37

No piszesz kod w Developerze, także nie rozumiem pytania.

Co linki kodu. Musisz mieć problem ze zdefiniowaniem poprawnej scieżki.
Np domyślne konto w oknie immediate [Ctrl+G] to:
Kod: Zaznacz cały
Debug.Print Application.Session.GetDefaultFolder(olFolderInbox).Parent.Name

inną, i poprawną ścieżkę możesz uzyskać do przepisania w kodzie takim poleceniem (zaznacz maila w oczekiwanym folderze i uruchom tą linię dodają ją w procedurze):
Kod: Zaznacz cały
Debug.Print ActiveExplorer.Selection.item(1).Parent.FolderPath

Zamień sobie slashe na polecenie .Folders(...)
Obrazek
Oskar Shon - MVP Office System/Development 11/17, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9224
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Pt 12.01.2018 09:49

Przepraszam, nie jestem osobą biegłą w kwestiach technicznych. Wywołałem okno immediate Ctrl+G i okazało się, że w pierwszym warunku trzeba było podać adres mailowy zamiast nazwy użytkownika. Poprawiłem to i teraz procedura działa.

Chciałem się jeszcze dowiedzieć co muszę zrobić by dodać kolejne reguły, a dokładnie warunki na innych adresatów w ramach tego samego konta pocztowego, jak również warunki na inne konta pocztowe z jakich korzystam z konkretnymi adresatami. Wiem, że makra muszą być zapisane w kasie ThisOutlookSession. Ale jak oddzielić i zapisać wtedy reguły? Obecnie mój kod wygląda tak

Kod: Zaznacz cały
Option Explicit
Private WithEvents oSentItems As Items

Private Sub Application_Startup()
Set oSentItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub

Private Sub oSentItems_ItemAdd(ByVal Item As Object)
'a condition to your account Name ..4exemple My account name is Łukasz Przybylski
If Item.SenderName = "Łukasz Przybylski" Then
Item.Move Application.GetNamespace("MAPI").Folders("xxx@xxx.com").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")
End If
'or a condition to recipient your massage, we not consider now
If Item.To = "amwnawrotspj@gmail.com" Then
Item.Move Application.GetNamespace("MAPI").Folders("Łukasz_Przybylski").Folders("Elementy wysłane").Folders("AMW").Folders("Arkadiusz Besler")
End If
End Sub


chciałem w ramach konta xxx@xxx.com" target="_blank dołożyć warunki na innych adresatów, jak również zrobić reguły na inne moje konta pocztowe. Będę wdzięczny za pomoc.
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20

Re: Problem z makrami w Outlooku 2016

Postprzez OShon » Pt 12.01.2018 10:23

Składnie warunkowe można wykonać następująco


Funkcja warunkowa IF
Kod: Zaznacz cały
Jeśli warunek to rozwiązanie

Jeśli warunek to
        rozwiązanie
   Inne jeśli warunek to
        rozwiązanie 2
   Inne
        rozwiązanie inne
  Koniec


Funkcja warunkowa Case

Kod: Zaznacz cały
Znajdź rozwiązanie dla
   Znajdź Warunek
               Rozwiązanie
   Znajdź Inny warunek
               Rozwiązanie
   Znajdź Jeszcze inny warunek: Rozwiązanie
   Jak nie spełnia warunku to
  Koniec


Przykład:
Kod: Zaznacz cały
dim Zmienna as string: Zmianna = "Ala ma kota"

VBA_Warunki_IF_Case.png


Przećwicz sobie pow. przykład, a pojmiesz jak działają warunki.
Obrazek
Oskar Shon - MVP Office System/Development 11/17, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9224
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Problem z makrami w Outlooku 2016

Postprzez Skywanter » Pt 12.01.2018 12:55

Przepraszam ale uczenie się języka programowania VBA tylko po to aby zrobić sobie najprostsze reguły wysłanych wiadomości w Outlooku mija się z celem...Doceniam, że starałeś mi się pomóc i za tą pomoc dziękuję ale chyba jestem skazany na płatną usługę Microsoftu napisania przykładowego makra, na podstawie którego mógłbym sam pisać procedury. A wystarczyło tylko dać w Outlooku 203/16 taka regułę, kiedyś jeszcze w wersji 2010 była....
Skywanter
 
Posty: 15
Dołączył(a): Śr 27.09.2017 10:20


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 10 gości