Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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ď

Předmět Autor Datum
Na akej škole sú teraz takéto úlohy?
pozorovateľ 19.11.2017 20:31
pozorovateľ
Já bych poslal ten soubor z Excelu. Třeba jen vyfiltrované řádky z původního, vložil do nového a ulo…
Kráťa 19.11.2017 21:00
Kráťa
Avšak ja to potrebujem urobiť v makre cez nejaký loop, kód na posielanie mailu som napísala, ale pos…
Zuz123 20.11.2017 19:06
Zuz123
Z toho kusého a zmateného popisu to celý nějak nechápu... Pokud sem nedodáš tvar dat v tom XLS soubo…
Zdenál 20.11.2017 19:23
Zdenál
Predpokladam, ze adresy su uz zoradene. Potom porovnavas prvu adresu s dalsou. Ak su rovnake, pridat…
robert13 20.11.2017 19:37
robert13
Áno dáta sú zoradené podľa emailovej adresy. Presne tento loop potrebujem. Od začiatku sa nad tým za…
Zuz123 20.11.2017 22:13
Zuz123
Neriešil som úpravu Tvojho kódu, urobil som to podľa seba. Prikladám v prílohe. V mojom kóde sú adr…
robert13 21.11.2017 08:23
robert13
Oooo, perfektne :-) ďakujem veľmi pekne, ani si nevieš predstaviť ako mi toto pomôže :-) presne toto…
Zuz123 21.11.2017 20:48
Zuz123
Ššššššššikovné dievčatko! Pochopilo! ;-) Áno, Chr(13) je zariadkovanie A tie Nothing... poviem, ak…
robert13 22.11.2017 07:44
robert13
Nasmiala som sa riadne :-D:-D:-D:-D:-D:-D:-D toľko prirovnaní :-D:-D Tak teda ozaj ďakujem veľmi pe…
Zuz123 26.11.2017 18:14
Zuz123
Presne tak. Šikulka ;-) poslední
robert13 27.11.2017 10:59
robert13
Něco z tohoto nepomůže? Google: excel vba group rows
host 20.11.2017 19:14
host

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?

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.
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 :-) na zaklade tohto kódu mi to posiela každý riadok v jednom maily, to oznamená, jeden človek dostane aj 10 mailov

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ť...". :-D
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 :-D :-D :-D :-D :-D :-D :-D toľko prirovnaní :-D :-D

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 :-D nič tým nepokazim :-)

Zpět do poradny Odpovědět na původní otázku Nahoru