【发布时间】:2019-03-13 15:33:12
【问题描述】:
我想请你帮个忙。如果单元格 (I3) 包含 txt "YES",我得到一个带有代码的电子表格,该代码会发送电子邮件。
基本上,如果单元格 (J3) 为空,则 (I3) 返回值“YES”,然后代码向单元格 (B3) 中的地址发送一封电子邮件,一旦完成,日期就会出现在单元格 (J3) 中(I3) 中的值变为“NO”。所以下一次代码知道不需要向特定的人发送电子邮件。
我得到了这个互联网代码。对代码进行了一些修改以适应 sheet1。我对此很陌生,请耐心等待。
在单元格 (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
【问题讨论】:
-
如果您想在工作簿关闭时运行代码,那么您需要使用 Windows 任务计划程序之类的东西。 stackoverflow.com/questions/22771185/…
-
@Redas Valantina 您的 cmets 建议,由于公司政策,可能无法采用任务调度程序选项。在这种情况下,您可能需要考虑
MailItem.DeferredDeliveryTime Property (Outlook)或MailItem Object。然而,如果excel vba与Outlook instance一起使用,它会简单得多,因为编程变得更简单。您没有计划每小时发送一次邮件,因此每天一次的Workbook_open事件应该不是问题。如果您将所有任务移至Outlook VBA,它可能能够执行所有此类任务,但它将失去 Excel 的灵活性,因为Recipients将基于标准。
标签: excel vba excel-formula