Excel eğitimi – Excel'den e-posta gönderme
Genellikle, e-posta göndermek için Outlook, Gmail gibi e-posta istemcilerini kullanırız. Ancak, birçok kişi verilerini Excel çalışma kitaplarında saklar ve bu verilerle çalışırken bazı bilgileri başkalarına göndermeleri gerekir. Bu nedenle, doğrudan Excel çalışma kitabından e-posta göndermek, e-posta istemcisiyle uğraşma süresini kısaltır. Bu adım adım eğitim, farklı koşullarda Excel'den nasıl e-posta göndereceğinizi gösterecek.
Not: Aşağıdaki yöntemleri uygulamadan önce, bilgisayarınızda bir Outlook e-posta istemcisi yapılandırmalı ve varsayılan e-posta istemcisi olarak ayarlamalısınız.
İçindekiler: [ Gizle ]
1. Excel'den e-posta göndermenin temelleri
Bu bölümde, Excel'den e-posta göndermenin temel bilgileri tanıtılmaktadır.
1.1 Excel'in yerleşik fonksiyonlarıyla Excel'den e-posta gönderme
Eğer yalnızca Excel'den basit e-postalar göndermek istiyorsanız ve yalnızca Alıcı, Konu, Cc ve gövde alanlarını kullanacaksanız, Excel'in yerleşik fonksiyonları size yardımcı olabilir.
1.1.1 Excel'den formül kullanarak e-posta gönderme
Aşağıdaki tabloda gösterildiği gibi, verilen alanlara göre Excel'den farklı e-postalar göndermek için, bu alanların hücre referanslarını kullanarak farklı Hyperlink formülleri oluşturabilirsiniz. E-posta köprülerini oluşturduktan sonra, göndermek istediğiniz e-posta için ilgili köprüye tıklamanız yeterlidir.
Not: Eğer Alıcı veya Cc alanında birden fazla kişi varsa, bunları noktalı virgül ile ayırmalısınız.
Bu bölümde, Hyperlink formülüne e-posta adresi, Cc alıcısı, konu satırı ve gövde metni ekleme adımları dört başlık altında anlatılmıştır. Lütfen aşağıdaki adımları uygulayın.
"HYPERLINK" fonksiyonunun söz dizimi ve parametreleri aşağıdaki gibidir.
Söz Dizimi
HYPERLINK(link_location, [friendly_name])
Parametreler
1.1.1.1 Hyperlink formülüne e-posta adresi ekleme
Burada, formülün bir parçası olarak "mailto:" kullanılarak bir e-posta alıcısı eklenir. Bu örnekte, ilk alıcının e-posta adresi B2 hücresindedir, bu nedenle "mailto:" ifadesini ekleyip B2 hücresine referans vermelisiniz.
“mailto:”&B2
1. Köprünün görüntüleneceği bir hücre seçin. Bu örnekte F2 hücresini seçiyorum.
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 olduğu gibi bir köprü oluşturulur. Bağlantıya tıkladığınızda, bir Outlook e-postası oluşturulur ve alıcının e-posta adresi otomatik olarak Alıcı alanına eklenir.
Alıcının e-posta adresi artık Hyperlink formülüne eklendi. Şimdi ihtiyacınıza göre konu satırı, Cc alıcısı ve gövde metni eklemek için aşağıdaki adımlara devam edin.
1.1.1.2 Hyperlink formülüne Cc alıcısı ekleme
Hyperlink fonksiyonuna Cc alıcısı eklemek için, formüle aşağıdaki gibi "?cc=" ifadesini ekleyin.
F2 hücresindeki formül aşağıdaki gibi olmalıdır:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2)
1.1.1.3 Hyperlink formülüne konu satırı ekleme
Konu satırını Hyperlink fonksiyonuna eklemek için, formüle aşağıdaki gibi "&subject=" ifadesini 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 Hyperlink formülüne satır sonlu gövde metni ekleme
Son adım olarak, Hyperlink formülüne gövde metni eklenir. Örnekte, E2 hücresindeki iki satır metin satır sonu ile ayrılmıştır ve e-posta gövdesinde bu satır sonunun korunmasını istersiniz. Outlook bu durumda satır sonunu tanır mı? Kontrol edelim.
Gövde metnini Hyperlink formülüne eklemek için, formüle aşağıdaki gibi “&body=" ifadesini eklemeniz gerekir.
F2 hücresindeki formül artık aşağıdaki gibi görüntülenir:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2)
Not: "Enter" tuşuna basıp bağlantıya tıkladığınızda, yeni e-postada gövde içeriğinin aynı satırda görüntülendiğini görebilirsiniz.
E-posta gövdesinin ayrı satırlarda görüntülenmesi için, hücre içeriğini düzenleyip satır sonu eklemek istediğiniz yere "%0A" karakter kodunu eklemeniz 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 Link_location parametresini tamamladık. Bu bölümde ise, bir sonraki parametre olan [friendly_name] kısmını tamamlayacağız.
Bu örnekte, köprü hücresinde “Email to xx” şeklinde bir metin görüntülenmesini istiyorum; burada xx, A2 hücresindeki alıcının adıdır. Bu nedenle F2 hücresindeki formül şu şekilde değiştirilmelidir:
=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 "Otomatik Doldurma Kolu"nu aşağı sürükleyerek diğer e-posta köprülerini oluşturun. Ekran görüntüsüne bakın:
1.1.2 Hyperlink fonksiyonu ile Excel'den e-posta gönderme
Yukarıdaki Hyperlink formülünü kullanmanın dışında, Excel'de "Bağlantı Ekle" fonksiyonu ile manuel olarak e-posta köprüsü de oluşturabilirsiniz. Bu bölümde adımlar gösterilecektir.
1. Bağlantı eklemek istediğiniz e-posta hücresine sağ tıklayın, açılan menüden "Bağlantı"yı seçin.
2. Açılan "Bağlantı Ekle" iletişim kutusunda aşağıdaki ayarları yapmanız gerekir.

Köprüye tıkladığınızda, belirttiğiniz Alıcı, Konu ve Gövde alanlarıyla bir Outlook e-postası oluşturulacaktır. Ekran görüntüsüne bakın:
Notlar:
1.2 VBA betiğiyle hücrelerdeki birden fazla alıcıya e-posta gönderme
Yukarıdaki örnekte, bir hücrede noktalı virgülle ayrılmış birden fazla e-posta adresi olduğunu görebilirsiniz. Aşağıdaki ekran görüntüsünde gösterildiği gibi bir e-posta adresleri listeniz varsa ve bunların hepsine toplu veya ayrı ayrı e-posta göndermek istiyorsanız, aşağıdaki VBA kodu işinizi kolaylaştıracaktır.
1.2.1 VBA betiğiyle hücrelerdeki birden fazla alıcıya e-posta gönderme
1. E-posta göndermek istediğiniz tüm e-posta adreslerinin bulunduğu çalışma sayfasında, "Alt" + "F11" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini açın.
2. "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül"e tıklayın ve ardından aşağıdaki kodu "Modül (Kod)" penceresine yapıştırın.
VBA kodu: Bir e-posta adresleri 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. "F5" tuşuna basarak kodu çalıştırın, ardından bir "Kutools for Excel" iletişim kutusu açılır. E-posta adresleri listesini seçin ve "Tamam"a tıklayın.
Notlar:
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
Kodu çalıştırdıktan sonra, seçilen aralıktaki tüm e-posta adresleri mesaj penceresinin Alıcı alanında görüntülenecektir. Ekran görüntüsüne bakın:
1.2.2 VBA betiğiyle hücrelerde listelenen her alıcıya ayrı ayrı e-posta gönderme
Yukarıdaki kod, seçilen aralıktaki tüm e-posta adreslerini mesaj penceresinin Alıcı alanına ekler. Eğer listedeki her e-posta adresine ayrı ayrı e-posta göndermek ve alıcıların birbirlerinin adreslerini görmemesini istiyorsanız, aşağıdaki VBA betiğini deneyebilirsiniz.
1. E-posta göndermek istediğiniz tüm e-posta adreslerinin bulunduğu çalışma sayfasında, "Alt" + "F11" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini açın.
2. "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül"e tıklayın ve ardından aşağıdaki kodu Modül (Kod) penceresine yapıştırın.
VBA kodu: Hücrelerde listelenen her e-posta 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"a tıklayın. "Başvurular – VBAProject" iletişim kutusunda "Microsoft Outlook16.0 Object Library" kutusunu bulun ve işaretleyin, ardından değişiklikleri kaydetmek için "Tamam" butonuna tıklayın.
4. "F5" tuşuna basarak kodu çalıştırın, ardından bir "Kutools for Excel" iletişim kutusu açılır. E-posta adresleri listesini seçin ve "Tamam"a tıklayın.
Notlar:
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
Bu örnekte, seçilen aralıkta altı e-posta adresi vardır, bu nedenle altı ayrı Outlook mesaj penceresi otomatik olarak oluşturulacak ve her birinin Alıcı alanında farklı bir e-posta adresi yer alacaktır. Ekran görüntüsüne bakın:
5. Son olarak, her bir e-postayı göndermek için "Gönder" butonuna tıklayın.
2. Excel'den gönderilen e-postalara ek dosya veya Outlook imzası ekleme (VBA betikleriyle)
Bu bölümde, Excel'den gönderilen e-postalara ek dosya veya Outlook varsayılan imzası eklemenin yolları gösterilecektir.
2.1 Excel'den gönderilen e-postalara ek dosya ekleme
Burada, ek dosya eklemenin farklı durumları açıklanmıştır ve ihtiyacınıza göre yöntemi seçebilirsiniz. Bu bölümde şunları öğrenebilirsiniz (ilgili yönteme gitmek için aşağıdaki bağlantılardan birine tıklayın):
2.1.1 Belirli bir dosyayı ek olarak e-posta ile gönderme
Aşağıdaki VBA kodunu kullanarak, bir klasördeki bir veya birden fazla dosyayı Excel'den ek olarak e-posta ile gönderebilirsiniz.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül"e tıklayın. 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-posta ile 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" > "Başvurular"a tıklayın. "Başvurular – VBAProject" iletişim kutusunda "Microsoft Outlook16.0 Object Library" kutusunu bulun ve işaretleyin, ardından değişiklikleri kaydetmek için "Tamam" butonuna tıklayın.
4. "F5" tuşuna basarak kodu çalıştırın, ardından bir "Gözat" penceresi açılır. E-postaya eklemek istediğiniz dosyaları seçin ve "Tamam"a tıklayın.
Daha sonra bir mesaj penceresi açılır. Seçilen dosyaların Ekler alanında görüntülendiğini görebilirsiniz.
2.1.2 Geçerli çalışma sayfasını ek olarak e-posta ile gönderme
Geçerli çalışma sayfasını Excel'den ek olarak e-posta ile göndermek istiyorsanız, bu bölümdeki VBA betiğini uygulayabilirsiniz.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, "ekle" > "Modül"e tıklayın. Ardından aşağıdaki VBA kodunu "Modül (Kod)" penceresine yapıştırın.
VBA kodu: Geçerli çalışma sayfasını ek olarak e-posta ile 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. "F5" tuşuna basarak kodu çalıştırın, ardından geçerli çalışma sayfası bir Excel çalışma kitabı olarak kaydedilir ve otomatik olarak bir mesaj penceresine ek olarak eklenir. Ekran görüntüsüne bakın:
Not: Sadece geçerli çalışma sayfasını içeren ekli çalışma kitabı, orijinal çalışma kitabı ile aynı ada sahiptir. Ayrıca kodu çalıştırdığınız zaman da dosya adına eklenir.
2.1.3 Geçerli çalışma kitabını ek olarak e-posta ile gönderme
Excel'den geçerli çalışma sayfasını ek olarak e-posta ile göndermeyi öğrendikten sonra, burada tüm çalışma kitabını ek olarak göndermek için başka bir VBA betiği sunuyoruz. Lütfen aşağıdaki adımları uygulayın.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül"e tıklayın. Ardından aşağıdaki VBA kodunu Modül (Kod) penceresine yapıştırın.
VBA kodu: Excel'den geçerli çalışma kitabını ek olarak e-posta ile 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. "F5" tuşuna basarak kodu çalıştırın, ardından geçerli çalışma kitabı otomatik olarak mesaj penceresine ek olarak eklenir. Ekran görüntüsüne bakın:
2.1.4 Tüm çalışma kitabını PDF ek olarak e-posta ile gönderme
Çoğu kişi, bir Excel çalışma kitabını PDF dosyası olarak kaydedip ardından başkalarına ek olarak göndermeyi tercih eder. Bu bölümde, çalışma kitabını manuel olarak PDF olarak kaydetmeden, doğrudan Excel'den açık olan çalışma kitabını PDF ek olarak 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"e 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-posta ile 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. "F5" tuşuna basarak kodu çalıştırın. Ardından geçerli çalışma kitabı otomatik olarak yeni bir mesaj penceresine PDF dosyası olarak eklenir. Ekran görüntüsüne bakın:
2.1.5 Geçerli çalışma sayfasını PDF ek olarak e-posta ile gönderme
Örneğin, “Monthly sales” adlı bir çalışma kitabınız var ve “sales report” adlı bir çalışma sayfasında bir satış raporu tablosu hazırladınız ve bu sayfayı PDF dosyası olarak iş arkadaşlarınıza göndermek istiyorsunuz. Aşağıdaki VBA kodu işinizi kolaylaştıracaktır.
1. "Alt" + "F11" tuşlarına basın.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, "ekle" > "Modül"e tıklayın. Ardından aşağıdaki VBA kodunu Modül (Kod) penceresine yapıştırın.
VBA kodu: Geçerli çalışma sayfasını PDF ek olarak e-posta ile 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. "F5" tuşuna basarak kodu çalıştırın. Ardından geçerli çalışma sayfası otomatik olarak yeni bir mesaj penceresine PDF dosyası olarak eklenir. Ekran görüntüsüne bakın:
2.2 Excel'den gönderilen e-postalara Outlook imzası ekleme
Yukarıdaki örnekte olduğu gibi, Excel'den geçerli çalışma sayfasını PDF dosyası olarak göndermek için yukarıdaki VBA kodunu uyguladınız, ancak Outlook imzası mesaj penceresine eklenemedi. Excel'den gönderilen e-postada Outlook varsayılan imzasını korumak için aşağıdaki yöntem yardımcı olacaktır.
Aşağıda iki VBA kodu listelenmiştir.
VBA kodu1: Outlook imzasını korumaya yardımcı olur.
VBA kodu2: Geçerli çalışma sayfasını PDF ek olarak e-posta ile göndermeye yardımcı olur.
VBA kodu1: Outlook imzasını koru
.HTMLBody = "Email body" & "
" & .HTMLBody
VBA kodu2: Geçerli çalışma sayfasını PDF ek olarak e-posta ile gönder
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, "Alt" + "F11" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini açmanız gerekir.
2. "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül"e tıklayın. Ardından yukarıdaki VBA kodu2'yi Modül (Kod) penceresine yapıştırın.
3. Excel'den gönderilen e-postada Outlook varsayılan imzasını korumak için, VBA kodu2'yi aşağıdaki gibi değiştirmeniz gerekir:
İşte değişiklikten sonraki 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. "F5" tuşuna basarak kodu çalıştırın. Ardından, geçerli çalışma sayfası PDF dosyası olarak eklenmiş yeni bir mesaj penceresi açılır ve Outlook varsayılan imzası otomatik olarak e-posta gövdesinin sonuna eklenir.
3. Belirli bir koşul sağlandığında Excel'den otomatik e-posta gönderme (VBA betikleriyle)
Yukarıdaki örneklerde, e-posta göndermek için kodu manuel olarak çalıştırmanız gerekiyordu. Eğer belirli bir koşul sağlandığında kodun otomatik olarak tetiklenmesini istiyorsanız, örneğin bir hücre belirli bir değere ulaştığında, bir hücre değeri değiştiğinde, bir tarih geldiğinde vb., e-posta otomatik olarak gönderilecektir. Bu bölümde, Excel kullanıcılarının Google'da sıkça aradığı koşullar listelenmiştir 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, bir satış tablonuz olduğunu ve D6 hücresinde satış toplamının bulunduğunu varsayalım. Satış toplamına göre patronunuza otomatik olarak e-posta göndermek istiyorsunuz; örneğin, satış toplamı10000'i aştığında otomatik olarak e-posta oluşturulsun veya gönderilsin, ancak satış toplamı10000'e eşit veya daha az ise hiçbir işlem yapılmasın.
1. Satış tablosunun bulunduğu çalışma sayfasında, sayfa sekmesine sağ tıklayın ve açılan menüden "Kodu Görüntüle"yi seçin.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, aşağıdaki VBA kodunu "Sayfa (Kod)" penceresine 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")
Bundan sonra, D6 hücresindeki değer10000'i aştığında, aşağıdaki ekran görüntüsünde gösterildiği gibi bir e-posta 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ın ve bir çalışma sayfasında satış toplamının bulunduğu bir çalışma kitabı aldığınızı varsayalım. Satış toplamını doğrulamanız ve eğer satış toplamı değiştirilirse, çalışma kitabını gönderen kişiye geri gönderip hücrenin değiştirildiğini bildirmeniz gerekir.
1. Satış tablosunun bulunduğu çalışma sayfasında, sayfa sekmesine sağ tıklayın ve açılan menüden "Kodu Görüntüle"yi seçin.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, aşağıdaki VBA kodunu Sayfa (Kod) penceresine 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
Not: Kodda,
Bundan sonra, B14 hücresinin değeri değiştiğinde, aşağıdaki ekran görüntüsünde gösterildiği gibi otomatik olarak bir Outlook mesajı oluşturulacaktır.
3.3 Bir çalışma kitabı kaydedildiğinde otomatik olarak e-posta gönderme
Bir çalışma kitabını başkalarıyla paylaşmanız gerektiğinde, genellikle çalışma kitabını kaydedip, e-posta istemcisini açıp, bu çalışma kitabını ek olarak yeni bir e-posta oluşturup, gerekli alanları doldurup e-postayı gönderirsiniz. Bu bölümde, her kaydettiğinizde otomatik olarak e-posta oluşturmanın yolunu göstereceğim. Lütfen aşağıdaki adımları uygulayın.
1. "Alt" + "F11" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini açın.
2. Bu pencerede, "Project" bölmesinde "ThisWorkbook"a çift tıklayın, ardından aşağıdaki VBA kodunu "ThisWorkbook (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
Not: Kodda,
Bundan sonra, "Ctrl" + "S" tuşlarına basarak veya "Kaydet" butonuna tıklayarak çalışma kitabını kaydettiğinizde, otomatik olarak bir Outlook e-postası oluşturulacaktır. Mevcut çalışma kitabının ek olarak eklendiğini ve alanların belirttiğiniz içerikle doldurulduğunu görebilirsiniz. Ekran görüntüsüne bakın:
İpucu: Bu çalışma kitabını sık kullanıyorsanız, VBA betiğini gelecekte de kullanabilmek için dosyayı "Excel Makro Etkin Çalışma Kitabı" olarak kaydetmenizi öneririz. Adımlar aşağıdadır.
3.4 Belirli bir saatte otomatik olarak e-posta gönderme
Diyelim ki bir görev atama çalışma kitabını "her Cuma sabahı saat9'da" birine göndermeniz gerekiyor ve bunu Excel'de e-posta istemcisini manuel olarak kullanmadan otomatik olarak yapmak istiyorsunuz. Bu bölümde bunu nasıl yapacağınızı göstereceğim.
1. "Alt" + "F11" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini açın.
2. "Microsoft Visual Basic for Applications" penceresinde, "Ekle" > "Modül"e tıklayın. Ardından aşağıdaki VBA kodunu Modül penceresine yapıştırın.
VBA kodu1 : Excel'den geçerli çalışma kitabını ek olarak e-posta ile 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, "Project" bölmesinde "ThisWorkbook"a çift tıklayın, ardından aşağıdaki VBA kodunu "ThisWorkbook (Kod)" penceresine yapıştırın.
VBA kodu2: Belirli bir saatte 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 Excel makro etkin çalışma kitabı olarak kaydedin.
5. Kaydettiğiniz makro etkin çalışma kitabını açın, ardından gün ve saat geldiğinde otomatik olarak bir e-posta oluşturulacak veya gönderilecektir.
4. Ek konular
Bu bölümde, Excel'den e-posta gönderirken karşılaşabileceğiniz diğer konular derlenmiştir.
4.1 Excel'den bir aralığı e-posta ile gönderme (VBA betiğiyle)
Bir Excel çalışma sayfasında aşağıdaki ekran görüntüsünde olduğu gibi aylık satış tablosu olduğunu ve bu tabloyu başkalarına e-posta gövdesi olarak veya doğrudan ek olarak göndermek istediğinizi varsayalım. Bunu yapmak için iki yöntem sunuyoruz.
4.1.1 Bir aralığı e-posta gövdesinin parçası olarak Excel'den gönderme
Aşağıdaki VBA kodunu çalıştırarak, bir hücre aralığını Excel'den e-posta gövdesinin parçası olarak gönderebilirsiniz.
1. "Alt" + "F11" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini açın.
2. "Microsoft Visual Basic for Applications" penceresinde, "Araçlar" > "Başvurular"a tıklayın. Ardından "Microsoft Outlook16.0 Object Library" kutusunu işaretleyin ve "Başvurular – VBAProject" iletişim kutusunda "Tamam"a tıklayın.
3. "Ekle" > "Modül"e tıklayın, ardından aşağıdaki VBA kodunu "Modül (Kod)" penceresine yapıştırın.
VBA kodu: Bir hücre aralığını Excel'den e-posta gövdesinin parçası olarak 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
Not: Kodda,
4. "F5" tuşuna basarak kodu çalıştırın. Açılan "Kutools for Excel" iletişim kutusunda, e-posta gövdesinin parçası olarak göndermek istediğiniz hücre aralığını seçin ve "Tamam"a tıklayın. Ekran görüntüsüne bakın:
Daha sonra otomatik olarak bir Outlook e-postası oluşturulacaktır. Çalışma sayfasında seçtiğiniz aralığın e-posta gövdesine eklendiğini görebilirsiniz. Ekran görüntüsüne bakın:
4.1.2 Bir aralığı ek olarak Excel'den e-posta ile gönderme
Bir çalışma sayfasındaki bir hücre aralığını Excel'den ek olarak e-posta ile göndermek istiyorsanız, 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"e tıklayın. Ardından aşağıdaki VBA kodunu "Modül (Kod)" penceresine yapıştırın.
VBA kodu: Bir aralığı ek olarak Excel'den e-posta ile 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. "F5" tuşuna basarak kodu çalıştırın. Açılan "Kutools for Excel" iletişim kutusunda, e-posta ekinde göndermek istediğiniz hücre aralığını seçin ve "Tamam"a tıklayın. Ekran görüntüsüne bakın:
Daha sonra otomatik olarak bir Outlook e-postası oluşturulacaktır. Çalışma sayfasında seçtiğiniz hücre aralığı bir Excel çalışma kitabı olarak kaydedilir ve Mesaj penceresine ek olarak eklenir. Ekran görüntüsüne bakın:
4.2 Excel'de bir düğmeye tıklandığında e-posta gönderme
Excel'den e-posta göndermek için bir komut düğmesine tıklayarak makro tetiklemek istiyorsanız, örneğin geçerli çalışma kitabını ek olarak başkalarına göndermek için çalışma sayfasında bir komut düğmesine tıklamak gibi, aşağıdaki adımları izleyerek bunu gerçekleştirebilirsiniz.
1. "Geliştirici" > "Ekle" > "Komut Düğmesi (ActiveX Denetimi)"ne tıklayın. Ardından çalışma sayfasına bir komut düğmesi çizin.
İpucu: Zaten bir komut düğmeniz varsa, bu adımı atlayın.
2. "Alt" + "F11" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini açın. Pencerede, "Ekle" > "Modül"e tıklayın, ardından (Excel'den geçerli çalışma kitabını ek olarak göndermek için kullanılan kodu) Modül (Kod) penceresine yapıştırın.
Kodu almak için buraya tıklayın.
Not:2. adımda oluşturduğunuz makronun adı burada "SendWorkbook"tur.
3. "Alt" + "Q" tuşlarına basarak "Microsoft Visual Basic for Applications" penceresini kapatın.
4. Şimdi makroyu komut düğmesine atamanız gerekir. Komut düğmesine sağ tıklayın, açılan menüden "Kodu Görüntüle"yi seçin.
5. Ardından "Microsoft Visual Basic for Applications" penceresi açılır, "Sayfa (Kod)" penceresinde aşağıdaki iki satırı görebilirsiniz.
Private Sub CommandButton1_Click()
End Sub
6. Komut düğmesi için alt yordamın içine mevcut makronun adını girin.
7. "Alt" + "Q" tuşlarına basarak "Visual Basic Editor"u kapatın ve "Geliştirici" > "Tasarım Modu"na tıklayarak tasarım modunu kapatın.
Artık komut düğmesine tıklayarak geçerli çalışma kitabını e-posta ekinde gönderebilirsiniz.
4.3 Belirli bir e-posta hesabından e-posta gönderme
Genellikle, Excel'den VBA koduyla e-posta gönderildiğinde, gönderenin e-posta hesabı Outlook'taki varsayılan hesaptır. Outlook'ta birden fazla e-posta hesabı yapılandırdıysanız ve Excel'den e-posta gönderirken varsayılan hesap yerine belirli bir hesabı kullanmak istiyorsanız, aşağıdaki VBA kodu yardımcı olabilir.
Bu durumda aşağıdaki kodlar gereklidir.
VBA kodu1:
Dim OutlookMail As Outlook.MailItem
VBA kodu2:
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ı nasıl kullanılır?
Bu örnekte, Excel'den geçerli çalışma kitabını ek olarak göndermek için belirli bir e-posta hesabı belirleyeceğiz. Lütfen aşağıdaki adımları uygulayın.
1. "Alt" + "F11" tuşlarına basın. "Microsoft Visual Basic for Applications" penceresinde, "Araçlar" > "Başvurular"a tıklayın. Ardından "Microsoft Outlook16.0 Object Library" kutusunu işaretleyin ve "Başvurular – VBAProject" iletişim kutusunda "Tamam"a tıklayın.
2. "Ekle" > "Modül"e tıklayın. Ardından aşağıdaki VBA kodunu "Modül (Kod)" penceresine yapıştırın.
VBA kodu: Excel'den belirli bir Outlook hesabı üzerinden geçerli çalışma kitabını e-posta ekinde 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. "F5" tuşuna basarak kodu çalıştırın. Ardından bir Outlook e-posta mesajı açılır, "Kimden" alanında kodda belirttiğiniz e-posta hesabının yer aldığını görebilirsiniz.
4.4 Bir tarih geldiğinde e-posta gönderme
Belirli bir son tarihe 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 var ve "E2:E7 aralığındaki son tarih bugünden itibaren7 gün veya daha az ise (bugünün tarihi2022/8/4 varsayılıyor)", ilgili proje sorumlularına otomatik olarak e-posta gönderilecek ve projenin süresinin dolmak üzere olduğu bildirilecektir.
1. Proje tablosunun bulunduğu çalışma sayfasında, sayfa sekmesine sağ tıklayın ve açılan menüden "Kodu Görüntüle"yi seçin.
2. Açılan "Microsoft Visual Basic for Applications" penceresinde, aşağıdaki VBA kodunu "Sayfa (Kod)" penceresine yapıştırın.
VBA kodu: Son tarih 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
Not: Kodda,
3. "F5" tuşuna basarak kodu çalıştırın. Son tarih koşulları sağlanıyorsa, ilgili e-posta oluşturulacaktır. Bu durumda, aşağıdaki ekran görüntüsünde gösterildiği gibi iki e-posta oluşturulacaktır.
5. Excel'den kolayca e-posta göndermenize yardımcı olacak pratik bir araç
Eğer VBA konusunda yeniyseniz, yukarıdaki yöntemleri uygulamak sizin için kolay olmayabilir. Burada "Kutools for Excel"'in Send Emails özelliğini öneriyoruz; bu özellikle, sadece birkaç tıklama ile Excel'den kolayca e-posta gönderebilirsiniz. Lütfen aşağıdaki adımları uygulayın.
5.1 İhtiyacınız olan e-posta alanlarını içeren bir posta listesini kolayca oluşturun
Send Emails özelliğini uygulamadan önce, ihtiyacınız olan e-posta alanlarını içeren bir posta listesi oluşturmanız gerekir. Burada Posta Listesi Oluştur özelliği yardımcı olabilir.
1. "Kutools Plus" > "Posta Listesi Oluştur"a tıklayın.
2. Açılan "Posta Listesi Oluştur" penceresinde aşağıdaki ayarları yapmanız gerekir.
Ardından, aşağıdaki ekran görüntüsünde gösterildiği gibi bir örnek posta listesi tablosu oluşturulur.
3. Şimdi örnekteki verileri kendi alan verilerinizle değiştirmeniz gerekir.
Artık bir posta listesi tablosu oluşturdunuz. Lütfen oluşturduğunuz alanlara göre Excel'den e-posta göndermek için "Send Emails" özelliğini uygulamaya devam edin.
Kutools for Excel - Excel'i 300'den fazla temel araçla güçlendirin. Sürekli ücretsiz AI özelliklerinden yararlanın! Hemen Edinin
5.2 Posta listesinde oluşturduğunuz alanları içeren e-postaları kolayca gönderin
E-postalarınızda ihtiyacınız olabilecek alanları içeren posta listesini oluşturduktan sonra (nasıl oluşturulacağını öğrenmek için tıklayın), artık bu alanlarla Excel'den e-posta gönderebilirsiniz.
1. Tüm posta listesini seçin, "Kutools Plus" > "Send Emails"e tıklayın.
2. "Send Emails" iletişim kutusunda aşağıdaki yapılandırmayı yapın.
3. Ardından, kaç e-posta gönderildiğini bildiren bir "Kutools for Excel" iletişim kutusu açılır, bu kutuyu kapatmak için "Tamam" butonuna tıklayın.
İpucu: Gönderdiğiniz e-postaları kontrol etmek için Outlook'taki "Gönderilmiş Öğeler" klasörüne gidebilirsiniz.
5.3 HTML gövdeli e-postaları kolayca gönderin (bağlantı, resim vb. dahil)
Bu Send Emails özelliği, bağlantı, resim, farklı yazı tipi boyutları ve renkleri gibi öğeleri içeren HTML formatında e-posta oluşturmanıza olanak tanır.
İhtiyacınız olan e-posta alanlarını içeren bir posta listesi oluşturduktan sonra, Send Emails iletişim kutusunu yapılandırırken, araç çubuğundaki seçenekleri kullanarak 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 varsayılan imzası ile e-posta göndermek için bir VBA kodu gösterdik. Burada ise Send Emails özelliğiyle, sadece bir seçeneği işaretlemeniz yeterlidir; böylece Excel'den gönderdiğiniz e-postalara Outlook varsayılan imzası otomatik olarak eklenir.
İhtiyacınız olan e-posta alanlarını içeren bir posta listesi oluşturduktan sonra, Send Emails iletişim kutusunu yapılandırırken "Seçenekler" > "Outlook’un imza ayarlarını kullan"a tıklamanız gerekir.
Not: Outlook’un imza ayarlarını kullan seçeneğinin önünde bir onay işareti olduğundan emin olun.
Alıcılar e-postayı aldığında, e-posta gövdesinin sonunda Outlook varsayılan imzası görüntülenir.
5.5 Belirli bir e-posta hesabından kolayca e-posta gönderin
Excel'den e-posta göndermek için varsayılan hesap yerine belirli bir e-posta hesabı kullanmak istiyorsanız, Send Emails özelliği bunu kolayca yapmanıza yardımcı olur.
İhtiyacınız olan e-posta alanlarını içeren bir posta listesi oluşturduktan sonra, Send Emails iletişim kutusunu yapılandırırken "Seçenekler" > "Kimden gönderildi"ye tıklayın, ardından e-postaları göndermek istediğiniz e-posta hesabını seçin.
Not:E-posta hesabını seçtikten sonra, önünde bir onay işareti görüntülenecektir.
Bu Send Emails özelliği hakkında daha fazla bilgi almak için buraya tıklayın.
Kutools for Excel - Excel'i 300'den fazla temel araçla güçlendirin. Sürekli ücretsiz AI özelliklerinden yararlanın! Hemen Edinin
Sonuç olarak, Excel'den e-posta göndermek günlük işlerimizde oldukça faydalıdır. Bu makalede Excel'den e-posta göndermenin kapsamlı konuları ele alınmıştır; başka konular veya daha kolay çözümler varsa, lütfen yorum bırakarak bana bildirin.
En İyi Ofis Verimlilik Araçları
Kutools for Excel ile Excel becerilerinizi geliştirin ve daha önce hiç olmadığı kadar verimli olun. Kutools for Excel, üretkenliğinizi artırmak ve zamanınızı kaydetmek için300'den fazla gelişmiş özellik sunar. En çok ihtiyacınız olan özelliği almak için buraya tıklayın...
Office Tab, Office'e sekmeli arayüz getirir ve işinizi çok daha kolaylaştırır
- Word, Excel, PowerPoint'te sekmeli düzenleme ve okuma özelliğini etkinleştirin.
- Aynı pencerenin yeni sekmelerinde birden fazla belge açın ve oluşturun, yeni pencerelerde değil.
- Verimliliğinizi %50 artırır ve her gün yüzlerce fare tıklamasını azaltır!