

Ako poslať mail s viacerími riadkami z excelu do outlooku - vo VBA
Dobrý deň,
mohli by ste mi poradiť ako by som mohla poslať single mail s viacerími riadkami z excelu pomocou VBA?
Ide o to, že mám databázu s dátami a s rôznymi emailovými adresami, avšak niektoré emailové adresy sa mi opakujú. Chcela by som poslať mail tak, aby sa nemusel posielať osobitne 10 mailov jednej osobe, ale aby sa to spojilo do jedného mailu. Kód pre odosielanie mailov mám napísaný, len neviem si poradiť s tým, aby zgroupoval maily podľa adresáta. Viete mi poradiť čo je potrebné urobiť? aký kod by mi vo VBA pomohol?
Ďakujem za odpoveď
Na akej škole sú teraz takéto úlohy?
Já bych poslal ten soubor z Excelu. Třeba jen vyfiltrované řádky z původního, vložil do nového a uložil/poslal ten nový jako přílohu. Ale rovněž jde ty řádky označit > Ctrl+C přepnout se do e-mailu > Ctrl+V vložit přímo tam.
Avšak ja to potrebujem urobiť v makre cez nejaký loop, kód na posielanie mailu som napísala, ale posiela mi samostatný mai pre každý riadok, ale čo ked mam v databaže 10 riadkov pre jeden mail?
ako mám zabezpečiť to, že ak sa pod sebou bude nachádzať 10 rovnakých emailových adries, tak posle len jeden email a v texte emailu bude pod sebou vypisaných 10 rôznych riadkov?
Z toho kusého a zmateného popisu to celý nějak nechápu...
Pokud sem nedodáš tvar dat v tom XLS souboru, co a jak chceš poslat a kus kódu, který to posílání zařizuje, můžu jen konstatovat "máš to blbě".
Predpokladam, ze adresy su uz zoradene.
Potom porovnavas prvu adresu s dalsou. Ak su rovnake, pridat text k prvemu textu.
Az kym nie su adresy rozdielne.
Ak su rozdielne, mail odoslat a zacat dalsu cyklus od toho riadka, kde doslo k zmene adresy.
Tato sa stane novou prvou adresou a opakujes proces.
Toto cele opakujes, kym nie je nasledujuci riadok prazdny.
Ak to do zajtra nevyriesis, urobim ti to
Áno dáta sú zoradené podľa emailovej adresy.
na zaklade tohto kódu mi to posiela každý riadok v jednom maily, to oznamená, jeden človek dostane aj 10 mailov
Presne tento loop potrebujem. Od začiatku sa nad tým zamýšľam, že prvú adresu porovnam s tou pod tým a text pridam k tomu prvému. Ak sa nezhodujú vytvorí sa další mail a podobne.
Nižšie je kusok kódu, ak to teda pomôže
row_number = 1
lastrow = Sheets1.Cells(Rows.Count, "A").End(xlUp).Row
Do
DoEvents
row_number = row_number + 1
Dim mail_body_message As String
Dim data_replace As String
mail_body_message = Sheets1.Range("A1")
full_name = Sheets1.Range("G" & row_number) & " " & ";" & " " & Sheets1.Range("F" & row_number)
mail_body_message = Replace(mail_body_message, "data_replace", full_name)
Call SendEmail(Sheets1.Range("O" & row_number), "Invitation", mail_body_message)
Loop Until row_number = lastrow
Ďakujem veľmi pekne za pomoc
Neriešil som úpravu Tvojho kódu, urobil som to podľa seba. Prikladám v prílohe.
V mojom kóde sú adresy v stĺpci A (musia byť zoradené) a jednotlivé texty mailov v stĺpci B
Prvý riadok je záhlavie, preto začínam od riadka č 2
Tento kód Ti vyrobí náhľady jednotlivých mailov (kvôli kontrole a dopĺňaniu), zmenu na ostré zasielanie urobíš tým, že z .Display urobíš poznámku a oživíš .Send zrušením poznámky
Zasielanie kópií alebo pridaného textu a úpravu predmetu si už asi budeš vedieť urobiť...

Oooo, perfektne
ďakujem veľmi pekne, ani si nevieš predstaviť ako mi toto pomôže
presne toto som potrebovala vedieť ako sa má urobiť správne tento loop
Ešte raz ďakujem krásne 

idem si to hneď vyskušať a aaplikovať na svoje makro a dufam, že mi to už pôjde ako by som chcela
Ešte by som sa chcela spýtať, to Chr(13) slúži na pridanie dalšieho riadku? vlastne ako keby to bol Enter, ak som to spravne pochopila?
a tento kód je dobre mať v každom takom makre na rozposielanie mailov, aby sa nezaplnil outlook, však?
Set OutMail = Nothing
Set OutApp = Nothing
Ššššššššikovné dievčatko! Pochopilo!
Áno, Chr(13) je zariadkovanie
A tie Nothing... poviem, ako vravieva Miňo Demovič: "Nooo, neviem Ti to takto z hlavy povedať...".
Na začiatku je potrebné zadefinovať objekty OutApp a OutMail, aby sme im mohli priradiť vlastnosti (.To, .Subject, .Body, ...) a použiť na nich metódy (.Display, .Send, ...)
V podstate v takomto prípade by tam možno na konci tie Nothing ani nemuseli byť, keďže obor platnosti týchto objektov je len v rámci procedúry a týmpádom jej opustením sú zabudnuté.
Ani keby v procedúre Zásielka existoval ďalší kód, ktorý by zariadil, že sa procedúra neopustí ale vracia sa niekam za definovanie objektov a opakuje sa (s tým, že by sa "interne" t.j. v rámci procedúry napĺňali nové hodnoty vlastností), v podstate by dochádzalo k prepisovaniu vlastností. To je niečo podobné, ako keď ľubovoľnej premennej, už obsahujúcej nejakú hodnotu, priradíš novú hodnotu. Nič sa nedeje. Problém by nastal, keby si v niektorom z cyklov neprepisovala hodnotu na novú: ostala by zachovaná pôvodná vlastnosť. Keby tam v danom okamihu tá vlastnosť nepatrila, musela by si jej priradiť prázdnu hodnotu. Presne to robí "Nothing" pre naše objekty. Ale ako vravím a ak to sám dobre chápem, v takomto prípade by to tam ani nemuselo byť.
ALE... ako povedala aj babička Boženy Nemcovej: "Poriadok musí byť", povedala babička a odkopla h...o pod posteľ.
Nasmiala som sa riadne
toľko prirovnaní

Tak teda ozaj ďakujem veľmi pekne, prispôsobila som si to svojmu makru
ale princíp som pochopila a všetko mi ide ako by malo, už len par veci tam musím doladiť a všetko bude fičať ako chcem 
A pre poriadok som tam to Nothing nechala
nič tým nepokazim 
Presne tak.
Šikulka
Něco z tohoto nepomůže? Google: excel vba group rows