HTMLBODY(ALAN) İÇERİSİNE EXCEL EKRAN GÖRÜNTÜSÜ EKLEME

Katılım
28 Mart 2016
Mesajlar
23
Excel Vers. ve Dili
ms 2010
visual basic
Merhaba
Belirli bir alanı seçerek diğer konu kişi mail iç yazısı alanları yazıp mail gönderen bir makrom var. Bu seçili alanı mail içine yapıştırmasını değil bu seçili alanın ekran görüntüsünü almasını istiyorum ama bir türlü çeviremedim.

Sub mail_gonder()
Dim alan As Range

mailkonu = Range("AD1").Value
Mail = Range("AD2").Value
mailcc = Range("AD3").Value
mailmesaj = Range("AD4").Value

sonsatir = Cells(Rows.Count, "I").End(1).Row
If sonsatir < 20 Then sonsatir = 50

Set alan = Range("A1:J" & sonsatir)
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With OutMail
.To = Mail
.CC = mailcc
.Subject = mailkonu
.Display

.HTMLBody = mailmesaj & RangetoHTML(alan) & .HTMLBody
.Attachments.Add "C:\Users\.......................\Desktop\STAMPING.xlsm"
End With

Set wrdEdit = Nothing
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
 
Katılım
9 Eylül 2010
Mesajlar
876
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Kod:
Sub mail_gonder()
    Dim alan As Range
    Dim ws As Worksheet
    Dim pic As Picture
    Dim picPath As String
    Dim shp As Shape

   
    mailkonu = Range("AD1").Value
    Mail = Range("AD2").Value
    mailcc = Range("AD3").Value
    mailmesaj = Range("AD4").Value

    sonsatir = Cells(Rows.Count, "I").End(1).Row
    If sonsatir < 20 Then sonsatir = 50

    Set ws = ThisWorkbook.Sheets("Sayfa1") 
    Set alan = ws.Range("A1:J" & sonsatir)

   
    alan.Copy
    Set shp = ws.Pictures.Paste

    picPath = ThisWorkbook.Path & "\temp_image.png"
    shp.Copy
    Set pic = shp
    With ws.ChartObjects.Add(Left:=0, Width:=pic.Width, Top:=0, Height:=pic.Height)
        .Chart.Paste
        .Chart.Export Filename:=picPath, FilterName:="PNG"
        .Delete
    End With
    shp.Delete

 
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = Mail
        .CC = mailcc
        .Subject = mailkonu
        .Display

   
        .HTMLBody = mailmesaj & "<br><br><img src='" & picPath & "'><br><br>" & .HTMLBody
        .Attachments.Add "C:\Users\.......................\Desktop\STAMPING.xlsm"
    End With


    Kill picPath

    Set pic = Nothing
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
deneyebilir misiniz. nette bulduğum kadarıyla ama hocalarımız revize edebilirler.
 
Katılım
28 Mart 2016
Mesajlar
23
Excel Vers. ve Dili
ms 2010
visual basic
teşekkürler ama hata veriyor,bu adımda. picPath = ThisWorkbook.Path & "\temp_image.png"
şunu farkettim makro içinde adımlıyordum dosya içine döndüğümde tuhaf bir ekran görüntüsü almış ): excelin kendi içerisine tüm satırların arka planını silip gölgeli bir ekran görüntüsü atmış.
bu ekran görüntüsünü mail içerisine yazacak.
Orjinal makronun tamamı altta


Sub mail_gonder()
Dim alan As Range

mailkonu = Range("AD1").Value
Mail = Range("AD2").Value
mailcc = Range("AD3").Value
mailmesaj = Range("AD4").Value

sonsatir = Cells(Rows.Count, "I").End(1).Row
If sonsatir < 20 Then sonsatir = 50

Set alan = Range("A1:J" & sonsatir)
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With OutMail
.To = Mail
.CC = mailcc
.Subject = mailkonu
.Display

.HTMLBody = mailmesaj & RangetoHTML(alan) & .HTMLBody
.Attachments.Add "C:\Users\bedriye.arica\Desktop\KALİTE STAMPING.xlsm"
End With

Set wrdEdit = Nothing
Set OutMail = Nothing
Set OutApp = Nothing
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
 
Katılım
9 Eylül 2010
Mesajlar
876
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Kod:
Sub mail_gonder()
    Dim alan As Range
    Dim ws As Worksheet
    Dim picPath As String
    Dim shp As Shape

    mailkonu = Range("AD1").Value
    Mail = Range("AD2").Value
    mailcc = Range("AD3").Value
    mailmesaj = Range("AD4").Value

    sonsatir = Cells(Rows.Count, "I").End(1).Row
    If sonsatir < 20 Then sonsatir = 50

    Set alan = Range("A1:J" & sonsatir)
    Set ws = ThisWorkbook.Sheets("Sayfa1")

    alan.Copy
    Set shp = ws.Pictures.Paste

    picPath = Environ$("temp") & "\temp_image.png"
    shp.Copy
    With ws.ChartObjects.Add(Left:=0, Width:=shp.Width, Top:=0, Height:=shp.Height)
        .Chart.Paste
        .Chart.Export Filename:=picPath, FilterName:="PNG"
        .Delete
    End With
    shp.Delete

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = Mail
        .CC = mailcc
        .Subject = mailkonu
        .Display

        .HTMLBody = mailmesaj & "<br><br><img src='" & picPath & "'><br><br>" & .HTMLBody
        .Attachments.Add "C:\Users\bedriye.arica\Desktop\KALİTE STAMPING.xlsm"
    End With

    Kill picPath

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
benim boyumu aşıyor ama böyle dener misiniz.
 
Katılım
28 Mart 2016
Mesajlar
23
Excel Vers. ve Dili
ms 2010
visual basic
Kod:
Sub mail_gonder()
    Dim alan As Range
    Dim ws As Worksheet
    Dim picPath As String
    Dim shp As Shape

    mailkonu = Range("AD1").Value
    Mail = Range("AD2").Value
    mailcc = Range("AD3").Value
    mailmesaj = Range("AD4").Value

    sonsatir = Cells(Rows.Count, "I").End(1).Row
    If sonsatir < 20 Then sonsatir = 50

    Set alan = Range("A1:J" & sonsatir)
    Set ws = ThisWorkbook.Sheets("Sayfa1")

    alan.Copy
    Set shp = ws.Pictures.Paste

    picPath = Environ$("temp") & "\temp_image.png"
    shp.Copy
    With ws.ChartObjects.Add(Left:=0, Width:=shp.Width, Top:=0, Height:=shp.Height)
        .Chart.Paste
        .Chart.Export Filename:=picPath, FilterName:="PNG"
        .Delete
    End With
    shp.Delete

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = Mail
        .CC = mailcc
        .Subject = mailkonu
        .Display

        .HTMLBody = mailmesaj & "<br><br><img src='" & picPath & "'><br><br>" & .HTMLBody
        .Attachments.Add "C:\Users\bedriye.arica\Desktop\KALİTE STAMPING.xlsm"
    End With

    Kill picPath

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
benim boyumu aşıyor ama böyle dener misiniz.
teşekkürler hocam ama olmadı
 
Katılım
28 Mart 2016
Mesajlar
23
Excel Vers. ve Dili
ms 2010
visual basic
Merhaba, Dim shp As Shape satırını Dim shp As Picture şeklinde değiştirip deneyiniz.
teşekkürler bu oldu ama debug modunda adımlayarak gittiğimde resmi alıyor ekran görüntüsünü maile ama direk çalıştır dediğimde maile boş görüntü alıyor.Debug da aldığı ekran görüntüsü mail içinde tam istediğim gibi tam sayfa ama gönder dediğimde gelen mailde resim çok aşırı küçülmüş şekilde geliyor.
 
Son düzenleme:
Katılım
20 Şubat 2007
Mesajlar
669
Excel Vers. ve Dili
2007 Excel, Word Tr
teşekkürler bu oldu ama debug modunda adımlayarak gittiğimde resmi alıyor ekran görüntüsünü maile ama direk çalıştır dediğimde maile boş görüntü alıyor.Debug da aldığı ekran görüntüsü mail içinde tam istediğim gibi tam sayfa ama gönder dediğimde gelen mailde resim çok aşırı küçülmüş şekilde geliyor.
Görüntünün aşırı küçük olması fotoğrafı çekilen alanın aşırı büyük olduğuna işaret ediyor.
Görüntü sınırlarını belirleyen değer "sonsatır" değişkenidir.
F8 ile adım adım giderek sonsatir = Cells(Rows.Count, "I").End(1).Row değişkeninin aldığı değeri okuyun.
Eğer 1 milyon küsür bir değer ise formülünüzü gerçek son satır değerini alacak şekilde değiştirin.
 
Katılım
6 Mart 2024
Mesajlar
163
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
sonsatir = Cells(Rows.Count, "I").End(1).Row
If sonsatir < 20 Then sonsatir = 50

Set alan = Range("A1:J" & sonsatir)
sonsatir I sütunun mu yoksa J sütunun mu
veya yazdığınız doğru I sütunun u referans alıp J satırınımı belirliyorsunuz
 
Katılım
28 Mart 2016
Mesajlar
23
Excel Vers. ve Dili
ms 2010
visual basic
Görüntünün aşırı küçük olması fotoğrafı çekilen alanın aşırı büyük olduğuna işaret ediyor.
Görüntü sınırlarını belirleyen değer "sonsatır" değişkenidir.
F8 ile adım adım giderek sonsatir = Cells(Rows.Count, "I").End(1).Row değişkeninin aldığı değeri okuyun.
Eğer 1 milyon küsür bir değer ise formülünüzü gerçek son satır değerini alacak şekilde değiştirin.
Son satır tanımını değiştirdim aralık verdim bu şekilde debug ile ilerlediğimde istediğim görüntüyü alıyorum boyut olarak da ama run modunda otomatik ilerlerken ekran görüntüsünü boş alıyor .
 
Katılım
6 Mart 2024
Mesajlar
163
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
Merhaba,
C++:
Option Explicit
Sub HucreFotoToOutlook()
    Dim mailkonu As String
    Dim Mail As String
    Dim mailcc As String
    Dim mailmesaj As String
    Dim sonsatir As Long
    Dim mailHTML As String
    Dim ResimAlan As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EkDosya01 As String
    Dim EkDosya02 As String

    ' E-posta bilgilerinin alınması
    mailkonu = Range("AD1").Value ' E-posta konusu
    Mail = Range("AD2").Value ' Alıcı e-posta adresi
    mailcc = Range("AD3").Value ' Bilgilendirilecek Ek Alıcılar e-posta adresleri (Gözükür)
    mailmesaj = Range("AD4").Value ' Düz Metin mesajı

    ' Son satırın bulunması ve resim alınacak hücre alanının belirlenmesi
    sonsatir = Cells(Rows.Count, "I").End(xlUp).Row ' I sütununda en son dolu hücre
    If sonsatir < 20 Then sonsatir = 50 ' sonsatır minimum 50 olsun
    Set ResimAlan = Range("A1:I" & sonsatir) ' Bu alanın resmini çek

    ' Hücrelerin resmini çek ve geçici ( Environ$("temp") & "\ExcelHucreResim.jpg" )dosya olarak kaydet
    Hucrelere_Resim_Cek ResimAlan
    DoEvents

    ' Dosya yollarını değişkenlere atama
    EkDosya01 = Environ$("temp") & "\ExcelHucreResim.jpg" ' Hücrelerin resim dosyası
    EkDosya02 = Environ$("USERPROFILE") & "\Desktop\KALİTE STAMPING.xlsm" ' Excel dosyası

    mailHTML = "<p><img src='" & EkDosya01 & "'></p>" ' HTML resim olarak mesaj

    ' Outlook Uygulaması oluştur
    Set OutApp = CreateObject("Outlook.Application")

    ' Yeni bir e-posta öğesi oluştur
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = Mail ' Alıcı e-posta adresi
        .CC = mailcc ' Alıcı ek e-posta adresleri (gözükür)
        .Subject = mailkonu ' E-posta konusu
        .HTMLBody = mailmesaj & mailHTML ' HTML formatında gövde metni
        .Attachments.Add EkDosya01 ' Hücre resmini ek olarak ekle
        .Attachments.Add EkDosya02 ' Excel dosyasını ek olarak ekle
        .Display ' E-postayı görüntüle (veya .Send ile gönder)
    End With

    ' Obje değişkenlerini serbest bırak
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Private Function Hucrelere_Resim_Cek(ResimHucre As Range)
    Dim Grafik As Object

    ' Hücre aralığının resim olarak kopyalanması
    ResimHucre.CopyPicture xlScreen, xlBitmap
    ActiveSheet.Paste
    Selection.Cut

    ' Geçici grafik nesnesi oluştur ve resimi içine yapıştır
    Set Grafik = ActiveSheet.ChartObjects.Add(Left:=0, Top:=0, Width:=ResimHucre.Width, Height:=ResimHucre.Height)

    Grafik.Activate
    Grafik.Chart.Paste
    Grafik.Chart.Export Environ$("temp") & "\ExcelHucreResim.jpg" ' Resmi JPG olarak kaydet
    Grafik.Delete ' Geçici grafik nesnesini sil

End Function
 
Katılım
28 Mart 2016
Mesajlar
23
Excel Vers. ve Dili
ms 2010
visual basic
Merhaba,
C++:
Option Explicit
Sub HucreFotoToOutlook()
    Dim mailkonu As String
    Dim Mail As String
    Dim mailcc As String
    Dim mailmesaj As String
    Dim sonsatir As Long
    Dim mailHTML As String
    Dim ResimAlan As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EkDosya01 As String
    Dim EkDosya02 As String

    ' E-posta bilgilerinin alınması
    mailkonu = Range("AD1").Value ' E-posta konusu
    Mail = Range("AD2").Value ' Alıcı e-posta adresi
    mailcc = Range("AD3").Value ' Bilgilendirilecek Ek Alıcılar e-posta adresleri (Gözükür)
    mailmesaj = Range("AD4").Value ' Düz Metin mesajı

    ' Son satırın bulunması ve resim alınacak hücre alanının belirlenmesi
    sonsatir = Cells(Rows.Count, "I").End(xlUp).Row ' I sütununda en son dolu hücre
    If sonsatir < 20 Then sonsatir = 50 ' sonsatır minimum 50 olsun
    Set ResimAlan = Range("A1:I" & sonsatir) ' Bu alanın resmini çek

    ' Hücrelerin resmini çek ve geçici ( Environ$("temp") & "\ExcelHucreResim.jpg" )dosya olarak kaydet
    Hucrelere_Resim_Cek ResimAlan
    DoEvents

    ' Dosya yollarını değişkenlere atama
    EkDosya01 = Environ$("temp") & "\ExcelHucreResim.jpg" ' Hücrelerin resim dosyası
    EkDosya02 = Environ$("USERPROFILE") & "\Desktop\KALİTE STAMPING.xlsm" ' Excel dosyası

    mailHTML = "<p><img src='" & EkDosya01 & "'></p>" ' HTML resim olarak mesaj

    ' Outlook Uygulaması oluştur
    Set OutApp = CreateObject("Outlook.Application")

    ' Yeni bir e-posta öğesi oluştur
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = Mail ' Alıcı e-posta adresi
        .CC = mailcc ' Alıcı ek e-posta adresleri (gözükür)
        .Subject = mailkonu ' E-posta konusu
        .HTMLBody = mailmesaj & mailHTML ' HTML formatında gövde metni
        .Attachments.Add EkDosya01 ' Hücre resmini ek olarak ekle
        .Attachments.Add EkDosya02 ' Excel dosyasını ek olarak ekle
        .Display ' E-postayı görüntüle (veya .Send ile gönder)
    End With

    ' Obje değişkenlerini serbest bırak
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Private Function Hucrelere_Resim_Cek(ResimHucre As Range)
    Dim Grafik As Object

    ' Hücre aralığının resim olarak kopyalanması
    ResimHucre.CopyPicture xlScreen, xlBitmap
    ActiveSheet.Paste
    Selection.Cut

    ' Geçici grafik nesnesi oluştur ve resimi içine yapıştır
    Set Grafik = ActiveSheet.ChartObjects.Add(Left:=0, Top:=0, Width:=ResimHucre.Width, Height:=ResimHucre.Height)

    Grafik.Activate
    Grafik.Chart.Paste
    Grafik.Chart.Export Environ$("temp") & "\ExcelHucreResim.jpg" ' Resmi JPG olarak kaydet
    Grafik.Delete ' Geçici grafik nesnesini sil

End Function
Çok teşekkürler bu oldu sadece ekran görüntüsünü aynı zamanda ek dosya olarak eklemiş onu kaldırdım tam istediğim gibi oldu.
 
Katılım
6 Mart 2024
Mesajlar
163
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
ek dosya olarak eklemiş onu kaldırdım
Kodlar sizde istediğiniz gibi değiştirebilirsiniz.
( bazı kullanıcılar HTML mail sevmez, kabul etmeyebilir diye extra dan eklemiştim)
Kolay gelsin.
 
Üst