2016-03-25 20 views
0

マクロを初めて使用しています。 期日が近づいたら自動的にメールを送信する必要があります。 (約15日前の例)。私は、これまでのところ、do-dateまたは条件付き書式に関係なく、電子メールがすべての個人に送信されるまでになっています。VBA 2013で電子メールを自動送信

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 

答えて

0

あなたは2つの日付の差テストしている行があります:私はその日が成功した場合、あなたは電子メールを送信したいと仮定するつもりです

If mydate2 - datetoday2 >= 15 Then 

を。 (私はその前提について間違っていることを願っています。特定の日数のテストがそれより優れている必要があります。以下を参照してください。)したがって、if..then行の後でEnd if。しかし、すぐにif ... then End Ifを実行します。 -

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 

乾杯:あなたが確認する必要があり、実際のテストに戻って

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 

、あなたはDateDiff関数を使用する必要があります。

あなたがダウン下場合終止符を打つ必要があります

+0

'mydate2 - datetoday2> = 15'が問題なく動作します。日付は整数値が日数に等しい倍数として格納されるため、気になるものがすべて日数であれば、それを加算したり減算したりすることができます。何かがあれば、LongにキャストされたOPは余分なもので、小数点の右側に格納されている時間値のみを破棄します。 – Comintern

+0

私はそれを知っています。小数点以下を削除する便利な関数を紹介したかったのです。日付の減算で、彼のテストは>となり、それはもっと自然に私に読まれる= 15となります。スタイルは個人的なものです:) –

+0

私は '>'が目的のために存在すると仮定しています - たとえば、コードが毎日実行されていないために逃した期限を考慮する。あなたが言うように、 "スタイルは個人的なものです"と言いますが、私は一般的に、関数呼び出しのパラメータの順番を覚えるよりも読みやすい、5行と数学演算子よりもはるかに明確で読みやすいコードを見つけます。 – Comintern

関連する問題