Excel öğreticisi – Excel'den e-posta gönderme
Normalde e-posta göndermek için Outlook, Gmail gibi e-posta istemcilerini kullanırız. Ancak birçok kullanıcı verilerini Excel çalışma kitaplarında saklar ve bu veriler üzerinde çalışırken içlerinden bir kısmını başkalarıyla paylaşmak ister. Bu durumda, e-posta istemcisini ayrı ayrı açmaya gerek kalmadan zaman kazanmak adına e-postaları doğrudan Excel çalışma kitabı içinden gönderme ihtiyacı doğar. Bu adım adım kılavuz, farklı koşullar altında Excel’den nasıl e-posta gönderileceğini gösterir.
Not: Aşağıdaki yöntemleri uygulamadan önce, bilgisayarınızda bir Outlook e-posta istemcisi yapılandırmanız ve onu varsayılan e-posta istemciniz olarak belirlemeniz gerekir.
İçindekiler:[ Gizle ]
1. Excel'den e-posta göndermenin temelleri
Bu bölüm, Excel'den e-posta göndermenin temellerini tanıtıyor.
1,1 Excel'den, Excel'in yerleşik işlevleriyle e-posta gönderme
Yalnızca Alıcı, Konu, Cc ve gövde alanlarını içeren basit e-postalar göndermek istiyorsanız, Excel’in yerleşik özellikleri size yardımcı olabilir.
1,1.1 Excel'den formül kullanarak e-posta gönderme
Aşağıdaki tabloda gösterildiği gibi, belirtilen alanlara göre Excel’den farklı e-postalar göndermek için bu alanların hücre başvurularını kullanarak çeşitli Köprü (Hyperlink) formülleri oluşturabilirsiniz. E-posta köprülerini oluşturduktan sonra, otomatik olarak e-posta göndermek istediğiniz köprüye tıklamanız yeterlidir.
Not: Alıcı veya Cc alanlarında birden fazla kişi varsa, lütfen bunları noktalı virgülle (;) ayırın.

Bu bölüm, Köprü formülüne e-posta adresi, Cc alıcısı/alıcıları, konu satırı ve gövde metnini ayrı ayrı nasıl ekleyeceğinizi göstermek üzere dört parçaya ayrılmıştır. Lütfen aşağıdaki adımları uygulayın.
"KÖPRÜ" (HYPERLINK) işlevinin söz dizimi ve bağımsız değişkenleri aşağıdaki gibidir.
Söz dizimi
HYPERLINK(link_location, [friendly_name])
Bağımsız değişkenler
1,1.1,1 Köprü formülüne E-posta Adresi ekleme
Burada bir e-posta alıcısı eklemek için formülün bir parçası olarak "mailto:" ifadesini kullanıyoruz. Bu örnekte ilk alıcının e-posta adresi B2 hücresinde yer aldığından, "mailto:" ifadesini ekleyip B2 hücresine başvurmalıyız.
“mailto:”&B2
1. Köprünün görüntüleneceği hücreyi seçin. Bu örnekte F2 hücresini seçiyoruz.
2. Ardından aşağıdaki formülü bu hücreye girin.
=HYPERLINK("mailto:"&,B2) 
Not: "Enter" tuşuna bastığınızda, aşağıdaki ekran görüntüsünde gösterildiği gibi bir köprü oluşturulur. Bağlantıya tıkladığınızda Outlook’ta yeni bir e-posta açılır ve alıcının e-posta adresi otomatik olarak Alıcı alanına yerleştirilir.

Alıcının e-posta adresi artık Köprü formülüne eklenmiştir. İhtiyacınıza göre konu satırını, Cc alıcılarını ve gövde metnini aşağıdaki adımları izleyerek eklemeye devam edebilirsiniz.
1,1.1,2 Köprü formülüne Cc alıcısını/alıcılarını ekleme
Köprü işlevine Cc alıcısını veya alıcılarını eklemek için formülün içine aşağıdaki gibi "?cc=" ifadesini dahil edin.
F2 hücresindeki formül şu şekilde olmalıdır:
=HYPERLINK("mailto:" &, B2 &, "?cc=" &, C2) 
1,1.1,3 Köprü formülüne konu satırı ekleme
Köprü işlevine konu satırı eklemek için formülün bir parçası olarak "&subject=" ifadesini aşağıda gösterildiği gibi ekleyin.
F2 hücresindeki formül artık aşağıdaki gibi görünmelidir:
=HYPERLINK("mailto:" &, B2 &, "?cc=" &, C2 &, "&subject="&, D2) 
1,1.1,4 Satır sonları içeren gövde metnini Köprü formülüne ekleme
Son adım, Köprü formülüne gövde metnini eklemektir. Örnekte görüldüğü gibi, E2 hücresindeki iki satırlık metin bir satır sonuyla ayrılmıştır ve e-posta gövdesinde bu satır sonunun korunmasını istiyorsunuz. Peki Outlook, bu satır sonunu tanır mı? Hemen kontrol edelim.
Gövde metnini Köprü formülüne eklemek için formülün içine “&body=” ifadesini aşağıdaki gibi dahil etmeniz gerekir.
F2 hücresindeki formül artık aşağıdaki gibi görüntülenmektedir:
=HYPERLINK("mailto:" &, B2 &, "?cc=" &, C2 &, "&subject="&, D2 &, "&body="&, E2) 
Not: Bağlantıya tıklayıp "Enter" tuşuna bastığınızda, Yeni E-posta penceresinde e-posta gövdesinin tek satırda görüntülendiğini görebilirsiniz.

E-posta gövdesinin ayrı satırlarda görüntülenmesi için, satır sonu eklemek istediğiniz metne "%0A" taşıma işareti karakter kodunu ekleyerek hücre içeriğini güncellemeniz gerekir. Ekran görüntüsüne bakın:

1,1.1,5 Köprü için görüntülenecek metni belirtme
Yukarıdaki adımlarda, e-posta alanlarıyla birlikte **Link_konumu** (Link_location) bağımsız değişkenini tamamladık. Bu bölümde ise bir sonraki bağımsız değişken olan **[kolay_ad]** (friendly_name) kısmını dolduracağız.
Bu örnekte, köprü hücresi “xx kişisine e-posta” metnini göstermelidir; burada “xx”, A2 hücresindeki alıcının adıdır. Bu nedenle F2 hücresindeki formül şu şekilde güncellenmelidir:
=HYPERLINK("mailto:" &, B2 &, "?cc=" &, C2 &, "&subject="&, D2 &, "&body="&, E2, "Email to "&,A2) Sonucu almak için Enter tuşuna basın.

Bu formül hücresini seçin ve diğer e-posta köprülerini oluşturmak için "Otomatik Doldurma İşareti"ni aşağı doğru sürükleyin. Ekran görüntüsüne göz atın:

1,1.2 Excel'den Köprü işleviyle e-posta gönderme
Yukarıdaki Köprü formülünü kullanmanın yanı sıra, Excel’de “Bağlantı Oluştur” işlevini kullanarak manuel olarak bir e-posta köprüsü de oluşturabilirsiniz. Bu bölüm, ilgili adımları detaylı şekilde gösterecektir.
1. Köprü eklemek istediğiniz hücreye sağ tıklayın ve bağlam menüsünden “Bağlantı” seçeneğini seçin.

2. Açılan "Bağlantı Oluştur" iletişim kutusunda aşağıdaki yapılandırmayı yapmanız gerekir.

Köprüye tıkladığınızda, aşağıdaki ekran görüntüsünde gösterildiği gibi belirtilen Alıcı, Konu ve Gövde alanlarını içeren bir Outlook e-postası oluşturulur.

Notlar:
1,2 Hücrelerdeki birden fazla alıcıya VBA betiğiyle e-posta gönderme
Yukarıdaki örnekte, bir hücrede noktalı virgülle ayrılmış birden fazla e-posta adresinin görüntülenebildiğini görebilirsiniz. Aşağıdaki ekran görüntüsünde gösterildiği gibi bir e-posta adresi listeniz varsa ve hepsine aynı anda ya da ayrı ayrı e-posta göndermek istiyorsanız, aşağıdaki VBA kodu size yardımcı olabilir.

1,2.1 Hücrelerdeki birden fazla alıcıya VBA betiğiyle e-posta gönderme
1. E-postayı göndermek istediğiniz tüm e-posta adreslerini içeren çalışma sayfasında, "Microsoft Visual Basic for Applications" penceresini açmak için "Alt" + "F11" tuşlarına basın.
2. "Microsoft Visual Basic for Applications" penceresinde "Ekle" > "Modül" seçeneğine tıklayıp aşağıdaki kodu "Modül (Kod)" penceresine yapıştırın.

VBA kodu: E-posta Adresi listesine e-posta gönderme
Sub sendmultiple()
'updateby Extendoffice 20220802
Dim xOTApp As Object
Dim xMItem As Object
Dim xCell As Range
Dim xRg As Range
Dim xEmailAddr As String
Dim xTxt As String
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xOTApp = CreateObject("Outlook.Application")
For Each xCell In xRg
If xCell.Value Like "*@*" Then
If xEmailAddr = "" Then
xEmailAddr = xCell.Value
Else
xEmailAddr = xEmailAddr & ";" & xCell.Value
End If
End If
Next
Set xMItem = xOTApp.CreateItem(0)
With xMItem
.To = xEmailAddr
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
End With
End Sub 3. Kodu çalıştırmak için "F5" tuşuna basın; ardından "Kutools for Excel" iletişim kutusu açılacaktır. E-posta Adresi listesini seçip "Tamam" düğmesine tıklayın.

Notlar:
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Kodu çalıştırdıktan sonra, Aralık Seç içindeki tüm E-posta Adresi’ler, ileti penceresinin Alıcı alanına eklenecektir. Ekran görüntüsüne göz atın:

1,2.2 Hücrelerde listelenen her alıcıya ayrı ayrı e-posta gönderme (VBA betiğiyle)
Yukarıdaki kod, Aralık seçimi içindeki tüm e-posta adreslerini ileti penceresinin Alıcı alanına ekler. Eğer alıcıların birbirlerinin e-posta adreslerini görmemesini istiyorsanız ve hücrelerdeki her e-posta adresine ayrı ayrı ileti göndermek istiyorsanız, aşağıdaki VBA betiğini deneyebilirsiniz.
1. E-posta göndermek istediğiniz tüm e-posta adreslerini içeren çalışma sayfasında, "Microsoft Visual Basic for Applications" penceresini açmak için "Alt" + "F11" tuşlarına basın.
2. "Microsoft Visual Basic for Applications" penceresinde **Ekle > Modül** seçeneğine tıklayıp aşağıdaki kodu **Modül (Kod)** penceresine yapıştırın.
VBA kodu: Hücrelerdeki her e-posta Adres Listesi adresine ayrı ayrı e-posta gönderme
Sub SendEmailToAddressInCells()
'Updated by Extendoffice 20220802
Dim xRg As Range
Dim xRgEach As Range
Dim xRgVal As String
Dim xAddress As String
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
On Error Resume Next
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xRg = xRg.SpecialCells(xlCellTypeConstants, xlTextValues)
For Each xRgEach In xRg
xRgVal = xRgEach.Value
If xRgVal Like "?*@?*.?*" Then
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.To = xRgVal
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
'.Send
End With
End If
Next
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub 3. Ardından "Araçlar" > "Başvurular" seçeneğine tıklayın. "Başvurular – VBAProject" iletişim kutusunda "Microsoft Outlook 16.0 Nesne Kitaplığı" seçeneğini bulun, işaretleyin ve değişiklikleri kaydetmek için "Tamam" düğmesine tıklayın.

4. Kodu çalıştırmak için "F5" tuşuna basın; böylece "Kutools for Excel" iletişim kutusu açılacaktır. E-posta Adresi listesini seçip "Tamam" düğmesine tıklayın.

Notlar:
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Bu örnekte, Aralık seçimi içinde altı adet e-posta adresi bulunduğundan, aşağıdaki ekran görüntüsünde gösterildiği gibi, To alanında ayrı e-posta adres listesi bulunan altı adet Outlook ileti penceresi otomatik olarak oluşturulacaktır.

5. Son olarak, e-postaları tek tek göndermek üzere "Gönder" düğmesine tıklayın.
2. Excel'den gönderilen e-postalara ek ekleme veya Outlook imzası ekleme (VBA betikleriyle)
Bu bölüm, Excel'den gönderilen e-postalara nasıl ek ekleneceğini ve Outlook varsayılan imzasının nasıl ekleneceğini gösterir.
2,1 Excel'den gönderilen e-postalara Ek Ekle ekleme
Burada farklı Ek Ekle senaryolarını açıklıyoruz; ihtiyaçlarınıza en uygun yöntemi seçebilirsiniz. Bu bölümde şunları öğrenebilirsiniz (ilgili yönteme gitmek için aşağıdaki bağlantılardan birini tıklayın):
2,1.1 Belirli bir dosyayı ek olarak e-posta ile gönderme
Excel'de bir klasördeki bir veya daha fazla dosyayı e-posta ekleri olarak göndermek için aşağıdaki VBA kodunu kullanabilirsiniz.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül" seçeneğine tıklayın ve ardından aşağıdaki VBA kodunu Modül (Kod) penceresine yapıştırın.
VBA kodu: Excel'den bir klasördeki dosyaları ek olarak e-postayla gönderme
Sub EmailWithAttachments()
'Updated by Extendoffice 20220802
Dim xStrFile As String
Dim xFilePath As String
Dim xFileDlg As FileDialog
Dim xFileDlgItem As Variant
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
Set xFileDlg = Application.FileDialog(msoFileDialogFilePicker)
If xFileDlg.Show = -1 Then
With xMailOut
.BodyFormat = olFormatRichText
.To = "xxx@aaa.com"
.Subject = "test"
.HTMLBody = "test"
For Each xFileDlgItem In xFileDlg.SelectedItems
.Attachments.Add xFileDlgItem
Next xFileDlgItem
.Display
End With
End If
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Notlar:
3. Ardından "Araçlar" > "Referanslar" seçeneğine tıklayın. Açılan "Referanslar – VBAProject" iletişim kutusunda "Microsoft Outlook 16.0 Nesne Kitaplığı" onay kutusunu bulun, işaretleyin ve değişiklikleri kaydetmek için "Tamam" düğmesine tıklayın.

4. Kodu çalıştırmak için "F5" tuşuna basın; ardından bir "Gözat" penceresi açılacak. Lütfen e-postaya eklemek istediğiniz dosyaları seçin ve "Tamam" butonuna tıklayın.

Ardından bir ileti penceresi açılır ve seçilen dosyaların Ekli alanına eklendiğini görürsünüz.

2,1.2 Geçerli Çalışma Sayfası'yi ek olarak e-postayla gönderme
Excel'de geçerli çalışma sayfasını ek olarak e-postayla göndermek istiyorsanız, bu bölümdeki VBA betiğini kullanabilirsiniz.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül" seçeneğine tıklayın ve ardından aşağıdaki VBA kodunu "Modül (Kod)" penceresine yapıştırın.
VBA kodu: Geçerli Çalışma Sayfası'yi ek olarak e-postayla gönderme
Sub SendWorkSheet()
'Update by Extendoffice 20220802
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
ActiveSheet.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte features"
.Body = "Please check and read this document."
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Application.ScreenUpdating = True
End Sub Notlar:
3. Kodu çalıştırmak için "F5" tuşuna basın; ardından Geçerli Çalışma Sayfası, bir Excel çalışma kitabı olarak kaydedilir ve otomatik olarak bir ileti penceresine eklenir. Ekran görüntüsüne bakın:

Not: Yalnızca Geçerli Çalışma Sayfası’nı içeren ekli çalışma kitabı, orijinal çalışma kitabıyla aynı isme sahiptir ve kod çalıştırıldığında bu isim “Çalışma Kitabı Adı”na eklenir.
2,1.3 Geçerli Çalışma Kitabı'yi ek olarak e-postayla gönderme
Excel’de geçerli çalışma sayfasını ek olarak e-postayla göndermeyi öğrendikten sonra, tüm çalışma kitabını ek olarak e-postayla göndermenize yardımcı olacak başka bir VBA betiği sunuyoruz. Lütfen aşağıdaki adımları izleyin.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde **Ekle > Modül** seçeneğine tıklayın ve ardından aşağıdaki VBA kodunu Modül (Kod) penceresine yapıştırın.
VBA kodu: Excel'den Geçerli Çalışma Kitabı'yi ek olarak e-postayla gönderme
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Notlar:
3. Kodu çalıştırmak için "F5" tuşuna basın; ardından Geçerli Çalışma Kitabı, ileti penceresine otomatik olarak eklenir. Ekran görüntüsüne bakın:

2,1.4 Tüm çalışma kitabını PDF ek olarak e-postayla gönderme
Çoğu kişi, bir Excel çalışma kitabını PDF dosyası olarak kaydedip ardından başkalarına e-posta eki olarak göndermeyi tercih eder. Bu bölümde, çalışma kitabını manuel olarak PDF’ye dönüştürmeden, açık olan mevcut çalışma kitabını doğrudan Excel’den PDF eki olarak e-posta ile göndermenin yolunu göstereceğim.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde **Ekle > Modül** seçeneğine tıklayın, ardından aşağıdaki VBA kodunu **Modül (Kod)** penceresine yapıştırın.
VBA kodu: Tüm çalışma kitabını PDF ek olarak e-postayla gönderme
Sub SendWorkBookAsPDF()
'Update 20220803
Dim Wb As Workbook
Dim FilePath As String
Dim FileName As String
Dim xOutApp As Object
Dim xOutMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
FileName = Left(Wb.Name, (InStrRev(Wb.Name, ".", -1, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf"
FilePath = Environ$("temp") & "\" & FileName
Wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FilePath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FilePath
.Display 'or use .Send
End With
Kill FilePath
Set xOutMail = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Notlar:
3. Kodu çalıştırmak için "F5" tuşuna basın. Ardından, Geçerli Çalışma Kitabı otomatik olarak yeni bir ileti penceresine PDF dosyaları eki olarak eklenir. Ekran görüntüsüne bakın:

2,1.5 Geçerli Çalışma Sayfası'yi PDF ek olarak e-postayla gönderme
Örneğin, "Aylık satışlar" adlı bir çalışma kitabınız var ve "satış raporu" adlı çalışma sayfasında satış raporu tablonuzu tamamladınız. Bu çalışma sayfasını meslektaşlarınıza PDF dosyası olarak göndermek istiyorsanız, aşağıdaki VBA kodu size yardımcı olacaktır.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül" seçeneğine tıklayıp aşağıdaki VBA kodunu Modül (Kod) penceresine yapıştırın.
VBA kodu: Geçerli Çalışma Sayfası'yi PDF ek olarak e-postayla gönderme
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Notlar:
3. Kodu çalıştırmak için "F5" tuşuna basın. Ardından, Geçerli Çalışma Sayfası otomatik olarak yeni bir ileti penceresine PDF Dosyaları eki olarak eklenir. Ekran görüntüsüne bakın:

2,2 Excel'den gönderilen e-postalara Outlook imzası ekleme
Yukarıdaki örneği ele alalım: Excel’den “Geçerli Çalışma Sayfası”nı PDF olarak ekleyip e-posta göndermek için yukarıdaki VBA kodunu kullanıyorsunuz, ancak Outlook imzası ileti penceresine otomatik olarak eklenemiyor. Excel üzerinden gönderilen e-postada Outlook’un varsayılan imzasını korumak için aşağıdaki yöntem işinize yarayacaktır.
Aşağıda iki adet VBA kodu yer almaktadır.
VBA Kodu 1: Outlook imzanızı korumanıza yardımcı olan kod.
VBA Kodu 2: Geçerli çalışma sayfasını PDF ek olarak e-postayla göndermenizi sağlayan kod.
VBA kodu 1: Outlook imzasını koruma
.HTMLBody = "Email body" & "
" & .HTMLBody VBA kodu 2: Geçerli Çalışma Sayfası'yi PDF ek olarak e-postayla gönderme
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 1. Genellikle "Microsoft Visual Basic for Applications" penceresini açmak için "Alt" + "F11" tuşlarına basmanız yeterlidir.
2. "Microsoft Visual Basic for Applications" penceresinde **Ekle > Modül** seçeneğine tıklayın, ardından yukarıdaki VBA kodunu açılan **Modül (Kod)** penceresine yapıştırın.
3. Excel'den gönderilen e-postada Outlook'un varsayılan imzasını korumak için aşağıdaki gibi 2 VBA kodunu değiştirmeniz gerekir:

İşte değişikliklerin ardından tam kod.
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.Display
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.HTMLBody = "Email body" & "
" & .HTMLBody
.Attachments.Add FileName
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 4. Kodu çalıştırmak için "F5" tuşuna basın. Ardından, Geçerli Çalışma Sayfası’nın PDF dosyaları olarak eklendiği ve Outlook varsayılan imzasının e-posta gövdesinin sonuna otomatik olarak yerleştirildiği yeni bir ileti penceresi açılacaktır.

3. Excel'de belirli bir koşul sağlandığında VBA betikleriyle e-postaları otomatik olarak gönderme
Yukarıdaki örneklerde e-posta gönderimi için kodu manuel olarak çalıştırmalısınız. Ancak bir hücre belirli bir değere ulaştığında, bir hücrenin içeriği değiştiğinde veya belirli bir tarihe gelindiğinde gibi koşullar gerçekleştiğinde kodun otomatik olarak tetiklenmesini ve e-postanın kendiliğinden gönderilmesini istiyorsanız, bu bölüm Google’da Excel kullanıcılarının sıklıkla aradığı bu tür senaryoları sıralar ve belirli bir koşul sağlandığında Excel’den otomatik e-posta göndermenize yardımcı olur.
3,1 Bir hücre belirli bir değere ulaştığında otomatik olarak e-posta gönderme
Aşağıdaki ekran görüntüsünde gösterildiği gibi, D6 hücresinde toplam satışları içeren bir satış tablonuz olduğunu varsayalım. Toplam satışlar 10.000’i aştığında yöneticinize otomatik olarak e-posta gönderilsin; ancak toplam satışlar 10.000’e eşit veya daha düşük olduğunda ise hiçbir işlem yapılmamasını istiyorsunuz.

1. Satış tablosunu içeren çalışma sayfasının sekmesine sağ tıklayın ve açılan bağlam menüsünden "Kodu görüntüle" seçeneğini seçin.

2. Açılan "Microsoft Visual Basic for Applications" penceresinde, aşağıdaki VBA kodunu "Sayfa (Kod)" bölümüne yapıştırın.

VBA kodu: Excel'de bir hücre belirli bir değere ulaştığında otomatik olarak e-posta gönderme
Dim xRg As Range
'Update by Extendoffice 20200803
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("D6"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10000 Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
On Error Resume Next
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
Private Sub Worksheet_Calculate()
Dim xI As Integer
Dim xRg As Range
Set xRg = Range("D6")
On Error GoTo Err01
xI = Int(xRg.Value)
If xI > 10000 Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub Notlar:
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6") Artık D6 hücresindeki değer 10.000'i aştığında, aşağıdaki ekran görüntüsünde gösterildiği gibi bir e-posta otomatik olarak oluşturulacaktır.

3,2 Bir hücre değeri değiştiğinde otomatik olarak e-posta gönderme
Aşağıdaki ekran görüntüsünde gösterildiği gibi, farklı çalışma sayfalarında aylık satışlar ve ayrı bir çalışma sayfasında toplam satışlar içeren bir çalışma kitabınız olduğunu varsayalım. Toplam satışları doğrulamanız ve bu değer değiştirildiğinde, çalışma kitabını gönderene geri gönderip ilgili hücrenin güncellendiğini bildirmeniz gerekiyor.

1. Satış tablosunu içeren çalışma sayfasının sekmesine sağ tıklayın ve açılan menüden “Kodu Görüntüle” seçeneğini seçin.

2. Açılan "Microsoft Visual Basic for Applications" penceresinde, aşağıdaki VBA kodunu Sayfa (Kod) bölümüne yapıştırın.
VBA kodu: Belirtilen bir hücre değeri değiştiğinde otomatik olarak e-posta gönderme
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220803
Dim xRgSel As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBoolean = False
Set xRg = Range("B14")
Set xItsRG = Intersect(Target, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
If Not (xItsRG Is Nothing) Then
Set xRgSel = xItsRG
xBoolean = True
ElseIf Not (xDDs Is Nothing) Then
Set xRgSel = xDDs
xBoolean = True
ElseIf Not (xDs Is Nothing) Then
Set xRgSel = xDs
xBoolean = True
End If
ActiveWorkbook.Save
If xBoolean Then
Debug.Print xRgSel.Address
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xMailBody = "The cell " & xRgSel.Address(False, False) & _
" in the worksheet '" & Me.Name & "' were modified on " & _
Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
" by " & Environ$("username") & "."
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Worksheet modified"
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Display
End With
Set xRgSel = Nothing
Set xOutApp = Nothing
Set xMailItem = Nothing
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Notlar: Kodda,
Artık B14 hücresindeki değer değiştiğinde, aşağıdaki ekran görüntüsünde gösterildiği gibi otomatik olarak bir Outlook iletisi oluşturulur.

3,3 Bir çalışma kitabı kaydedildiğinde otomatik olarak e-posta gönderme
Başkalarıyla paylaşılması gereken, üzerinde değişiklik yaptığınız bir çalışma kitabınız varsa, normalde çalışma kitabını kaydetmeniz, e-posta istemcinizi başlatmanız, bu çalışma kitabını ekleyerek yeni bir e-posta oluşturmanız, ilgili alanları doldurmanız ve ardından e-postayı göndermeniz gerekir. Bu bölümde, çalışma kitabını her kaydettiğinizde otomatik olarak bir e-posta oluşturmanın yöntemi açıklanmaktadır. Lütfen aşağıdaki adımları izleyin.
1. "Microsoft Visual Basic for Applications" penceresini açmak için "Alt" + "F11" tuşlarına basın.
2. Bu pencerede, "Proje" bölmesinde "BuÇalışmaKitabı" öğesine çift tıklayın ve ardından aşağıdaki VBA kodunu "BuÇalışmaKitabı (Kod)" penceresine yapıştırın.

VBA kodu: Bir çalışma kitabı kaydedildiğinde otomatik olarak e-posta gönderme
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220804
Dim xOutApp As Object
Dim xMailItem As Object
Dim xName As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "The workbook has been updated"
.Body = "Hi," & Chr(13) & Chr(13) & "File is now updated."
.Attachments.Add xName
.Display
'.send
End With
Set xMailItem = Nothing
Set xOutApp = Nothing
End Sub Notlar: Kodda,
3. Artık çalışma kitabınızı "Ctrl" + "S" tuşlarına basarak veya "Kaydet" düğmesine tıklayarak kaydettiğinizde, otomatik olarak bir Outlook e-postası oluşturulur. Geçerli Çalışma Kitabı'nın eke eklenmiş olduğunu ve ilgili alanların belirtilen içerikle doldurulduğunu görebilirsiniz. Ekran görüntüsüne bakın:

İpucu: Bu çalışma kitabını sık sık kullanıyorsanız, içerdikleri VBA betiğini gelecekte de kullanabilmek için dosyayı “Excel Makro Etkin Çalışma Kitabı” olarak kaydetmenizi öneririz. Adımlar aşağıda verilmiştir.

3,4 Belirli bir zamanda otomatik olarak e-posta gönderme
Her Cuma sabahı saat 9’da, birine görev atama çalışma kitabını içeren bir e-posta göndermeniz gerekiyorsa ve bunu e-posta istemcinizi manuel olarak çalıştırmadan Excel üzerinden otomatikleştirmek istiyorsanız, bu bölüm tam size göre!
1. "Microsoft Visual Basic for Applications" penceresini açmak için "Alt" + "F11" tuşlarına basın.
2. «Microsoft Visual Basic for Applications» penceresinde «Ekle» > «Modül» seçeneğine tıklayarak yeni bir modül oluşturun ve ardından aşağıdaki VBA kodunu Modül penceresine yapıştırın.

VBA kodu1: Geçerli Çalışma Kitabı dosyasını Excel'den ek olarak e-postayla gönderme
Sub Timer()
If Weekday(Date) = vbFriday Then
SendWorkBook
Application.OnTime TimeValue("09:00:00"), "Timer"
Else
Application.OnTime TimeValue("09:00:00"), "Timer"
End If
End Sub
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. Bu pencerede, «Proje» bölmesinde «ThisWorkbook» öğesine çift tıklayıp aşağıdaki VBA kodunu «ThisWorkbook (Kod)» penceresine yapıştırın.

VBA kodu 2: Belirli bir zamanda otomatik olarak e-posta gönderme
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub Notlar:
4. Kodları kaydedin ve ardından çalışma kitabını aşağıdaki gibi, makro destekleyen bir Excel dosyası olarak kaydedin.

5. Kaydettiğiniz makro destekleyen çalışma kitabını açın; belirlenen gün ve saat geldiğinde otomatik olarak bir e-posta oluşturulacak veya gönderilecektir.
4. Ek konular
Bu bölüm, Excel'den e-posta gönderirken karşılaşabileceğiniz diğer konuları bir araya getirir.
4,1 Excel'den hücre aralığını e-postayla gönderme (VBA betiğiyle)
Aşağıdaki ekran görüntüsünde gösterildiği gibi, bir Excel çalışma sayfasında aylık satış tablonuz olduğunu ve bu tabloyu başkalarına e-postanın gövdesinde veya doğrudan ek olarak göndermeniz gerektiğini düşünelim. İşte bunu gerçekleştirmeniz için iki yöntem sunuyoruz.

4,1.1 Excel'den bir aralığı e-posta gövdesinin bir parçası olarak gönderme
Excel'den e-posta gövdesinin bir parçası olarak bir hücre aralığını göndermek için aşağıdaki VBA kodunu çalıştırabilirsiniz.
1. "Microsoft Visual Basic for Applications" penceresini açmak için "Alt" + "F11" tuşlarına basın.
2. «Microsoft Visual Basic for Applications» penceresinde «Araçlar» > «Başvurular» seçeneğine tıklayın. Ardından açılan «References – VBAProject» iletişim kutusunda «Microsoft Outlook 16,0 Object Library» seçeneğinin onay kutusunu işaretleyip «Tamam» düğmesine tıklayın.

3. «Ekle» > «Modül» seçeneğine tıklayın ve ardından aşağıdaki VBA kodunu «Modül (Kod)» penceresine yapıştırın.
VBA kodu: Excel'den e-posta gövdesinin bir parçası olarak hücre aralığını gönderme
Sub SendARangeofCells()
'Updated by Extendoffice 20220809
Dim xRg As Range
Dim I, J As Long
Dim xAddress As String
Dim xMailOut As Object
Dim xOutApp As Object
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select range you need to paste into email body", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.Subject = "test"
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = RangetoHTML(xRg)
.Display
'.Send
End With
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
' The following VBA script is cited from this page:
' https://stackoverflow.com/questions/18663127/paste-excel-range-in-outlook
Function RangetoHTML(rng As Range)
' By Ron de Bruin.
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"
'Copy the range and create a new workbook to past the data in
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
'Publish the sheet to a htm file
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
'Read all data from the htm file into RangetoHTML
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=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function Notlar: Kodda,
4. Kodu çalıştırmak için «F5» tuşuna basın. Açılan «Kutools for Excel» iletişim kutusunda, e-posta gövdesinin bir parçası olarak göndermek istediğiniz hücre aralığını seçin ve «Tamam» düğmesine tıklayın. Ekran görüntüsüne bakın:

Daha sonra bir Outlook e-postası otomatik olarak oluşturulur ve çalışma sayfasında seçtiğiniz aralığın e-posta gövdesine eklendiğini görürsünüz. Ekran görüntüsüne göz atın:

4,1.2 Excel'den bir aralığı ek olarak e-postayla gönderme
Excel'den bir çalışma sayfasındaki hücre aralığını ek olarak e-postayla göndermeniz gerekiyorsa, aşağıdaki VBA kodunu deneyebilirsiniz.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan «Microsoft Visual Basic for Applications» penceresinde «Ekle» > «Modül» seçeneğine tıklayın ve ardından aşağıdaki VBA kodunu «Modül (Kod)» penceresine yapıştırın.
VBA kodu: Excel'den bir aralığı ek olarak e-postayla gönderme
Sub SendRange()
'Update 20220809
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim Ws As Worksheet
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim WorkRng As Range
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Wb = Application.ActiveWorkbook
Wb.Worksheets.Add
Set Ws = Application.ActiveSheet
WorkRng.Copy Ws.Cells(1, 1)
Ws.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Monthly sales for 2021"
.Body = "Hello, please check and read this document. "
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Ws.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Notlar:
3. Kodu çalıştırmak için «F5» tuşuna basın. Açılan «Kutools for Excel» iletişim kutusunda, e-postaya ek olarak göndermek istediğiniz hücre aralığını seçin ve «Tamam» düğmesine tıklayın. Ekran görüntüsüne bakın:

Daha sonra bir Outlook e-postası otomatik olarak oluşturulur. Çalışma sayfasında seçtiğiniz hücre aralığı, Excel çalışma kitabı olarak kaydedilir ve İleti penceresine eklenir. Ekran görüntüsüne bakın:

4,2 Excel'de bir düğmeye tıklandığında e-posta gönderme
Excel'de bir e-posta göndermek için bir komut düğmesine tıklamanız ve böylece bir makroyu tetiklemeniz gerekiyorsa—örneğin, çalışma sayfasındaki bir komut düğmesine tıklayarak Geçerli Çalışma Kitabı dosyasını başkalarına ek olarak göndermek istiyorsanız—aşağıdaki adımları izleyerek bunu kolayca gerçekleştirebilirsiniz.
1. «Geliştirici» > «Ekle» > «Komut Düğmesi (ActiveX Denetimi)» seçeneğine tıklayıp çalışma sayfasına bir komut düğmesi çizin.
İpucu: Zaten bir komut düğmeniz varsa, bu adımı atlayabilirsiniz.

2. «Microsoft Visual Basic for Applications» penceresini açmak için «Alt» + «F11» tuşlarına basın. Pencerede «Ekle» > «Modül» seçeneğine tıklayıp, Excel’deki Geçerli Çalışma Kitabı dosyasını ek olarak e-postayla göndermek için kullanılan VBA kodunu Modül (Kod) penceresine yapıştırın.
Kodu almak için buraya tıklayın.

Not: 2 numaralı adımda oluşturduğunuz makronun adı «SendWorkbook»tur.
3. «Microsoft Visual Basic for Applications» penceresini kapatmak için «Alt» + «Q» tuşlarına basın.
4. Şimdi makroyu komut düğmesine atamanız gerekiyor. Komut düğmesine sağ tıklayıp bağlam menüsünden «Kodu Görüntüle» seçeneğini seçin.

5. Ardından «Microsoft Visual Basic for Applications» penceresi açılır; «Sayfa (Kod)» penceresinde aşağıdaki iki satırın listelendiğini görürsünüz.
Private Sub CommandButton1_Click()
End Sub 
6. Komut düğmesi için alt yordamın içine mevcut makronun adını yazın.

7. «Visual Basic Editor» penceresini kapatmak için «Alt» + «Q» tuşlarına basın, ardından tasarım modundan çıkmak için «Geliştirici» > «Tasarım Modu» seçeneğine tıklayın.

Artık geçerli çalışma kitabını e-postanın bir eki olarak göndermek için komut düğmesine tıklayabilirsiniz.
4,3 Belirtilen bir e-posta hesabından e-posta gönderme
Normalde Excel’den VBA koduyla e-posta gönderdiğinizde, gönderen olarak Outlook’taki Varsayılan hesap kullanılır. Ancak Outlook’ta birden fazla e-posta hesabınız varsa ve Varsayılan hesabı değil, belirli bir hesabı kullanarak Excel’den e-posta göndermek istiyorsanız aşağıdaki VBA kodu size yardımcı olabilir.
Bu durumda aşağıdaki kodlara ihtiyaç duyulur.
VBA kodu 1:
Dim OutlookMail As Outlook.MailItem VBA kodu 2:
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next Yukarıdaki VBA kodlarını nasıl kullanırsınız?
Bu örnekte, Excel'den Geçerli Çalışma Kitabı dosyasını ek olarak göndermek için belirli bir e-posta hesabını kullanacağız. Lütfen aşağıdaki adımları izleyin.
1. «Alt» + «F11» tuşlarına basın. «Microsoft Visual Basic for Applications» penceresinde «Araçlar» > «Başvurular» seçeneğine tıklayın. Ardından açılan «References – VBAProject» iletişim kutusunda «Microsoft Outlook 16,0 Object Library» seçeneğini işaretleyip «Tamam» düğmesine tıklayın.

2. «Ekle» > «Modül» seçeneğine tıklayın, ardından aşağıdaki VBA kodunu «Modül (Kod)» penceresine yapıştırın.
VBA kodu: Excel'den belirtilen bir Outlook hesabı üzerinden Geçerli Çalışma Kitabı dosyasını e-posta eki olarak gönderme
Sub SendWorkBook()
'Update by Extendoffice 20220809
Dim OutlookApp As Object
Dim OutlookMail As Outlook.MailItem 'important! Here can’t be declared as Object
Dim xAccount As Account
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(olMailItem)
On Error Resume Next
'The following lines helps to specify a certian email account
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
'End
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. Kodu çalıştırmak için «F5» tuşuna basın. Ardından bir Outlook e-posta iletisi açılır ve «Kimden» alanının, kodda belirttiğiniz e-posta hesabıyla otomatik olarak doldurulduğunu görürsünüz.
4,4 Belirli bir tarihe ulaşıldığında e-posta gönderme
Belirli bir Bitiş Tarihi’ne göre e-posta göndermeniz gerekiyorsa—örneğin, aşağıdaki ekran görüntüsünde gösterildiği gibi bir proje tablonuz varsa ve «E2:E7 aralığındaki Bitiş Tarihi, bugün itibarıyla (2022/8/4 varsayılarak) 7 güne eşit ya da daha az kalacak şekilde yaklaştığında» ilgili proje liderlerine otomatik olarak e-posta gönderilerek projenin süresinin dolmak üzere olduğu bildirilir.

1. Proje tablosunu içeren çalışma sayfasının sekmesine sağ tıklayın ve açılan bağlam menüsünden «Kodu Görüntüle» seçeneğini seçin.

2. Açılan "Microsoft Visual Basic for Applications" penceresinde, aşağıdaki VBA kodunu "Sayfa (Kod)" bölümüne yapıştırın.
VBA kodu: Bitiş Tarihi koşulu karşılandığında otomatik olarak e-posta gönderme
Public Sub SendMailDueDate()
'Updated by Extendoffice 20220804
Dim xRgDate As Range
Dim xRgSend As Range
Dim xRgText As Range
Dim xRgDone As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xLastRow As Long
Dim vbCrLf As String
Dim xMailBody As String
Dim xRgDateVal As String
Dim xRgSendVal As String
Dim xMailSubject As String
Dim i As Long
On Error Resume Next
Set xRgDate = Range("E2:E7") 'Please reference the due date column range
If xRgDate Is Nothing Then Exit Sub
Set xRgSend = Range("C2:C7") 'Please reference the email addresses column range
If xRgSend Is Nothing Then Exit Sub
Set xRgText = Range("D2:D7") 'Please reference the remark column range (the remark used to notify project leaders of the expiration of the project)
If xRgText Is Nothing Then Exit Sub
xLastRow = xRgDate.Rows.Count
Set xRgDate = xRgDate(1)
Set xRgSend = xRgSend(1)
Set xRgText = xRgText(1)
Set xOutApp = CreateObject("Outlook.Application")
For i = 1 To xLastRow
xRgDateVal = ""
xRgDateVal = xRgDate.Offset(i - 1).Value
If xRgDateVal <> "" Then
If CDate(xRgDateVal) - Date <= 7 And CDate(xRgDateVal) - Date > 0 Then
xRgSendVal = xRgSend.Offset(i - 1).Value
xMailSubject = xRgText.Offset(i - 1).Value & " on " & xRgDateVal
vbCrLf = "
"
xMailBody = ""
xMailBody = xMailBody & "Dear " & xRgSendVal & vbCrLf
xMailBody = xMailBody & "Remark : " & xRgText.Offset(i - 1).Value & vbCrLf
xMailBody = xMailBody & ""
Set xMailItem = xOutApp.CreateItem(0)
With xMailItem
.Subject = xMailSubject
.To = xRgSendVal
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = xMailBody
.Display
'.Send
End With
Set xMailItem = Nothing
End If
End If
Next
Set xOutApp = Nothing
End Sub Notlar: Kodda,
3. Kodu çalıştırmak için «F5» tuşuna basın. Son tarih koşulları karşılandığında, ilgili e-posta otomatik olarak oluşturulacaktır. Bu örnekte, aşağıdaki ekran görüntüsünde gösterildiği gibi iki e-posta oluşturulur.

5. Excel'den kolayca e-posta göndermenizi sağlayan kullanışlı bir araç
VBA konusunda yeniyseniz, yukarıdaki yöntemler sizin için kolay olmayabilir. Bu nedenle E-posta Gönder özelliğine sahip «Kutools for Excel» eklentisini öneriyoruz. Bu özellik sayesinde Excel’den yalnızca birkaç tıklamayla e-posta göndermek çok daha kolay hale gelir. Lütfen aşağıdaki adımları izleyin.
5,1 Gerekli e-posta alanlarını içeren bir E-posta Listesi kolayca oluşturun
E-posta Gönder özelliğini kullanmadan önce, gerekli e-posta alanlarını içeren bir E-posta Listesi oluşturmanız gerekir. İşte tam da bu noktada Posta Listesi Oluştur özelliği devreye girer ve size kolaylık sağlar.
1. «KUTOOLS PLUS» > «Posta Listesi Oluştur» seçeneğine tıklayın.

2. Açılan «Posta Listesi Oluştur» penceresinde aşağıdaki şekilde yapılandırmanız gerekir.

Ardından, aşağıdaki ekran görüntüsünde gösterildiği gibi örnek bir E-posta Listesi tablosu oluşturulur.

3. Artık örnekteki orijinal verileri kendi alan verilerinizle değiştirmenin tam zamanı.

Artık bir E-posta Listesi tablosu oluşturdunuz. İleriye dönük olarak, oluşturduğunuz alanlara dayanarak Excel'den e-posta göndermek için «E-posta Gönder» özelliğini kullanın.
Kutools for Excel– Excel'i, işinizi daha hızlı ve kolay hale getiren 300 temel araçla güçlendirin ve daha akıllı veri işleme ile üretkenlik için yapay zeka özelliklerinden yararlanın.Hemen Edinin
5,2 E-posta Listesi içinde oluşturduğunuz alanları içeren e-postaları kolayca gönderin
Gerekli e-posta alanlarını içeren E-posta Listesi'ni oluşturduktan sonra ()nasıl yapılacağını öğrenmek için tıklayın), artık bu alanları kullanarak Excel'den e-posta gönderebilirsiniz.
1. Tüm E-posta Listesi'ni seçin ve "KUTOOLS PLUS" > "E-posta Gönder" seçeneğine tıklayın.

2. "E-posta Gönder" iletişim kutusunda lütfen aşağıdaki ayarları yapın.

3. Ardından, gönderilen e-posta sayısını gösteren bir "Kutools for Excel" iletişim kutusu açılır; bu kutuyu kapatmak için "Tamam" düğmesine tıklayın.
İpucu: Gönderdiğiniz e-postaları incelemek için Outlook’ta “Gönderilen Öğeler” klasörüne göz atabilirsiniz.

5,3 HTML gövdeli (köprü, resim vb. içeren) e-postaları kolayca gönderin
Bu E-posta Gönder özelliği, köprü, resim, farklı yazı boyutları ve yazı tipi renkleri gibi öğeler içeren bir HTML e-postası oluşturmanıza olanak tanır.
Gerekli e-posta alanlarını içeren bir E-posta Listesi oluşturduktan sonra ()ve) araç çubuğundaki seçenekleri kullanarak E-posta Gönder iletişim kutusunu yapılandırırken gövde içeriğini zenginleştirebilirsiniz.
Aşağıdaki ekran görüntüsüne bakın:

5,4 E-posta gönderirken Outlook varsayılan imzasını kolayca ekleyin
Yukarıdaki yöntemde, Outlook’un varsayılan imzasıyla e-posta göndermenize yardımcı olmak için bir VBA kodu sunduk. Buradaysa tek yapmanız gereken, E-posta Gönder özelliğini kullanırken ilgili seçeneği işaretlemek; böylece Excel’den gönderdiğiniz e-postalara Outlook’un varsayılan imzası otomatik olarak eklenir.
Bir e-posta listesi oluşturduktan ve gerekli e-posta alanlarını ekledikten sonra, E-posta Gönder iletişim kutusunu yapılandırırken **Seçenekler > Outlook’un imza ayarlarını kullan** seçeneğini işaretlemeniz gerekir.
Not: Outlook’un imza ayarlarını kullan seçeneğinin işaretli olduğundan emin olun.

Alıcılar e-postayı aldığında, e-posta gövdesinin sonunda Outlook’un varsayılan imzasını görürler.
5,5 Belirli bir e-posta hesabından e-posta gönderin
Excel'den e-posta gönderirken varsayılan hesap yerine belirli bir e-posta hesabını kullanmak istiyorsanız, E-posta Gönder özelliği bunu kolayca sağlar.
Bir e-posta listesi oluşturduktan sonra E-posta Gönder iletişim kutusunu yapılandırırken, **Seçenekler > Gönderen** seçeneğine tıklayıp e-postaları göndermek istediğiniz e-posta hesabını seçin.
Not: E-posta hesabınızı seçtikten sonra, hesabın önünde bir onay işareti belirir.

Bu E-posta Gönder özelliğini daha yakından tanımak için buraya tıklayın.
Kutools for Excel– Excel'i, işinizi daha hızlı ve kolay hale getiren 300 temel araçla güçlendirin ve daha akıllı veri işleme ile üretkenlik için yapay zeka özelliklerinden yararlanın.Hemen Edinin
Sonuç olarak, Excel’den e-posta göndermek günlük işlerinizde oldukça faydalıdır. Bu makale, Excel’den e-posta gönderme konusundaki daha kapsamlı başlıkları ele almaktadır; başka konular veya daha kolay çözümler biliyorsanız, lütfen yorum bırakarak paylaşın!
En İyi Office Verimlilik Araçları
Kutools for Excel ile Excel becerilerinizi üst seviyeye taşıyın ve hiç yaşamadığınız bir verimlilik deneyimi yaşayın.Kutools for Excel, verimliliği artırmak ve Zamanı Kaydet için 300’den fazla gelişmiş özelliğe sahiptir.İhtiyacınız olan özelliği hemen edinmek için buraya tıklayın…
Office Tab, Office uygulamalarına sekmeli arayüz getirir ve işlerinizi çok daha kolay hale getirir
- Word, Excel, PowerPoint, Publisher, Access, Visio ve Project'te sekmeli düzenleme ve okuma özelliğini etkinleştirin.
- Birden fazla belgeyi yeni pencerelerde değil, aynı pencerenin yeni sekmelerinde açın ve oluşturun.
- Günlük verimliliğinizi %50 artırır ve her gün yüzlerce fare tıklamasından tasarruf etmenizi sağlar!
Tüm Kutools eklentileri tek bir kurulum dosyasında!
Kutools for Office paketi, Excel, Word, Outlook ve PowerPoint için eklentilerle birlikte Office Tab Pro’yu da içerir; Office uygulamalarında çalışan ekipler için idealdir.
- Hepsi bir arada paket— Excel, Word, Outlook ve PowerPoint eklentileri + Office Tab Pro
- Tek kurulum, tek lisans— birkaç dakikada hazır (MSI uyumlu)
- Birlikte daha iyi çalışır— Office uygulamaları arasında akıcı verimlilik
- 30 günlük tam özellikli deneme— kayıt gerekmez, kredi kartı gerekmez
- En iyi değer— tek tek eklenti satın almaya göre tasarruf sağlar