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 - makro wysyłanie maila z komunikatem z tabeli do odbiorców z tebeli ws.błęd

MagdKacz 22 Maj 2019 15:47 2778 13
REKLAMA
  • #1 17974652
    MagdKacz
    Poziom 5  
    Posty: 14
    Witajcie, mam prośbę o wsparcie dot. wprowadzenia w kodzie makra wysyłania maili treści zawartej w komórce dotyczącej znalezionego w tabeli błędu.
    Przykładowo mając tabelę A1:C3, excel znajduje błąd w komórce A3 która się zapala, obok w komórce B3 wyświetla się treść komunikatu jaki powinien być wysłany do użytkownika , jako część maila, a w komórce C3 wyświetlają się odbiorcy maila.

    Jak zaprojektować makro wysyłające poszczególne maile do osób wskazanych w komórce C3 z treścią z komórki B3 np.
    Wstępnie przygotowałam makro jak niżej, ale jest bardzo ogólne, działa ale nie wysyła danych jak wyżej wskazałam.
    Jak je zmodyfikować?

    Kod: text
    Zaloguj się, aby zobaczyć kod
    kodu makra tutaj chca
  • REKLAMA
  • REKLAMA
  • #3 17976020
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    I jeszcze taki drobiazg: wszędzie pokazują taki schemat jak powyżej, a ja wolę nieco inny: with CreateObject("Outlook.Application").CreateItem(0) i dalej działa tak samo bez jawnego deklarowania tych obiektów. Zna ktoś przeciwwskazania?

    Dodano po 7 [minuty]:

    A może wolisz wykorzystać swój podpis zdefiniowany w Outlooku? To trzeba zrobić
    .Display
    żeby się pojawił, a potem
    .HTMLBody = "treść maila" & .HTMLBody
    W tym przypadku musisz się posługiwać HTMLem, bo mój podpis taki jest, ale da się podobnie i zwykłym tekstem.
  • REKLAMA
  • #4 17976596
    MagdKacz
    Poziom 5  
    Posty: 14
    Dzięki za podpowiedzi, wykorzystując wasze uwagi przygotowałam wstępną treść kodu jak niżej zgodnie już z docelowym zapotrzebowaniem.. generalnie żeby omijał puste pola a wysyłał tylko tam gdzie jest "pełne".. tyle że nie chce działać.. może jakaś podpowiedź?.. pomysł?..

    Kod: text
    Zaloguj się, aby zobaczyć kod
    jakaś
  • #5 17976896
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    Musisz 'zamienić' pętle z warunkiem 'if'
    Co to jest to 'k' pętla ma działać dopóki znajduje "k"?
  • #6 17977411
    MagdKacz
    Poziom 5  
    Posty: 14
    Tak ma analizować tabele dopóki nie znajdzie wartości "k" tak to wstępnie obmyśliłam.. to oczywiście nie jest rozwiązanie idealne, ale tabela jest aktualizowana przez system i ma zmienne wartości.
  • #7 17977803
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    To może jakoś tak:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • #8 17977935
    MagdKacz
    Poziom 5  
    Posty: 14
    clubs napisał:
    Musisz 'zamienić' pętle z warunkiem 'if'
    Co to jest to 'k' pętla ma działać dopóki znajduje "k"?


    Nie mogę sobie poradzić, tj. czuję że wykładam się na jakichś podstawowych rzeczach ale makro nie chce działać, kod jak niżej.. jakaś podpowiedź?

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dodano po 2 [godziny] 32 [minuty]:

    kinggustav napisał:
    To może jakoś tak:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod


    No niestety też nie działa... :(
  • #9 17978356
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    Zdefiniuj "nie działa.
  • REKLAMA
  • #10 17978373
    MagdKacz
    Poziom 5  
    Posty: 14
    kinggustav napisał:
    Zdefiniuj "nie działa.


    Po odpaleni Run nie podejmuje żadnego działania..
    Na pewno jest coś źle z tą częścią:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Próbowałam też tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    I faktycznie coś mi ta pętla przeszkadza..
  • #11 17978420
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    Sprawdziłem, że samo makro po skopiowaniu jest składniowo poprawne. Logicznie nie sprawdzałem, bo nie mam danych. Niemożliwe żeby wogóle nie działało. Postaw kursor na procedurze i wciśnij F8. Idzie? Pewnie tak, to znowu F8 i popatrz którędy idzie i dlaczego ucieka z pętli. W linijce, gdzie coś jest nie tak możesz podejrzeć zmienne
    Daj na końcu jakiś MsgBox "Gotowe", zawsze będziesz wiedzieć czy działa, tylko nie ma nic do zrobienia, czy wcale nie rusza.
    Jeżeli nie chodzi (mało prawdopodobne) to zakomentuj wszystkie linie - wtedy musi iść, potem odkomentuj coś i sprawdzaj aż znajdziesz felerny wiersz, który powoduje błąd.
    Zastanawiam się czy trafia we właściwe komórki. Twój X sugeruje kolumny, a Cells jako pierwszy parametr ma wiersz, nie kolumnę.
  • #12 17978443
    MagdKacz
    Poziom 5  
    Posty: 14
    kinggustav napisał:
    Sprawdziłem, że samo makro po skopiowaniu jest składniowo poprawne. Logicznie nie sprawdzałem, bo nie mam danych. Niemożliwe żeby wogóle nie działało. Postaw kursor na procedurze i wciśnij F8. Idzie? Pewnie tak, to znowu F8 i popatrz którędy idzie i dlaczego ucieka z pętli. W linijce, gdzie coś jest nie tak możesz podejrzeć zmienne


    Kod wygląda jak niżej:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    I ostatnią na przejścciu z F8 jest :
    Kod: text
    Zaloguj się, aby zobaczyć kod

    a później od razu:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Odnośnie
    kinggustav napisał:

    Zastanawiam się czy trafia we właściwe komórki. Twój X sugeruje kolumny, a Cells jako pierwszy parametr ma wiersz, nie kolumnę.

    Tak tafia na dobre x-to ilość wierszy, a 43 to nr kolumny.
    Zastanawia mnie dlaczego nie przechodzi całej pętli.. tak jakby nie rozumiał Do While.. i if..
  • #13 17978500
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    Niemożliwe, żeby instrukcje się źle wykonywały. Sprawdź co masz w tej komórce. Ja zwykle robię to tak:
    1. Musisz włączyć okno Immediate w edytorze VBA
    2. dojdź (F8) do linijki w której jest źle i w oknie Immediate wpisz
    ? Cells(x, 43)
    Analogicznie sprawdzisz inne zmienne, np. ? x
    3. Po Enterze powinna się pokazać wartość z komórki (i pewnie będzie tam K), jeżeli nie to co trzeba to zrób Cells(x,43).select, żeby zobaczyć która to komórka.
    Nie lubię liczyć kolumn, dla dużych numerów raczej stosuję zapis typu Cells(z, "AQ"), gdzie AQ to numer kolumny, który widać na ekranie.

    Dodano po 4 [minuty]:

    Nie zauważyłem, że warunek jest odwrócony. Ma być <> "K" a nie =.
  • #14 17978573
    MagdKacz
    Poziom 5  
    Posty: 14
    Działa!

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Serdeczne dzięki właśnie chodziło o te nieszczęsne K!!!

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik prosi o pomoc w modyfikacji makra VBA, które ma wysyłać maile z treścią błędów z tabeli w Excelu. W tabeli A1:C3, błędy są oznaczone w kolumnie A, komunikaty w kolumnie B, a odbiorcy w kolumnie C. Użytkownik początkowo stworzył ogólne makro, które nie działa zgodnie z zamierzeniami. Po kilku sugestiach i poprawkach, w tym zmianie warunków pętli oraz użyciu metody .Display do wyświetlania wiadomości, udało się stworzyć działające makro, które wysyła maile do odbiorców z odpowiednimi komunikatami. Kluczowym problemem okazało się poprawne zdefiniowanie warunków pętli oraz odpowiednie przypisanie wartości do zmiennych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA