2016-03-25 15 views
0

Makroya yeni kayıt oldum. Son tarih yaklaşırken e-posta AUTOMATICALLY göndermek için excel gerekir. (Örnek yaklaşık 15 gün önce). E-postanın, tarihe veya koşullu formatlamaya bakılmaksızın tüm bireylere gönderildiği noktaya kadar çok şey yaptım.VBA 2013'te otomatik olarak e-posta gönderme

If mydate2 - datetoday2 >= 15 Then 

O tarih daha sonra başarılı olursa size e-posta göndermek istediğiniz farz edeceğim:

Dim myApp As Outlook.Application, mymail As Outlook.MailItem 
     Dim mydate1 As Date 
     Dim mydate2 As Long 
     Dim datetoday1 As Date 
     Dim datetoday2 As Long 

Dim x As Long 
With Sheet1 

     Lastrow = .Cells(Rows.Count, 1).End(xlUp).Row 
     For x = 2 To Lastrow 

     mydate1 = Cells(x, 6).Value 
     mydate2 = mydate1 

Cells(x, 10).Value = mydate2 

     datetoday1 = Date 
     datetoday2 = datetoday1 

Cells(x, 9).Value = datetoday2 

     If mydate2 - datetoday2 >= 15 Then 

End If 

    'Cells(x, 8).Font.Bold = “Send” 
    Cells(x, 8).Interior.ColorIndex = 3 
    Cells(x, 8).Font.ColorIndex = 1 
    Cells(x, 8).Font.Bold = True 
    Cells(x, 8).Value = datetoday2 - mydate2 

     Dim olApp As Outlook.Application 
     Dim olEmail As Outlook.MailItem 

     Set olApp = New Outlook.Application 
     Set olEmail = olApp.CreateItem(olMailItem) 
     olEmail.To = Cells(, 5).Value 

With olEmail 

     .BodyFormat = olFormatHTML 
     '.Display 
     .HTMLBody = "<h1>Hej </h1><br> Detta är ett mail som du ska läsa" & "<br>" & .HTMLBody 
     .Subject = "Möte" 
     .BCC = Cells(x, 5).Value 

     '.send 
End With 

Next 
     Set myApp = Nothing 
     Set mymail = Nothing 
End With 

End Sub 

cevap

0

Sen iki tarih arasındaki farkı test ediyoruz bir çizgi var. (Umarım bu varsayım konusunda yanılıyorum. Belirli bir gün için bir testin ondan daha iyi olması gerekiyor. Daha fazlası aşağıda.) Yani e-posta gönderim kodunuzun, sonra… ve sonra bitmeden önce olmasını istiyorsunuz. Eğer. Bununla birlikte, hemen ardından aşağıdakileri takip edersiniz. -

Dim d1 As Date 
Dim d2 As Date 
Dim days As Long 

d1 = CDate("1 Jan 2016") 
d2 = CDate("16 Jan 2016") 

days = DateDiff("d", d2, d1) ' days is -15 
days = DateDiff("d", d1, d2) ' days is +15 

If days = 15 Then 

    ' send email code 

End If 

Alkış: Yapmak gereken gerçek testi dönersek

If mydate2 - datetoday2 >= 15 Then 

    'Cells(x, 8).Font.Bold = “Send” 
    Cells(x, 8).Interior.ColorIndex = 3 

    ' Code missed out here for clarity & brevity. 

    With olEmail 
     .BodyFormat = olFormatHTML 
     '.Display 
     .HTMLBody = "<h1>Hej </h1><br> Detta är ett mail som du ska läsa" & "<br>" & .HTMLBody 
     .Subject = "Möte" 
     .BCC = Cells(x, 5).Value 

     '.send 
    End With 

End If ' Here is the end if from above 
Next 

, sen DateDiff işlevini kullanmalısınız:

Aşağı alt eğer son vermek gerekiyor

+0

'mydate2 - datetoday2> = 15 'iyi çalışıyor. Tarihler, gün sayısı sayısına eşit tamsayı değeriyle çiftler halinde depolanır, böylece önem verdiğiniz tüm günler günlerse bunlar eklenebilir ve çıkarılabilir. Eğer herhangi bir şey varsa, OP'ler uzun bir süreye yayılırlarsa gereksizdir - sadece ondalık değerin sağında saklanan zaman değerini göz ardı ederler. – Comintern

+0

Bunu biliyorum. Ayrıca ondalıkları ortadan kaldıran kullanışlı bir işlev sunmak istedim. Tarih çıkarma işlemi ile testi, daha doğal olarak bana okuyan, = 15 & < 16; numaralı bir tarih ve 15 ile olur. Stil kişisel bir şeydir :) –

+0

'> 'bir amaç için var olduğunu varsayıyorum - örneğin kod günlük olarak çalıştırılmadığı için kaçırılan son başvuru tarihlerini hesaba katmak. "Tarz kişisel bir şey" dediğiniz gibi, ama genellikle 1 kod satırı 5'den çok daha açık ve daha okunabilir ve matematiksel bir işleç, bir işlev çağrısının parametre sırasını hatırlamaktan daha okunabilir. – Comintern