İlk adım olarak Excel’i açıp makro içerebilen yeni bir excel çalışma sayfası kaydediyoruz.
Geliştirici sekmesinde Visual Basic’e tıklıyoruz ve yeni modül ekliyoruz.
Modülün içine aşağıdaki makro kodlarını kopyalayıp yapıştırıyoruz.
Sub MailGonder()
Dim EmailApp As Outlook.Application
Dim Source As String
Dim myRange As Range
Set myRange = Selection
Set EmailApp = New Outlook.Application
Dim EmailItem As Outlook.MailItem
Set EmailItem = EmailApp.CreateItem(olMailItem)
EmailItem.To = "cagatay@cagatayakinci.com"
EmailItem.Subject = "Bu mail excel kullanarak gönderilmiştir"
EmailItem.HTMLBody = rangetoHTML(myRange)
EmailItem.Send
End Sub
Function rangetoHTML(rng As Range)
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
rangetoHTML = ts.readall
ts.Close
rangetoHTML = Replace(rangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
TempWB.Close savechanges:=False
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function
Makro kodları içerisinde EmailItem.To = “cagatay@cagatayakinci.com” kısmı gönderilecek e-posta adresidir.
EmailItem.Subject = “Bu mail excel kullanarak gönderilmiştir” kısmı ise gönderilecek mailin konusudur.
Son olarak Tools>Referencesten Microsoft Outlook 16 Object Library’i işaretliyoruz. Bu 16 sayısı sizin office sürümünüze göre farklılık sergileyebilir. Artık makromuz kullanılmaya hazır!
Bu kısımda makroyu ister bir butona veya kısayola atayabilirsiniz. Öte yandan herhangi bir başka yazdığınız makrolarla birleştirip otomasyon yapabilirsiniz veya herhangi bir koşula göre otomatik olarak çalışmasını sağlayabilirsiniz. Ben kısayola atamayı tercih ettim. Excel çalışma kitabına döndüğümüzde makrolar kısmına bastığımızda MailGonder isimli makronun geldiğini görebiliriz. Seçeneklere bastığımızda kısayol tuşunu Ctrl + m olarak ayarlıyoruz.
Tamama basıp çalışma sayfasını kaydediyoruz. İstediğiniz hücreleri seçip klavyeden ctrl+m kombinasyonuna bastığınızda seçili hücrelerin verisini otomatik olarak mail göndermiş olacaksınız. Tabi ki Outlookta bir e-posta hesabınızın var olması gerekli.
Ctrl+m bastığımız anda mail gönderildi.
merhaba,
Dim EmailApp As Outlook.Application satırında hata vermekte,
user defined type not defined
ne avsiye edersiniz?
1. sorun çözüldü, library eklememişim.
şu yapılabilirmi;
excel tablosunda gönderilecek satırda tanımlanan mail adresine gönderim sağlanabilirmi?
Tabiki yapılabilir Bülent Bey. İlk olarak Set mailadresi = Sayfa8.Range(“C8”) olarak mailadresi adında değişken ekliyoruz makromuza. Sayfa8 derken mail adresinizin kaçıncı sayfada olduğunu yazıyorsunuz. C8 derkende hangi satır ve sütunda olduğunu yazıyorsunuz. Son olarakta Makromuzda bulunan EmailItem.To = “cagatay@cagatayakinci.com” kısmınıda EmailItem.To = mailadresi olarak değiştirdiğimizde sorun çözülüyor.
Saygılarımla
Çağatay Bey merhaba,
öncelikle paylaşımlarınız için teşekkürler,
Set mailadresi = Sayfa8.Range(“C8”) bu değişkeni hangi satıra yazmalıyız? bunu bir satıra yazdığımda object required uyarısı da geliyor. Farklı bir şey daha eklemek gerekiyor mu?
Makrodaki Set myRange = Selection satırının altına ekleyebilirsiniz Elif Hanım. Hata içinse Library eklediniz dimi excel dosyanıza ?
Selamlar, dediğiniz gibi yaptım; library ekli, ama yine object required uyarısını verdi :/ Set ‘den sonra yazdığımız mailadresi öğesini kabul etmiyor bence. kodlama bilgim hiç olmadığı için yorum yapamıyorum 🙂 teşekkürler,
Merhaba Bülent Bey,
Aynı hatayı alıyorum. Library hatasını nasıl çözümlendiği konusunda desteklerinizi talep ederim.
Merhabalar,
Excelde Visual Basic sayfasında tools > references kısmında microsoft office 16 object library tikini seçerek bu sorunu çözebilirsiniz Tolga Bey.
İyi Çalışmalar
çağatay bey merhaba;
2 tane ayrı ayrı excel sayfalarım var. 1 tanesinde ayrı satırda firma isimleri ve ayrı satırda mail adreslerini arşivlediğim excel dosyam olacak.
diğerinde o hafta hangi firmaya ödeme yapacaksam onun isimleri ve ayrı satır da kaç para ödeneceği var.
firmalara ödenecek listeyi hazırladığımda 2. excelim de yer alan firmanın ödeme tutarını 1. excelimde yer alan aynı isimli firmanın mail adresine göndersin istiyorum. bunun için hangi yazılım dili uygun olur?
Hakan Bey Merhabalar,
İstediğiniz işlemi Excel makro ile yapabilirsiniz. Makro bilginiz yeterli değilse C#’la bile yapabilirsiniz.
Saygılarımla.
Çağatay Bey Selamlar,
öncelikle kod için teşekkürler. bu hali ile bile iş görüyor. fakat esasında değişiklik yapılan hücrelerin adresini mail de gönderen bir excele ihtiyacımız var. eğer vakit ayırabilirseniz çok makbule geçer. şimdiden teşekkürler.
Emin Bey merhabalar,
Maalesef dediğiniz işlem için vaktim yok fakat siz yapmaya çalışırsanız takıldığınız yerde memnuniyetle yardımcı olurum.
Çağatay Bey Merhaba
Çalıştığım firmada kalibrasyon takibi yapıyorum ve belirlenen kalibrasyon tarihine 1 ay kaldığında excelden otomatik mail göndermek istiyorum. Bu konuda yardımcı olabilir misiniz ?
Fatih Bey Merhabalar,
Sorunuza yeni yazıyla cevap verdim. https://cagatayakinci.com/soru-cevap-excel-ile-belirli-tarihe-gore-otomatik-mail-gonderimi/
Çağatay bey merhaba;
ben satır bazlı mail atmak istiyorum. yani 20 adet satır var her bir satırda 1 den 12 ye kadar hücre var ve bunlar ayrı kişilere gönderilmek zorunda gizlilik esaslı olduğu için. Örneğin A12:X12 arasındaki hücreleri tek kişiye göndermek istiyorum. Bunun için ne yapmalıyım. teşekkür ederim
Öncelikle Teşekkürler, çok faydalı oldu gerçekten.
Mail atılacak tabloyu, exceldeki biçimleri (satır-sütun genişliği ve renkleri de dahil) ile göndermek için nasıl bir kod ekleyebiliriz acaba?
Öncelikle merhaba..
excelde yapmış olduğum bir rapor var başka sayfalardan çalışan formüllü. Ben aynı sayfa içerisinde bir hücreye mail adresleri tanımlamak, değişkenlerle birlikte mail aderslerinin değişmesini ve tıklama ile o maile bu sayfayı sadece görüntü olarak (formülsüz) göndermesini istiyorum. mümkünmüdür. Teşekkür ederim
Merhaba kolay gelsin. yazmış olduğunuz kodu çalıştırdım herhangi bir problemle karşılaşmadım teşekkür ederim emeğinize sağlık.
Sormak istediğim bir şey var şimdi bu kodda bizim manuel olarak seçtiğimiz alan gönderiliyor ben bu alanı sabit tutmak istiyorum bunun için ne yapmam gerekiyor.
Merhabalar tek bir mail adresi yazdığımda formüle calişiyor ancak birden fazla kişiye gönderemiyorum. Mail adresleri ne şekilde yazmam gerekiyor,çift tirnak içerisinde yazip noktalı virgül ile ayırmayı deniyorum
mail@email.com; ikincimail@email.com; üççüncümail@email.com olarak yazabilirsiniz.
bende çek dosyası var misal a sütunundaki tarih bugünün tarihinden 2 gün veya 1 gün evvelinden çek var ise mail atmasını istiyorum.bu mümkünmü ?
Merhaba. Bu kodu kullandım çalışıyor fakat kriter sağlanmıyorsa (mesela henüz 15 günden az kalan kayıt yok ise) Outlook hata veriyor. Nasıl düzeltebiliriz?
Teşekkürler.