Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA - makro wysyłanie maila z komunikatem z tabeli do odbiorców z tebeli ws.błęd

22 Maj 2019 15:47 180 13
  • Poziom 4  
    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: vba
    Zaloguj się, aby zobaczyć kod
    kodu makra tutaj chca
  • Poziom 21  
    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.
  • Poziom 4  
    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: vba
    Zaloguj się, aby zobaczyć kod
    jakaś
  • Poziom 33  
    Musisz 'zamienić' pętle z warunkiem 'if'
    Co to jest to 'k' pętla ma działać dopóki znajduje "k"?
  • Poziom 4  
    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.
  • Poziom 21  
    To może jakoś tak:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 4  
    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: vba
    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... :(
  • Poziom 21  
    Zdefiniuj "nie działa.
  • Poziom 4  
    kinggustav napisał:
    Zdefiniuj "nie działa.


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


    Próbowałam też tak:

    Kod: vba
    Zaloguj się, aby zobaczyć kod


    I faktycznie coś mi ta pętla przeszkadza..
  • Poziom 21  
    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ę.
  • Poziom 4  
    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: vba
    Zaloguj się, aby zobaczyć kod


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

    a później od razu:
    Kod: vba
    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..
  • Poziom 21  
    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 =.
  • Poziom 4  
    Działa!

    Kod: vba
    Zaloguj się, aby zobaczyć kod


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