E-posta Gönderimini Doğrudan Yapın (.Send Kullanın): Eğer mevcut kodunuzda .Display metodu kullanıyorsanız (ki bu e-posta penceresini açar ve manuel göndermeye bırakır), bunu .Send ile değiştirin. Bu sayede pencere hiç açılmaz ve Outlook kapatılma riski azalır. Minimize işlemi de gerekmez.
Outlook'u Minimize Edin: Eğer .Display kullanmaya devam etmek istiyorsanız (örneğin kullanıcı incelemek için), e-posta penceresi açıldıktan hemen sonra Outlook'u minimize edin. Bu, pencereyi küçültür ama uygulamayı kapatmaz.
Kod: Tümünü seç
Sub EPostaGonder()
Dim OutApp As Object
Dim OutMail As Object
Dim alici As String, konu As String, metin As String
alici = "ornek@email.com" ' Alıcı e-posta
konu = "Test Konusu"
metin = "Merhaba, bu bir test e-postasıdır."
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application") ' Outlook zaten açıksa bağlan
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application") ' Açık değilse aç
End If
On Error GoTo 0
Set OutMail = OutApp.CreateItem(0) ' Yeni e-posta oluştur
With OutMail
.To = alici
.Subject = konu
.Body = metin
' Ek dosya eklemek isterseniz: .Attachments.Add "dosya_yolu.xlsx"
.Display ' Pencereyi aç (görmek için; yoksa .Send yapın)
' Veya doğrudan gönder: .Send ' (Pencere açmadan gönderir, önerilen)
End With
' Outlook penceresini minimize et (e-posta gönderildikten hemen sonra)
OutApp.ActiveWindow.WindowState = 1 ' 1 = olMinimized (simge durumuna küçült)
' Temizlik
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
GetObject vs. CreateObject: Outlook zaten açıksa mevcut instance'ı kullanır, değilse yeni açar. Bu, birden fazla pencere açılmasını önler.
.Display vs. .Send: .Display pencereyi açar ve kullanıcı manuel gönderebilir (kapatma riski var). .Send doğrudan gönderir ve pencere açmaz – bu sorunu kökünden çözer. Eğer onay mekanizması istiyorsanız .Display kullanın, ama minimize ile koruyun.
Minimize Kodu: OutApp.ActiveWindow.WindowState = 1 ile ana Outlook penceresini küçültür. Eğer sadece e-posta penceresini küçültmek isterseniz, .Display'den hemen sonra OutMail.GetInspector.WindowState = 1 ekleyin.
Kapatma Önleme: Minimize ile "kapat" butonu aslında minimize olur, ama tam kapatma için Outlook'un kendi ayarlarını değiştirin:
Outlook'ta Dosya > Seçenekler > Gelişmiş > Başlangıç ve Çıkış bölümünden "Çıkış yapıldığında Outlook'u kapat" seçeneğini devre dışı bırakın. Veya üçüncü parti araçlar (örneğin Kutools for Outlook) ile "Kapat yerine Minimize" özelliği ekleyin.
Kodunuzu test ederken On Error Resume Next ekleyin ki hatalar durmasın. E-posta gönderiminden sonra MsgBox "E-posta gönderildi!" ile onay alın.
Güvenlik: Outlook'ta makro güvenliğini etkinleştirin (Dosya > Seçenekler > Güvenlik Merkezi).
Eğer kodunuzda farklı bir yapı varsa (örneğin döngü içinde birden fazla e-posta), minimize kodunu döngü dışına alın ki her seferinde küçültmesin.