PDF olarak mail göndermek.

Katılım
20 Aralık 2013
Mesajlar
195
Excel Vers. ve Dili
Microsoft Office Standart 2013 - Microsoft Windows 10 Enterprise
merhabalar

ekteki excelde tek sayfa bulunmaktadır. Bir buton ve makro yardımıyla o sayfayı pdf olarak ataçlayıp outlook üzerinden göndermek istiyorum. Fakat direk göndermeyeceğim. Görüntüleyip birşeyler yazıp ben kendim göndereceğim. Mümkünse mail imzamında otomatik gelmesi güzel olur.


EKLİ DOSYA
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,287
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki kodu kullanabilirsiniz.

Kod:
Sub MAIL_GONDER()
    Dim Uygulama As Object
    Dim Yeni_Mail As Object
    
    Yol = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    Dosya_Adi = "İSKONTO TABLOSU.pdf"

    Range("Print_Area").ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=Yol & "\" & Dosya_Adi, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
    
    Set Uygulama = CreateObject("Outlook.Application")
    Set Yeni_Mail = Uygulama.CreateItem(0)

    With Yeni_Mail
        .Subject = "İSKONTO TABLOSU"
        .Body = "Merhaba," & vbCrLf & vbCrLf & "Ekteki tabloyu inceleyip mutabakat için geri dönüş yapmanızı rica ederim." & vbCrLf & vbCrLf & "İyi çalışmalar dilerim."
        .Attachments.Add Yol & "\" & Dosya_Adi
        .Save
        .To = "mail kime gidecekse adresini buraya yazınız."
        .Display
    End With
    
    Set Uygulama = Nothing
    Set Yeni_Mail = Nothing
End Sub
 
Katılım
20 Aralık 2013
Mesajlar
195
Excel Vers. ve Dili
Microsoft Office Standart 2013 - Microsoft Windows 10 Enterprise
teşekkür ederim
 

musa yüksel

Altın Üye
Katılım
27 Şubat 2014
Mesajlar
98
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
04-08-2027
Sizin hazırladığınız makroyu kendime uyarlamaya çalışıyorum , dosya adını belirli hücre yapınca .Attachments.Add Yol & "\" & Dosya_Adi satır hata veriyor
SpecialFolders("Desktop") bu satır da desktop değil de desktop\sipariş formu yapınca da hata veriyor
nasıl bir değişiklik yapmam gerekiyor ilgilenirmisiniz




Kod:
Sub MAIL_GONDER()
    Range("H16") = Range("H16") + 1
    Dim Uygulama As Object
    Dim Yeni_Mail As Object
      
    Yol = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    Dosya_Adi = Range("H16") & " " & Range("C14")

    Range("Print_Area").ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=Yol & "\" & Dosya_Adi, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
    
    Set Uygulama = CreateObject("Outlook.Application")
    Set Yeni_Mail = Uygulama.CreateItem(0)

    With Yeni_Mail
        .Subject = " SİPARİŞ FORMU"
        .Body = "Merhaba," & vbCrLf & vbCrLf & "Ekteki sipariş formunu inceleyip geri dönüş yapmanızı rica ederim." & vbCrLf & vbCrLf & "İyi çalışmalar dilerim."
        .Attachments.Add Yol & "\" & Dosya_Adi
        .Save
        .To = Range("c4")
        .CC = "- ; +"
        .Display
    End With
    
    
    Set Uygulama = Nothing
    Set Yeni_Mail = Nothing
End Sub
 

musa yüksel

Altın Üye
Katılım
27 Şubat 2014
Mesajlar
98
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
04-08-2027
Aynı soru için yeni konu açmayayım dedim ama 2019 konusu olduğu için mi kimse cevap vermiyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,287
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Yoğun olduğumdan ancak cevap verebiliyorum.

Kodları genelde deneyerek paylaşıyorum. Bu sebeple sizde hata vermesi sizin hatalı bir değişiklik yapmanızdan kaynaklı olabilir.

Böyle durumlarda kodu F8 tuşu ile adım adım çalıştırıp kullandığınız değişkenlerin aldığı değerleri bir yanlışlık varmı diye gözle kontrol edebilirsiniz. Bu yöntemi kullanarak "Yol" ve "Dosya_Adi" değişkenlerinin aldığı değerleri paylaşırsanız yorum yapma şansımız olabilir.
 

musa yüksel

Altın Üye
Katılım
27 Şubat 2014
Mesajlar
98
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
04-08-2027
Merhaba,

Yoğun olduğumdan ancak cevap verebiliyorum.

Kodları genelde deneyerek paylaşıyorum. Bu sebeple sizde hata vermesi sizin hatalı bir değişiklik yapmanızdan kaynaklı olabilir.

Böyle durumlarda kodu F8 tuşu ile adım adım çalıştırıp kullandığınız değişkenlerin aldığı değerleri bir yanlışlık varmı diye gözle kontrol edebilirsiniz. Bu yöntemi kullanarak "Yol" ve "Dosya_Adi" değişkenlerinin aldığı değerleri paylaşırsanız yorum yapma şansımız olabilir.
merhaba,
korhan hocam bende 3 4 tane konudan karıştırarak kodlarda ki hataları düzeltim.
sürekli aynı adla kaydettiğinden dolayı numaratör makrosu ile o sorunu da çözdüm
şuan sıkıntısız çalışıyor

makrolara 3 sene gibi ara verince unutmuşuz basit ayrıntıları da
Kod:
Sub MAIL_GONDER()
    Range("H16") = Range("H16") + 1
    Dim Uygulama As Object
    Dim Yeni_Mail As Object
      
    Yol = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\AAAA"
    Dosya_Adi = Range("H16") & "-" & Range("I16") & " - " & Range("C14") & " " & Range("F6") & ".pdf"

    Range("Print_Area").ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=Yol & "\" & Dosya_Adi, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
    
    Set Uygulama = CreateObject("Outlook.Application")
    Set Yeni_Mail = Uygulama.CreateItem(0)

    With Yeni_Mail
        .Subject = " SİPARİŞ FORMU"
        .Body = "Merhaba," & vbCrLf & vbCrLf & "Ekteki sipariş formunu inceleyip geri dönüş yapmanızı rica ederim." & vbCrLf & vbCrLf & "İyi çalışmalar dilerim."
        .Attachments.Add Yol & "\" & Dosya_Adi
        .Save
        .To = Range("c4")
        .CC = " + ; - "
        .Display
    End With
    
    
    Set Uygulama = Nothing
    Set Yeni_Mail = Nothing
End Sub
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,182
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Aşağıdaki kodu kullanabilirsiniz.

Kod:
Sub MAIL_GONDER()
    Dim Uygulama As Object
    Dim Yeni_Mail As Object
  
    Yol = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    Dosya_Adi = "İSKONTO TABLOSU.pdf"

    Range("Print_Area").ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=Yol & "\" & Dosya_Adi, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
  
    Set Uygulama = CreateObject("Outlook.Application")
    Set Yeni_Mail = Uygulama.CreateItem(0)

    With Yeni_Mail
        .Subject = "İSKONTO TABLOSU"
        .Body = "Merhaba," & vbCrLf & vbCrLf & "Ekteki tabloyu inceleyip mutabakat için geri dönüş yapmanızı rica ederim." & vbCrLf & vbCrLf & "İyi çalışmalar dilerim."
        .Attachments.Add Yol & "\" & Dosya_Adi
        .Save
        .To = "mail kime gidecekse adresini buraya yazınız."
        .Display
    End With
  
    Set Uygulama = Nothing
    Set Yeni_Mail = Nothing
End Sub
@Korhan Ayhan hocam, bu kodları uyarlamamda yardımcı olur musunuz? MURAT sayfasını PDF yapacak. O PDF dosyasını G5 hücresindeki adrese yollayacak, o kadar. Ancak çok sayfa olduğu için sayfa kod olması lazım sanırım. Uyarlamaya çalıştım yapamadım. Çok teşekkür ederim.


Ekran görüntüsü 2023-11-23 220759.png
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,287
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
@muratgunay48 ,

Kod içinde müdahale edilecek bölümler açıkça görünüyor. Biraz kurcalarsanız rahatlıkla çözebilirsiniz.

Kod içinde sayfa adı belirtilmediği için kodu boş bir modüle ekleyip sayfalarınıza ekleyeceğiniz butonlara tanımlayıp kullanabilirsiniz.

Kod aktif sayfadaki tanımlı olan YAZDIRMA ALANI'nı PDF olarak çevirmektedir. Bu durumda sizin sadece sayfalarınızda göndermek istediğiniz alanı YAZDIRMA ALANI olarak tanımlamanız yeterli olacaktır.

Aşağıdaki bölüme çift tırnaklar dahil metni sildikten sonra hücre adresini ekleyerek mailin gideceği adresi tanımlayabilirsiniz.

.To = "mail kime gidecekse adresini buraya yazınız."
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,182
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
@muratgunay48 ,

Kod içinde müdahale edilecek bölümler açıkça görünüyor. Biraz kurcalarsanız rahatlıkla çözebilirsiniz.

Kod içinde sayfa adı belirtilmediği için kodu boş bir modüle ekleyip sayfalarınıza ekleyeceğiniz butonlara tanımlayıp kullanabilirsiniz.

Kod aktif sayfadaki tanımlı olan YAZDIRMA ALANI'nı PDF olarak çevirmektedir. Bu durumda sizin sadece sayfalarınızda göndermek istediğiniz alanı YAZDIRMA ALANI olarak tanımlamanız yeterli olacaktır.

Aşağıdaki bölüme çift tırnaklar dahil metni sildikten sonra hücre adresini ekleyerek mailin gideceği adresi tanımlayabilirsiniz.

.To = "mail kime gidecekse adresini buraya yazınız."
Hocam, inanın çok denedim. MURAT adlı sayfayı gönderecek. 1 sayfa yani (printten baktım A1:I50) onu nasıl yazacağım bulamadım.
Bir de burada AAA. PDF dosyayı sayfa ismi neyse nasıl kaydettirebilirim. Çünkü çok sayfa var.
Bir de böyle bir hata veriyor. Bir bakar mısınız size zahmet.

Ekran görüntüsü 2023-11-24 170736.png
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,287
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alttaki satır aktif sayfadaki yazdırma alanını ifade eder. İşin bu kısmını makro kaydet kodlarıyla elde edebileceğiniz düşünüyorum.

Range("Print_Area")

Biraz daha kurcalarsanız çözersiniz.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,182
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Alttaki satır aktif sayfadaki yazdırma alanını ifade eder. İşin bu kısmını makro kaydet kodlarıyla elde edebileceğiniz düşünüyorum.

Range("Print_Area")

Biraz daha kurcalarsanız çözersiniz.
Hocam, PDF olarak yapamadım. Şöyle bir şey yapmaya çalıştım. Ancak şöyle bir sorun çıkıyor. Sayfayı çoğaltıp ismini değiştirdiğim zaman, yine bu sayfayı atıyor. Çünkü aktif sayfayı yapamadım. Yardımcı olur musunuz?


Kod:
Private Sub CommandButton1_Click()
Dim Sayfa As Worksheet
    Dim Alan As Range
    Dim daralan As Range

    If Cells(2, 9) = "" Then GoTo HATA

    On Error GoTo HATA

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    saydir = WorksheetFunction.CountIf(Range("A:A"), "<>") + 1
    DinamikAlan = "A1:G100" & saydir
    Set Alan = Worksheets("MURAT").Range(DinamikAlan)
   
    Set Sayfa = ActiveSheet

    With Alan

        .Parent.Select
        Set daralan = ActiveCell

        .Select
        ActiveWorkbook.EnvelopeVisible = True
        With .Parent.MailEnvelope

            .Introduction = "Merhaba"

            With .Item
                .to = Cells(2, 9)
                .CC = Cells(3, 9)
                .Subject = Cells(1, 9)
                .bcc = "muratgunay48@hotmail.com" 'buraya kullandığınız outlook adresi yazılacak.
                .Send
            End With

        End With

        daralan.Select
    End With
   
    Sayfa.Select

HATA:
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
 
End Sub
aktifsayfa.png

Önce PDF'e çevir yoluyla gitsem dedim. Sayfayı masaüstüne kaydetme kısmına kadar geldim. Hani adım adım ilerlemek. Belki yardımınızla daha kolay olur diye.

Private Sub CommandButton2_Click()
ChDir "C:\Users\murat\OneDrive\Masaüstü\MÜŞTERİLER"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\murat\OneDrive\Masaüstü\MÜŞTERİLER\" & ActiveSheet.Name & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
End Sub

Şimdi bu dosyayı. Ek olarak ekleyip. Mail atmak kaldı.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,287
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
#2 nolu mesajda gayet açık bir örnek var. Onu son kodunuza uyarlayabilirsiniz.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,182
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
#2 nolu mesajda gayet açık bir örnek var. Onu son kodunuza uyarlayabilirsiniz.
Hocam
Set Alan = Worksheets("MURAT").Range(DinamikAlan)
yerine
Set Alan = Activesheets.Range(DinamikAlan)
Yazıyorum, hata veriyor. Sizi de yoruyorum ama.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,287
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Yorulmuyorum...

Aksine siz öğrenin diye çabalıyorum...

Öğrenmek için çaba sarf etmelisiniz..
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,182
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Yorulmuyorum...

Aksine siz öğrenin diye çabalıyorum...
Öğrenmek için çaba sarf etmelisiniz..
Çok teşekkür ederim hocam, her ne biliyorsam bu forumun özellikle sizin hakkınız çok. Ne demiş Hz. Ali "Bana bir harf öğretenin kırk yıl kölesi olurum"
Set Alan = Worksheets("MURAT").Range(DinamikAlan)

Set Alan = Activesheets.Range(DinamikAlan)

""" içine alıyorum olmuyor. ( ) içine alıyorum olmuyor. Nesi yanlış MURAT olmayacak, Activesheet olacak ama.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,287
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu forumun bırakın harf öğretmeyi kitap yazacak bilgi barındırdığını düşünüyorum.

Sizlerden beklentimiz ise bu kitabı açıp okumanızdır..

ExportAsFixedFormat ifadesini yazarak arama yaparsanız ne demek istediğimi daha net anlayacağınızı düşünüyorum.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,182
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Bu forumun bırakın harf öğretmeyi kitap yazacak bilgi barındırdığını düşünüyorum.

Sizlerden beklentimiz ise bu kitabı açıp okumanızdır..

ExportAsFixedFormat ifadesini yazarak arama yaparsanız ne demek istediğimi daha net anlayacağınızı düşünüyorum.
Hemen yarın bakacağım hocam. Teşekkür ederim.
 
Üst