vba da eposta gonderme

Cevapla
hhd001
Mesajlar: 2
Kayıt: Cmt Haz 22, 2024 11:53 pm
Adınız: hakkı
Soyadınız: dmr

vba da eposta gonderme

Mesaj gönderen hhd001 »

Merhaba
Sayfam da asagıdakı kodlar ıle eposta gonderıyorum. Fakat eposta gitmeden outlok uygulamasını kapattıgı ıcın maıl gitmıyor. kodlar da outlok uygulamasını sımge durumunda kuculterek uygulamadan cıkış yapmamasını nasıl saglarım.

Kod: Tümünü seç

Private Sub CommandButton8_Click()

Dim OutApp As Object, Outmail As Object
Set OutApp = CreateObject("Outlook.Application")
Set Outmail = OutApp.CreateItem(0)
Outmail.BodyFormat = 2
With Outmail
.To = "aaaaaa@hotmail.com"
.CC = ""
.Subject = "DENEME"
dosya = Worksheets("veri").Range("G3").Value & ".txt"

.Attachments.Add (Environ("USERPROFILE") & "\Desktop\" & "\" & dosya)
'Not: Dosya yolunu yazdıktan sonra tırnak işaretlerini kaldırın
.Display
.Send 'Göndermek için .send den önceki ' tek tırnak işaretini kaldırın
End With
Set Outmail = Nothing: Set OutApp = Nothing

End Sub
theLastpart
Mesajlar: 3
Kayıt: Cum Eki 10, 2025 1:22 pm
Meslek: Planlama Müdürü
Adınız: Ferit
Soyadınız: Kuru

Re: vba da eposta gonderme

Mesaj gönderen theLastpart »

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.
Cevapla
  • Benzer Konular
    Cevaplar
    Görüntüleme
    Son mesaj