Wysłanie wiadomości email z Excela. Praktycznie o programowaniu w VBA
Вставка
- Опубліковано 23 сер 2024
- Wysłanie wiadomości email z Excela. Praktycznie o programowaniu w VBA.
W tym filmie zobaczysz jak włączyć możliwość korzystania z bibliotek Outlooka w Excelu. Wywołamy sobie klienta poczty, napiszemy maila i oczywiście wyślemy.
Wpisywanie adresów mailowych w kodzie VBA nie jest dobrym pomysłem, więc wprowadzimy pętlę For Each, która odezwie się do komórek przygotowanej tabeli z lista maili.
Wyśle maila do każdego z bazy danych. Nasz baza, to tabela, więc można do niej dodawać nowe wiersze, które będą brane pod uwagę jako nowe maile do wysyłki.
Jeśli chcesz zacząć programować w dowolnym języku, to warto zacząć właśnie od Visual Basic for Application. Jest to prosty język, który wprowadzi Cię w świat pętli, skoków, deklaracji zmiennych, instrukcji warunkowych.
Z łatwością przejdziesz później do innych języków.
W programowaniu liczy się podejście, a tego nauczysz się programując w dowolnym języku.
Jeśli jesteś osobą początkującą, to zapraszam do oglądania siedmiu poprzednich odcinków, w których pokazałem, jak zacząć zabawę z rejestratorem makr. Zarejestrujesz swoje pierwsze makro i poddasz je edycji. W pierwszym filmie pokazuję jak odnaleźć się w edytorze Visual Basic i które polecenia przydają się na początku.
Drugi film, to już konkretny przykład zastosowania pętli For, deklaracja zmiennych i zarządzanie rekordami bazy danych. Wszystko oczywiście w pełni automatycznie.
Jeśli uznasz, że ten materiał nadaje się do nauki programowania, to podaj film dalej, aby wszyscy mogli zacząć przygodę z Excelem, na poziomie makr.
Pisz śmiało w komentarzu, jak podoba Ci się taka forma nauki i jak oceniasz film. Życzę Ci skutecznej nauki i miłego odbioru‼️
Potrzebujesz konkretnej wiedzy?
Sprawdź moje szkolenia na stronie norbertwaszak.pl
Ucz się za free na moim profilu Facebook / include.akademia
Znajdź mnie na Instagramie / norbertwaszak
DZIĘKI, ŻE OGLĄDAŁEŚ!
Super webinar tak jak wszystkie o VBA,
Dzięki 👍. Tak jak obiecałem plik do ściągnięcia w moim pierwszym komentarzu. Do zobaczenia w środę o 18:00. Będziesz?
@UCh0D2OykFYaUKf9w5Ose5hg Mam już 34 filmy do kursu o VBA. Niebawem ogłosimy Przedsprzedaż. Mam już na mojej stronie norbertwaszak.pl kurs z podstaw i osobny do tabeli przestawnej. Docelowo kończę VBA i zaczynam serie Power (Query, Pivot, BI).
@@IncludeAkademia super w kurs VBA wchodzę, Power query teraz się uczę :)
Prosto i na temat, dziękuję
Proszę bardzo😀
Wysyłamy maila z poziomu Excel. Link do pliku z filmu:
norbertwaszak.pl/wp-content/uploads/2021/04/wysylka-maili2.xls
Dzień dobry, a jak wysłać dany arkusz (lub jego zakres) nie jako załącznik, ale w treści e-maila - nie tracąc formatowania?
złoto
Bardzo dziekuje za film. Bardzo pomocny. Czy bylaby mozliwosc pokazania rowniez jak zautomatyzowac pobranie tytulu maila i tekstu maila z excela? Spotkalam sie z tym raz. Jak co miesiac wysyla sie raport - te same kontakty, tytul - i w tresci miesiac sie tylko zmienia.
Dzięki. Trzeba zadeklarować zmienną typu string dla tytułu i treści. przypisać do zmiennych wartości z komórek, a następnie wprowadzić ją w miejsca odpowiedzialne za te informacje w kodzie.
ok
Ok👍
Bardzo pomocny film, jednak mam pewien problem.. Pisząc treść maila i używając polskich znaków, po wygenerowaniu się wiadomości w outlooku polskie znaki zamieniane są na "znaczki". Jak można to zmienić?
Moim skromnym zdaniem wina leży po stronie ustawień kodowania znaków. Nie ma problemu z kodem, tylko z ustawieniami Outlooka.
a jak zrobic uwarunkowanie żeby np po spełnieniu szeregu warunków w excelu (konkretne komórki = konkretna wartość) outlook wysyłał na bieżąco maila na adres z tego excela? Tylko nie wszystko na raz tylko sekwencyjne. Warunki są spełnione to wyślij maila do tej osoby spełniającej warunki.
Wewnątrz pętli FOR EACH możesz wstawić warunek IF np. If MojaKomorka.Offset(0, 1).Value = "wyślij" Then ..... W tym przykładzie, jeśli w komórce położonej o jedną w prawo ( Offset(0,1)) pojawi się napis wyślij, wtedy (THEN), i cała reszta kodu wysyłania. Na końcu trzeba wstawić END IF.
Mógłbyś napisać jak zrobić, żeby mail był wysyłany tylko do jednej osoby z bazy danych maili, a będzie wiedział, do którego wysłać przez ich indywidualne id, które musi się zgadzać z id z innego pliku?(coś w stylu wyszukaj pionowo ale w vba) Chce żeby ten przycisk był uniwersalny i wypełniał wszystko automatycznie z zależności do jakiej osoby mam sprawę, a nie do wszystkich. Z góry dziękuje!
Wyszukaj.pionowo w VBA można uzyskać za pomocą Application.WorksheetsFunction.vlookup. Nie piszę, że to najlepszy sposób ale jeśli znasz dobrze vlookup, to najszybciej napiszesz to w ten sposób.
Czy jeżeli chce wysłać osobnego maila do każdego odbiorcy z listy to wystarczy zamienić
.To = .To & Chr(59) & komorka.Value na .To = komorka.Value ??
Cześć Iza. Wiadomość tworzona jest przed pętlą For, więc kod tworzy wiadomość, a następnie w pętli dodaje kontakty. Twoja propozycja zmiany, stworzy jedną wiadomość i zacznie uzupełniać pole Do: kontaktami, za każdym razem zamieniając adres email kolejnym z listy. Ostatecznie wyśle jednego maila, tylko do ostatniej osoby z listy kontaktów. Aby wysłać osobnego maila do każdego z listy kontaktów powinnaś w pętli FOR zapisać tworzenie maila, wybór kontaktu (Twoja propozycja) i wysłanie maila. Pętla wykona za każdym przejściem całą procedurę tworzenia, dodania kontaktu i wysłania od nowa. Powodzenia :)
a czy sie da zrobic tak, że gdy otrzymam odpowiedz na mojego maila ktorego wysłałem za pomocą tego makra, to np komórka J6 zmieni kolor?
Cześć Michał. Zapewne tak. Mamy w Excelu dostęp do obiektów Outlook. Problem jest, gdy mówimy o odpowiedzi na konkretny mail. Nie miałem jeszcze do czynienia z takim zadaniem. Trzeba rozpisać problem na części i każdą cześć rozwiązać. Jeśli kiedyś wpadnę na pomysł rozwiązania tej zagadki, to dam znać 👍
Witam, a jak wysłać tylko jeden Arkusz z wielu z pliku Excela ?
Cześć. Jeśli ma iść jako załącznik, to przed wysłaniem trzeba te arkusze z kilku plików zapakować w jeden. Można to zrobić za pomocą VBA lub PowerQuery.
mam problem z odpalaniem tego makra automatycznie, z exela wysyła maile i jest super. Lecz ustawiłem harmonogram dla pliku .vbs jednak on nie wysyła maili
Wojtek, moim skromnym zdaniem w pliku vbs musisz stworzyć odwołanie do wszystkich obiektów Excela z jakich korzystasz (oraz skoroszytu i arkusza, jeśli te obiekty są w makrze wykorzystywane). VBA to pasożyt i potrzebuje aplikacji do działania. Jeśli w skrypcie odpalanym bez Excela nie dasz mu wszystkich obiektów i referencji, to zdechnie. Pozdrawiam.
Cześć.
Czy można w takim przypadku dodać nie "zwykły podpis" tylko stopkę z Outluk'a ?
Próbowałem to ogarnąć i poległem. Jak znajdę rozwiązanie, to się podzielę😀
Coś pokombinowałem i poniższe rozwiązanie działa. Trzeba tylko konkretnie znaleźć ścieżkę do pliku z podpisem i użyć w kodzie.
Nie udało mi się tylko , żeby podpis właściwie wyświetlał użyte obrazki np. .jpg...
Option Explicit
Sub WstawKonkretnyPodpisHTML()
Dim SignatureFilePath As String
Dim Signature As String
Dim Email As Object
' Ustalanie ścieżki do pliku zawierającego podpis
SignatureFilePath = "C:\Users\(nazwaużytkownika)\AppData\Roaming\Microsoft\Signatures\(nazwapodpisu).htm"
' Sprawdź, czy plik podpisu istnieje
If Dir(SignatureFilePath) "" Then
' Otwieranie pliku i odczytywanie zawartości
Dim SignatureFile As Object
Set SignatureFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(SignatureFilePath)
Signature = SignatureFile.ReadAll
SignatureFile.Close
' Inicjalizacja aplikacji Outlook
Set Email = CreateObject("Outlook.Application").CreateItem(0) ' 0 reprezentuje olMailItem
Email.To = "adres@domena.com"
' Wstawianie podpisu do wiadomości e-mail
Email.HTMLBody = Email.HTMLBody & Signature
' Wyświetlenie wiadomości e-mail w Outlooku
Email.Display
'.send ' do odblokowania jeśli ma wysłać automatycznie
Else
MsgBox "Nie znaleziono pliku podpisu."
End If
End Sub
@@IncludeAkademia
a jak bym chciał żeby do każdego poszedł osobny email ?
Pętla powoduje, że każdy rekord bazy danych to osobny mail. Jeśli chcesz do każdego wysłać inną treść, to zapisz tą treść w bazie danych (np. Excel, komórka obok) i zmień w pętli aby treść za każdym razem była pobierana. O to chodziło?
juz przy tworzeniu pierwszej zmiennej Dim Oat as Outlook.Application mam bład "User-defined type not defined". jak to pokonac?
udalo się obejść
Dim Oap As Object
Dim Omail As Object
Set Oap = CreateObject("Outlook.Application")
Set Omail = Oap.CreateItem(0)
Gra muzyka👍