如何创建一个时间触发器,该触发器每周发送一次邮件

时间:2019-03-12 14:52:42

标签: excel vba excel-formula

我想请您帮个忙。我得到了一个电子表格,其中包含代码,如果单元格(I3)包含文本“是”,该代码将发送电子邮件。

基本上,如果单元格(J3)为空,则(I3)返回值“是”,然后代码将完成后的电子邮件发送到单元格(B3)中的地址,日期显示在单元格(J3)上(I3)中的值变为“ NO”。因此,在下一次情况下,代码知道不需要将电子邮件发送给特定的人。

enter image description here

我得到了这段互联网代码。对代码做了一些修改以适合工作表1。我对此很陌生,请耐心等待。

在单元格(C3)中,我有开始日期,在单元格(H3)中,我有结束日期。我希望我的电子表格在不打开工作簿的情况下自动发送电子邮件。 我希望有一个时间触发器,如果​​特定任务在30天内到期,并且可以在每个星期一生成一封电子邮件,直到达到0天,然后再发送一封过期的电子邮件-5,则可以发送电子邮件。

不确定单元格(I3)或(J3)是否仍在使用中。

我希望我能清楚地解释一切。

 Dim uRange
 Dim lRange
 Dim BCell As Range
 Dim iBody As String
 Dim iTo As String
 Dim iSubject As String
 Dim DaysOverdue

 Public Sub SetEmailParams()

 Set uRange = Sheet1.Range("I2")
 Set lRange = Sheet1.Range("I" & Rows.Count).End(xlUp)

 iBody = Empty
 iSubject = Empty
 iTo = Empty

 For Each BCell In Range(uRange, lRange)

 If BCell.Value = "YES" Then

 If DateDiff("d", Format(Now(), "dd/mm/yyyy"), Format(Range("G3"), 
"dd/mm/yyyy")) <= 0 Then

 DaysOverdue = DateDiff("d", Format(BCell.Offset(0, -6)), 
 Format(BCell.Offset(0, -1)))

 iTo = BCell.Offset(0, -7).Value
 iSubject = "Reminder"
 iBody = "The job assigned to you under this describtion - " & 
 BCell.Offset(0, -4) & " in the name of " & BCell.Offset(0, -3) & " for the 
 confirmation date of " & BCell.Offset(0, -1) & " is due " & DaysOverdue & " 
 days."

 SendEmail

 BCell.Offset(0, 1).Value = Now()

 End If

 End If

 Next BCell

 End Sub

 Private Sub SendEmail()

 Dim OutApp As Object
 Dim OutMail As Object
 Dim strbody As String

 Set OutApp = CreateObject("Outlook.Application")
 Set OutMail = OutApp.CreateItem(0)

 On Error Resume Next
 With OutMail
 .To = iTo
 .CC = ""
 .BCC = ""
 .Subject = iSubject
 .Body = iBody
 'You can add a file like this
 '.Attachments.Add ("C:\test.txt")
 .Send 'or use .Send to automatically send without displaying
 End With
 On Error GoTo 0

 Set OutMail = Nothing
 Set OutApp = Nothing

End Sub

2 个答案:

答案 0 :(得分:0)

您可以创建一个BAT文件,该文件将打开此工作簿,当工作簿打开时,然后运行一个Auto_Open宏以读取所有单元格内容。

在ThisWorkbook中编写以下代码:

Private Sub Workbook_Open()

    MsgBox "Welcome"

End Sub

这是我之前提到的BAT文件的示例:

1.-打开记事本

2.-写下:

start Excel.exe "C:\Temporal\TEST.xlsm"

3.-将其另存为MyBat.bat

4.-转到面板控制->管理工具->任务计划程序->创建基本任务

5.-设置执行该bat文件的时间!

我希望这对您有用! 干杯!

答案 1 :(得分:0)

参考我的评论,下面给出了一个使用CommandTimeout = 1; var count = (int)ExecuteQueryDynamic($"SELECT count(*) FROM {database}.dbo.{name}").Single(); 的示例。 此示例在下一个星期一的早上8点向每个发送带有特定主题的电子邮件。

Mail.DeferredDeliveryTime