Excel ile Seçili Hücreleri Mail Gönderme

İ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.

“Excel ile Seçili Hücreleri Mail Gönderme” üzerine 22 yorum

    • 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

      Yanıtla
      • Ç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?

        Yanıtla
          • 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,

            Yanıtla
    • Merhaba Bülent Bey,

      Aynı hatayı alıyorum. Library hatasını nasıl çözümlendiği konusunda desteklerinizi talep ederim.

      Yanıtla
      • 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

        Yanıtla
  1. ç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?

    Yanıtla
  2. Ç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.

    Yanıtla
  3. Ç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 ?

    Yanıtla
  4. Ç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

    Yanıtla
  5. Ö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?

    Yanıtla
  6. Ö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

    Yanıtla
  7. 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.

    Yanıtla
  8. 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

    Yanıtla
  9. 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ü ?

    Yanıtla
  10. 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.

    Yanıtla

Yorum yapın