Korespondencja seryjna z poziomu Excela - VBA

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

Moderator: Moderatorzy

Korespondencja seryjna z poziomu Excela - VBA

Postprzez AgaG » Śr 12.05.2021 09:14

Drodzy, mam kod, który w pętli przechodzi przez komórki zakresu i wysyła osobne maile na adresy mailowe pobrane z poszczególnych komórek. Jak go przerobić, żeby przy wystąpieniu błędu, w wyniku którego mail nie zostanie wysłany na adres z danej komórki, makro nie przerywało działania pętli, a jednocześnie aby tworzyło w jakiejś formie raport, żeby było wiadomo, które komórki zostały pominięte przy wysyłce (z obojętnie jakiego powodu - nieprawidłowy adres mailowy, pusta komórka czy jakiś inny błąd). Wydaje mi się, że najlepiej, żeby makro sprawdzało wykonanie instrukcji .send, ale nie upieram się. Ważne, żeby była informacja zwrotna, które maile wyszły, a które nie i żeby makro się nie zatrzymywało na błędach, tylko wysłało to, co się da.

Jeszcze jedna ważna rzecz - przy testowaniu makra póki co nie pojawiały się problemy związane z załączaniem pliku, ale mail bez załącznika powinien być traktowany przez makro jako niewysłany (bo to załącznik jest istotny dla odbiorcy). To też powinno mieć jakieś odzwierciedlenie w kodzie (np. wstrzymanie wysyłki takiego maila, uwzględnienie tego w raporcie z wysyłki i przejście do następnej komórki w pętli).

Krótko mówiąc, jak przerobić makro, żeby można było bezpiecznie je włączyć na dużym zakresie komórek, żeby sobie działało bez konieczności interwencji użytkownika, a potem wiedzieć, do których adresatów należy wysłać maile z załącznikiem jeszcze raz.

Procedura:

Sub Mailing()

Dim OutlookApp As Outlook.Application
Dim OutlookMail As Object
Dim Cell As Range
Dim Contacts As Range

Set Contacts = Sheets("e-mails").Range("A1:A10")

Set OutlookApp = New Outlook.Application
OutlookApp.Session.Logon

For Each Cell In Contacts

Set OutlookMail = OutlookApp.CreateItem(0)

With OutlookMail
.To = Cell.Value
.Subject = "Tytuł"
.Body = "Treść"
.Attachments.Add ActiveWorkbook.FullName
.Send
End With

Set OutlookMail = Nothing

Next Cell

Set OutlookApp = Nothing

End Sub
AgaG
 
Posty: 5
Dołączył(a): Śr 12.05.2021 08:27

Re: Korespondencja seryjna z poziomu Excela - VBA

Postprzez OShon » Śr 12.05.2021 09:46

No to tak dobrze że "zmusiłem Cię" do aktywnosci na tym forum.
Zaglądaj i szukaj tutaj rozwiązań bo znajdziesz ich tutaj całą masę:

Kod: Zaznacz cały
Sub Mailing()
On Error Resume Next
Dim OutlookApp As Object: Set OutlookApp = New Outlook.Application
If OutlookApp Is Nothing Then
      MsgBox "Brak Outlooka lub kontrolki w referencjach przy użyciu późnego wiązania", vbCritical, "VBATools.pl"
      Exit Sub
End If
On Error GoTo 0
Dim Contacts As Range: Set Contacts = Sheets("e-mails").Range("A1:A10")
Dim Cell As Range

OutlookApp.Session.Logon
For Each Cell In Contacts
      If Cell.Value Like "*@*.*" Then
            If email(Cell.Value) = False Then Cell.Interior.Color = vbRed
      Else
            Cell.Interior.Color = vbYellow 'zaznaczenie kolorem gdy nie mail
      End If
Next Cell
Set OutlookApp = Nothing
End Sub

Function email(komorka As Range) As Boolean
On Error GoTo koniec
Dim OutlookMail As Object: Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
      .To = komorka
      .Subject = "Tytuł"
      .Body = "Treść"
      .Attachments.Add ActiveWorkbook.FullName
      'tu sie zastanów czy nie lepiej wysyłać pliku, w którym się nie siedzi, podając ścieżkę do pliku
      .Send
      email = True
End With
koniec:
If Not OutlookMail Is Nothing Then Set OutlookMail = Nothing
End Function


polecam gotowe rozwiązania: http://vbatools.pl/email-skompresowany-zalacznik/
oraz http://vbatools.pl/email-z-obszaru-danych-arkusza/
Chyba że sobie takie sama napiszesz, za co trzymam kciuki.

Dla bardziej zaawansowanego tworzenia poczty seryjnej polecam: http://vbatools.pl/gm/
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: 11094
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: Korespondencja seryjna z poziomu Excela - VBA

Postprzez AgaG » Śr 12.05.2021 11:05

Bardzo dziękuję, ale mam jeszcze pytanie: w którym momencie jest inicjowana funkcja email i ma miejsce ewentualna wysyłka? Wydaje mi się, że powinnam jeszcze dodać jakąś instrukcję, która uruchomi tę funkcję...
AgaG
 
Posty: 5
Dołączył(a): Śr 12.05.2021 08:27

Re: Korespondencja seryjna z poziomu Excela - VBA

Postprzez OShon » Śr 12.05.2021 11:11

Warunek założony na zwrot danych z funkcji, a w niej jest wysyłany mail.

Kod: Zaznacz cały
If email(Cell.Value) = False


Możesz do tej funkcji przekazać inne dane rozszerzając wachlarz danych wejściowych.
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: 11094
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: Korespondencja seryjna z poziomu Excela - VBA

Postprzez AgaG » Śr 12.05.2021 11:13

OK, brałam to pod uwagę, ale nie miałam pewności :) Dzięki :)
AgaG
 
Posty: 5
Dołączył(a): Śr 12.05.2021 08:27

Re: Korespondencja seryjna z poziomu Excela - VBA

Postprzez AgaG » Cz 13.05.2021 16:16

Działa, choć oczywiście wymagało pewnych modyfikacji i testowania :P :D
AgaG
 
Posty: 5
Dołączył(a): Śr 12.05.2021 08:27

Re: Korespondencja seryjna z poziomu Excela - VBA

Postprzez OShon » Cz 13.05.2021 16:19

Programy czasem wymyśla się na kolanie (np przysłowiowej serwetce w pizzerni) ale aby działały to trzeba się napocić i pochylić nad składnią i testami.
Pozdrawiam
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: 11094
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: Korespondencja seryjna z poziomu Excela - VBA

Postprzez AgaG » Cz 13.05.2021 16:36

Dokładnie tak! Jeszcze raz dzięki za poświęcenie czasu :D Pozdr :)
AgaG
 
Posty: 5
Dołączył(a): Śr 12.05.2021 08:27


Powrót do Microsoft Outlook

Kto przegląda forum

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