Excel sayfasını mail ile gönderilmesi konusu bir kaç zamandır aklımdaydı. Hem verileri yada içerikleri taşımaya üşenir hale gelmiştim, hem de pratik gelmiyordu. Zaten verilerin ve bunlara bağlı özetlerin Excel benzeri uygulamalar üzerinde oluşunu oldum olası kabul edemedim. Ne zamandır aktif kod yazmıyordum, biraz pasları sökelim dedim ve sıvadım kolları.
Öncelikle 2 hedefim var;
- Bir ayar sayfası hazırlamak ve bu sayfada mailin gideceği adresleri, mail konusu gibi içerikleri tutmak
- PDF haline getirilecek özet sayfayı gönderme hazırlığı
Ayarlar sayfası (sheet’i) görüntüsü kabaca şu şekilde;
Paylaşılacak gelişi güzel hazırladığım İçerik sayfasının (sheetinin) görüntüsü şöyledir;
İçerik sayfasına Geliştirici sekmesinde, Ekle çantası içinden bir buton koyuyoruz ve onunla beraber açılan script ekle sayfasından “YENİ” diyerek geliştirici alanına geçiyoruz.
Açılan VBA ekranına aşağıdaki açıklamalarını yaptığım bloğu direkt ekleyebilirsiniz. Kod içinde açıklama ve notlarımı aldım; detaylarını oradan da izleyebilirsiniz;
'Hakan Müştak @2020 'Excel ve PDF dökümanımızın yol tanımlamalarını yapıyoruz Dim dosyaPath As String, pdfPath As String dosyaPath = ThisWorkbook.Path pdfPath = "Mustak-org.pdf" 'PDF dosyamızı oluşturuyoruz Sheets("İçerik").ExportAsFixedFormat Type:=xlTypePDF, Filename:=dosyaPath & "\" & pdfPath, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False 'Sistemimide yüklü Mail uygulaması Outlook olduğu için nesneyi ona göre yaratıyorum Set dam = CreateObject("Outlook.Application").CreateItem(0) 'Yarattığım nesneye göre mail header'ını oluşturuyorum With dam 'TO,CC,bCC ve Subject içeriklerini Ayarlar sayfasında, kullanıcıdan çekiyoruz .to = ThisWorkbook.Sheets("Ayarlar").Range("C3") .cc = ThisWorkbook.Sheets("Ayarlar").Range("C4") .bcc = ThisWorkbook.Sheets("Ayarlar").Range("C5") .Subject = ThisWorkbook.Sheets("Ayarlar").Range("C2") 'Mail içeriğini de Ayarlar sayfasından çekebilirdik ama direkte yazma örneğimiz olsun .Body = "Merhaba," & vbNewLine & _ " excel dışında buradan gövdeyi yazalım istedim." & _ " Buradan da gönderebileceğimiz gibi içeriden de çekebiliriz." & _ vbNewLine & vbNewLine 'Dosyayı ekledik .Attachments.Add dosyaPath & "\" & pdfPath 've gönderdik .Send End With ' adettendir, birde mesaj yazalım MsgBox "Email gönderildi"
Sonrasında gönderilen maili şöyle görüntüleyebilirsiniz;
Peki pdf nasıl gözüküyor olabilir?
Mevcut kompleks çalışma yapımla, bana eski yöntemime göre (tek tek bul, kopyala, yapıştır) çok çok daha pratik bir yol oldu. Böyle bir hazır tool bana önerilseydi, satın bile alabilirdim. Kolları sıvayınca oluyor her şey. İhtiyaç duyduğunuz her ne varsa; Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur [M.K. Atatürk]
Yorum, fikir ve sorularınız olursa yoruma yazabilirsiniz.
Hakan Müştak
@2020
Hocam HTML mail nasıl atarız? Bu sadece gövdeye text yazıyor. Renklendirme, fon değişimi filan yapılamıyor. ❓
Merhaba,
Üstte kod içinde .Body olarak gördüğünüz ve mesajın gövdesi olan kısmı .HTMLBody olarak kullanarak yapabilirisiniz. 😉
merhabalar, hocam çok teşekkür ederiz. ama şöyle bir hata alıyorum:
Compile Error:
invalid oudside procedure
ekrana bu hata geliyor ve dosyaPath = ThisWorkbook.Path yazan yerde ThisWorkbook seçili halde geliyor. (hatanın buradan kaynaklandığını söylüyor. sebei nedir? çalıştıramadım nen yapmam gerekir?
Sizin güvenlik yada office/excel ayarlarınızla ilgili olabilir. Ben aylardır (hatta yıllardır) bu şekilde sorunsuzca kullanmaktayım. Mutlaka farklı bir detay vardır yaptığınız.
Merhaba üstadım.
makro çok güzel çalışıyor fakat mailin altına imza nasıl ekleyeceğiz?
imza kısmını outlook programından ayarlamanız lazım