logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

VBA- automatyczne wysyłanie maili przez Outlooka uzupełnione danymi z tabel w excelu

czajka11 11 Lip 2023 23:35 738 7
REKLAMA
  • #1 20650950
    czajka11
    Poziom 3  
    Posty: 5
    Cześć,
    mam prośbę czy jest osoba, która by mi pomogła z napisaniem kodu w VBA do automatycznego wysyłania maili Outlookiem? Mam jeden plik, do którego dokładam wiersze z danymi i na tej podstawie chce wysłać maila z automatycznie wypełnionymi danymi już w mailu, które przed chwilą wpisałem w tym wierszu. Tak, żeby w odpowiednim miejscu zaciągało dane z odpowiednich kolumn w wierszu który zaznaczyłem. Chciałbym, żeby mail adresata zaciągnął po nazwie dostawcy z tabeli, którego w danym wierszu wpisze (ze screena z kolumny E) i wyszuka go w innym drugim arkuszu, gdzie przy każdej nazwie dostawcy mam wypisane ich maile. Ten drugi arkusz nazywa się "Lista dostawców", w kolumnie C mam nazwy dostawców a w kolumnie K ich emaile do zaciągnięcia w przypadku gdy ich nazwa wystąpi. W Temacie chciałbym, żeby zaciągało dane z kolumny "Typ zgłoszenia"(kolumna J) dla danego wiersza oraz z kolumny "Numer zamówienia"(kolumna D). W tekście byłoby tak samo, tylko żeby zaciągało więcej kolumn takich jak "Numer zamówienia", "Ilość", "Partia", "Data", a pod tym "Opis problemu", "Czas trwania". Przesyłam screena tabeli jak to wygląda w arkuszu. Sama tabela ma dużo więcej wierszy wypełnionych, ta jest przykładowa. Dodaje ręcznie kolejne wartości pod ostatnim wypełnionym wierszem.
    VBA- automatyczne wysyłanie maili przez Outlooka uzupełnione danymi z tabel w excelu
    Sam napisałem prosty kod ale wysyła maile do wszystkich osób, a nie tylko do odpowiednich osób w zależności od dostawcy i automatycznie dane się nie zaciągają z kolumn w danym wierszu, dlatego bardzo bym prosił o wszelaką pomoc i byłbym bardzo wdzięczny.

    EDIT:
    Udało mi się zrobić żeby wysyłało do ostatniego wiersza, jednak nie wiem jak zrobić, żeby ten email był zaciągany na podstawie nazwy w głównym arkuszu i wyszukał ta nazwę w innym arkuszu i dla danej nazwy wyciągnął maila. Oraz czy może znajdywać ostatnią używany wiersz w arkuszu dane po 2 kolumnie a nie po 1, ponieważ nieraz w 1 kolumnie mam puste i nie ma żadnych wartości przez co nie bierze tego jako ostatni wiersz.

    Sub WyslijMaile()
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim LastRow As Long

    Set OutlookApp = CreateObject("Outlook.Application")
    LastRow = Sheets("2023").Cells(Rows.Count, 1).End(xlUp).Row

    Set OutlookMail = OutlookApp.CreateItem(0)
    On Error Resume Next

    With OutlookMail
    .To = Sheets("2023").Cells(LastRow, 5).Value
    .Subject = Sheets("2023").Cells(LastRow, 5).Value & Chr(58) & " " & Sheets("2023").Cells(LastRow, 5).Value
    .Body = Sheets("2023").Cells(LastRow, 5).Value & Chr(47) & Sheets("2023").Cells(LastRow, 9) & Chr(47) & Sheets("2023").Cells(LastRow, 10) & Chr(47) & Sheets("2023").Cells(LastRow, 2) & vbCrLf & _
    Sheets("2023").Cells(LastRow, 6) & vbCrLf & _
    Sheets("2023").Cells(LastRow, 9) & vbCrLf & vbCrLf & _
    "Proszę o analizę oraz CAPA"
    .Display
    End With

    On Error GoTo 0

    Set OutlookMail = Nothing
    Set OutlookApp = Nothing

    End Sub
  • REKLAMA
  • Pomocny post
    #2 20658588
    marek003
    Poziom 40  
    Posty: 4601
    Pomógł: 799
    Ocena: 483
    Czemu jak już zrobiłeś przykład nie załączyłeś go do postu? (spakuj na przyszłość zipem i załącz)

    Po prostu wykorzystaj funkcję wyszukaj.pionowo()
    Zamknąłem w pętli i sprawdza po kolumnie M czy wysłano (dlatego tez na końcu pyta czy wysłałeś.


    Poniżej z paroma "wodotryskami".
    Makro nie sprawdza poprawności adresu mailowego więc jeżeli będzie zły a ty wciśniesz wyślij bez podglądu to zwróci błąd.
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
    Załączniki:
    • Zeszyt1.xls (66.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #3 20705960
    czajka11
    Poziom 3  
    Posty: 5
    Dziękuje za odpowiedz i za pomoc. Sam zapomniałem o tym i wyrzuciłem to w kąt bo nikt nie odpisywał. Mam kolejny problem, ponieważ chce zrobić żeby w tekście pojawił się hiperlink do danego pliku i po kliknięciu na dane słowo, by otwierało dany plik. Plik jest na dysku wspólnym E (chmurze). Sam napisałem taki kod, ale wyskakuje błąd i cały .htmlbody jest na czerowono ("Expected: End of statement"). Proszę o pomoc co tu jest źle i wskazówki jak to wpisać w kod w słowa "Ma nowe wpisy" żeby otwierał się ten plik.

    Sub Mail_Mikrobiologia()
    Dim OutApp As Object
    Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)


    On Error Resume Next
    With OutMail
    .To = "XXX; XXX"
    .CC = ""
    .BCC = ""
    .Subject = "Odnotowanie"
    .HTMLBody = "Cześć," & "<br>" & "<br>" & _
    "<a href="file///E:\dokumenty\Analizy środowiskowe Ewa\B. po zmianach 17.08.xlsm"Plik z monitoringiem środowiska"</a>" ma nowe wpisy." & "<br>" & "<br>" & _
    "Prośba o sprawdzenie" & "<br>" & "<br>" & _
    "Pozdrawiamy," & "<br>" & _
    "Zespół Mibio"
    .Display

    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing

    End Sub
  • REKLAMA
  • Pomocny post
    #4 20706905
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    czajka11 napisał:
    Proszę o pomoc co tu jest źle i wskazówki jak to wpisać w kod w słowa "Ma nowe wpisy" żeby otwierał się ten plik.

    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • #5 20707254
    czajka11
    Poziom 3  
    Posty: 5
    Super, dziękuje bardzo za pomoc. Teraz już działa!
  • #6 20720665
    czajka11
    Poziom 3  
    Posty: 5
    Mam kolejne pytanie, ponieważ mam plik w którym mam w 1 pliku 3 arkusze: "powietrze", "powierzchnie", "podłogi". w których mam tabele od kolumny B do kolumny M od wiersza 4. W tych tabelach w kolumnie I działa formatowanie warunkowe, które zaznacza komórkę jak wystąpią dane słowa zaczynające się od "Escherichia" "Staphylococcus" "Candida". Czy jest możliwość żeby w kolejnym arkuszu przykładowo pod nazwą "rejestr" automatycznie przeszukiwał wszystkie te 3 tabele z tych 3 arkuszy i kopiował te wiersze wklejając do tego arkusza "rejestr" przez co by się tworzyła tabela tylko z tymi słowami?

    Zrzut ekranu arkusza kalkulacyjnego z tabelą zawierającą dane dotyczące próbek i diagnostyki.

    Tak wygląda rejestr o który mi chodzi, tylko że na ten moment jest to ręcznie szukane i wklejane tutaj.
    Z góry dziękuje za pomoc.
  • #7 20742996
    czajka11
    Poziom 3  
    Posty: 5
    Próbowałem, również stworzyć tabele w vba, lecz mi nie wychodzi. Czy chciałby ktoś powiedzieć gdzie jest błąd? W tym kodzie co napisałem nie tworzy się w ogóle obramowanie tabeli i źle to wygląda.

    " <th>Nazwa</th> <th>Proponowana firma w metodzie</th> <th>Nr katalogowy</th> <th>Ilość w g lub ml</th> <th>Metoda (nr GTM)</th> & "<br>" & "<br>" & _
    Powyżej to jest kod, a do takiej tabeli dążyłem

    Tabela bez danych z pustymi komórkami i obramowaniem.

    Proszę o pomoc!
  • REKLAMA
  • Pomocny post
    #8 20743760
    OJM
    Poziom 17  
    Posty: 133
    Pomógł: 29
    Ocena: 38
    A gdzie masz określone jak mają wyglądać komórki i krawędzie tabelki?
    Popatrz tu Link i tu Link oraz tu Link, szybko zobaczysz czego u Ciebie brakuje.

    Tu masz generator tabelek w HTMLu, a tu nawet lepszy, bo widzisz efekt Link
  • Podsumowanie tematu

    ✨ Użytkownik poszukiwał pomocy w napisaniu kodu VBA do automatycznego wysyłania e-maili przez Outlooka, z danymi pobieranymi z tabel w Excelu. W odpowiedziach zasugerowano wykorzystanie funkcji wyszukaj.pionowo() oraz przedstawiono przykładowy kod makra, które umożliwia wysyłanie wiadomości e-mail z danymi z określonych kolumn. Użytkownik dodał, że chciałby umieścić hiperlink do pliku w treści wiadomości, co również zostało rozwiązane poprzez poprawne sformatowanie kodu HTML. W kolejnych pytaniach użytkownik poruszył kwestie związane z kopiowaniem danych z kilku arkuszy do jednego oraz formatowaniem tabeli w HTML, na co otrzymał wskazówki dotyczące poprawnego tworzenia tabeli w VBA.
    Wygenerowane przez model językowy.
    REKLAMA
    "" "" "" "" ""