Outlook - VBA, przenoszenie wiadomości, załączników i tworzenie katalogów.

Anonimowe
2023-01-23T16:04:35+00:00

Witam,

Jestem początkującym w VBA i szukając rozwiązanie nie znalazłem nic, co po zmianie lub korekcie kodu działało.

W czym rzecz:

  1. Po otrzymaniu wiadomości i czytaniu jej.
  2. Uruchamiam skrypt. a. InputBox - podanie nazwy Projektu i możliwość zaznaczenia czy kopiować załączniki. b. Tworzenie podkatalogu w skrzy Outlook o podanej nazwie (jest stworzony katalog główny Oferty). c. Przeniesienie do tego podkatalogu danej wiadomości. d. Tworzenie katalogu ( z podanej nazwy) na dysku wraz z podkatalogami (stałe nazwy: Dokumentacja; Glass; Oferta; Poczta). e. Kopiowanie wiadomości do podkatalogu Poczta. f. Przeniesienie załączników (jeżeli zostało to zaznaczone) do podkatalogu Dokumentacja. g. Dopisanie do pliku Excela nowego wiersza z danymi o nowej ofercie, lub wpisanie to do programu LISTS z pakietu Office 365.

Podpunkty C i E chyba powinny być zamienione miejscami.

Proszę o pomoc.

Moje skromne wypociny:

Sub Katalog()
Dim projekt As String
Dim CurrentFolder As Outlook.MAPIFolder
Dim Subfolder As Outlook.MAPIFolder
Dim List As New VBA.Collection
Dim Folders As Outlook.Folders
Dim Item As Variant

' Podanie nazwy Projektu
projekt = InputBox("Nr. i nazwa projektu")

' Tworzenie katalogów na dysku

MkDir "D:\OneDrive - .......\Oferty" & projekt
MkDir "D:\OneDrive - .......\Oferty" & projekt & "\Poczta"
MkDir "D:\OneDrive - .......\Oferty" & projekt & "\Dokumentacja"
MkDir "D:\OneDrive - .......\Oferty" & projekt & "\Oferta"
MkDir "D:\OneDrive - .......\Oferty" & projekt & "\Glass"

' Kopiowanie plików na dysku
FileCopy "D:\OneDrive - .......\Kalkulacja.xlsm", "D:\OneDrive - ......\Oferty" & projekt & "\Oferta" & projekt & ".xlsm"
FileCopy "D:\OneDrive - ........\Oferta.doc", "D:\OneDrive - ......\Oferty" & projekt & "\Oferta" & projekt & ".doc"
FileCopy "D:\OneDrive - ........\Tabela Cenowa.xls", "D:\OneDrive - ......\Oferty" & projekt & "\Oferta\Tabela Cenowa.xls"

' Tworzenie podkatalogu w Outlook z tym że musi być aktywny Folder w którym ma powstać. A ja chcę to wykonać z poziomu skrzynki odbiorczej.

List.Add Array(projekt, olFolderInbox)

Set CurrentFolder = Application.ActiveExplorer.CurrentFolder
Set Folders = CurrentFolder.Folders
For Each Item In List
Folders.Add Item(0), Item(1)
Next
End Sub

Outlook | Windows | Klasyczny program Outlook dla systemu Windows | Do użytku domowego

Pytanie zablokowane. To pytanie zostało zmigrowane ze społeczności pomocy technicznej firmy Microsoft. Możesz zagłosować, czy pytanie jest pomocne, ale nie możesz dodawać komentarzy ani odpowiedzi, ani też śledzić pytania.

Komentarze: 0 Brak komentarzy

Odpowiedzi: 9

Sortuj według: Najbardziej pomocne
  1. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2023-01-25T16:05:53+00:00

    I jak się sprawy mają?

    Czy podpowiedzi umieszczone powyżej przyczyniły się do rozwiązania twojego problemu?

    Jeśli tak to zamknij wątek sugerując właściwą odpowiedź.

    A jeśli nie to napisz z czym konkretnie masz problem to podpowiem.

    Pozdrawiam.

    Obraz

    Czy ta odpowiedź była pomocna?

    1 osoba uznała tę odpowiedź za pomocną.
    Komentarze: 0 Brak komentarzy
  2. Anonimowe
    2023-01-26T07:34:49+00:00

    Właśnie o to mi chodzi.

    Dokładnie na przycisk, nic nie związane z automatyzacją.

    Prosty kod wykonujący podane wcześniej operację.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  3. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2023-01-25T21:33:30+00:00

    Czy ma być wykonywane automatycznie czy na przycisk, to tylko różnica umiejscowieniu kodu.

    Jeśli uruchamiane na przycisk, to prościej. Zwykłą procedurą podłączoną do przycisku lub wywoływaną ze skrótu klawiszowego.

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  4. Anonimowe
    2023-01-25T18:39:46+00:00

    Witam,

    Dziękuje za odpowiedź.

    Z mojego punku nie może być to automat, tylko jeżeli dobrze mnie rozumiesz to ma być wykonane tylko makro VBA które ja sam uruchomię w odpowiednim czasie i miejscu, które wykonana odpowiednie procedury.

    Sprawdzę i postaram się zmienić przykłady i zamieszczę na forum jeżeli zadziała.

    Przepraszam za zwłokę, brak czasu.

    Na razie nie zamykam wątku.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  5. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2023-01-23T16:49:00+00:00

    Nie jestem wstanie ci poświecić tyle czasu aby ci napisać cały kod.

    W twoim kodzie nie ma odniesienia ani do otwartej ani aktywnej korespondencji.

    Co tego poczta odbiorca musi też być poprzedzona kontem, Application.Session.Accounts bo może ich być więcej niż jeden acc.DeliveryStore.GetDefaultFolder(olFolderInbox)

    Z drugiej strony jeśli miałby być to automat to nie zawsze procedura zdarzeniowa odbioru maila działa NewMailEx. (tak 1:30 nie zadziała).

    Kiedyś napisałem taki dodatek COM, bo ten działa częściej: http://vbatools.pl/automatyczny-zapis-zalacznikow/  do zapisu załączników na dysku, choć i tak dodaje kategorie jeśli miało by się to odbyć automatycznie, tylko dla tego aby wiedzieć czy jakimś cudem coś przeszkodziło w tym procesie dając możliwość wykonania takiego zadania z osobnego przycisku. Zobacz czy jego opcje nie są pokrewne z twoim panem.

    Do tego przenoszenie wiadomości z utworzeniem pod folderów jako opcja dla jednego z 4rech scenariuszy: http://vbatools.pl/przeniesienie-do-podfolderow/ 

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy