Excel 如何创建每周发送邮件的时间触发器
我想请你帮个忙。我得到了一个电子表格,上面有代码,如果单元格(I3)包含一个txt“YES”,就会发送一封电子邮件 基本上,如果单元格(J3)为空,则(I3)返回值“是”,然后代码向单元格(B3)中的地址发送电子邮件。完成后,日期显示在单元格(J3)中,(I3)中的值变为“否”。因此,下一次,代码知道不需要向特定的人发送电子邮件 我在网上找到了这个密码。对代码做了一些修改,以适应表单1。我是个新手,请耐心点 在单元格(C3)中,我有开始日期,单元格(H3)有完成/到期日期。我希望我的电子表格在不打开工作簿的情况下自动发送电子邮件。 我想一个时间触发器,将发送电子邮件,如果特定的任务是在30天内到期,如果电子邮件可以生成每周一,直到它达到0天,然后一封电子邮件逾期-5 不确定电池(I3)或(J3)是否仍在使用 我希望我把一切都解释清楚Excel 如何创建每周发送邮件的时间触发器,excel,vba,excel-formula,Excel,Vba,Excel Formula,我想请你帮个忙。我得到了一个电子表格,上面有代码,如果单元格(I3)包含一个txt“YES”,就会发送一封电子邮件 基本上,如果单元格(J3)为空,则(I3)返回值“是”,然后代码向单元格(B3)中的地址发送电子邮件。完成后,日期显示在单元格(J3)中,(I3)中的值变为“否”。因此,下一次,代码知道不需要向特定的人发送电子邮件 我在网上找到了这个密码。对代码做了一些修改,以适应表单1。我是个新手,请耐心点 在单元格(C3)中,我有开始日期,单元格(H3)有完成/到期日期。我希望我的电子表格在
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
Dim保险
暗距离
暗BCell As范围
作为字符串的Dim iBody
把伊藤调成线
作为字符串的Dim对象
昏暗的白天
公共子集合EmailParams()
设定保险金额=表1.范围(“I2”)
设置lRange=Sheet1.Range(“I”和Rows.Count).End(xlUp)
iBody=空
iSubject=空
伊藤=空
对于范围内的每个B单元(保险、L范围)
如果BCell.Value=“是”,则
如果DateDiff(“d”,格式(现在(),“dd/mm/yyyy”),格式(范围(“G3”),
“dd/mm/yyyy”))对于发送自动邮件,您可以使用API或
用于转换excel工作表
我希望它对发送自动邮件有所帮助,您可以使用API或
用于转换excel工作表
我希望它有帮助您可以创建一个BAT文件,打开此工作簿,当工作簿打开后,运行一个自动打开宏,读取所有单元格内容
在此工作簿中编写以下代码:
Private Sub Workbook_Open()
MsgBox "Welcome"
End Sub
这是我前面提到的BAT文件的一个示例:
1.打开记事本
2.写下:
start Excel.exe "C:\Temporal\TEST.xlsm"
3.-另存为MyBat.bat
4.-转到面板控制-->管理工具-->任务计划程序-->创建基本任务
5.-设置要执行此bat文件的时间
我希望这对你有用!
干杯 您可以创建一个BAT文件,打开此工作簿,当工作簿打开后,运行一个读取所有单元格内容的自动打开宏
在此工作簿中编写以下代码:
Private Sub Workbook_Open()
MsgBox "Welcome"
End Sub
这是我前面提到的BAT文件的一个示例:
1.打开记事本
2.写下:
start Excel.exe "C:\Temporal\TEST.xlsm"
3.-另存为MyBat.bat
4.-转到面板控制-->管理工具-->任务计划程序-->创建基本任务
5.-设置要执行此bat文件的时间
我希望这对你有用!
干杯 关于我的评论,下面给出了使用Mail.delferredDeliveryTime
的示例。
此示例在下周一早上8点发送每封带有特定主题的电子邮件
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim Mail As Outlook.MailItem
If TypeOf Item Is Outlook.MailItem Then
Set Mail = Item
If Mail.Subject = "sample" Then
Mail.DeferredDeliveryTime = GetNextWeekday(vbMonday) & " 08:00 AM"
End If
End If
End Sub
Private Function GetNextWeekday(ByVal DayOfWeek As VbDayOfWeek) As Date
Dim diff As Long
diff = DayOfWeek - Weekday(Date, vbSunday)
If diff > 0 Then
GetNextWeekday = DateAdd("d", diff, Date)
Else
GetNextWeekday = DateAdd("d", 7 + diff, Date)
End If
End Function
关于我的评论,下面给出了使用Mail.delferreddeliverytime
的示例。
此示例在下周一早上8点发送每封带有特定主题的电子邮件
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim Mail As Outlook.MailItem
If TypeOf Item Is Outlook.MailItem Then
Set Mail = Item
If Mail.Subject = "sample" Then
Mail.DeferredDeliveryTime = GetNextWeekday(vbMonday) & " 08:00 AM"
End If
End If
End Sub
Private Function GetNextWeekday(ByVal DayOfWeek As VbDayOfWeek) As Date
Dim diff As Long
diff = DayOfWeek - Weekday(Date, vbSunday)
If diff > 0 Then
GetNextWeekday = DateAdd("d", diff, Date)
Else
GetNextWeekday = DateAdd("d", 7 + diff, Date)
End If
End Function
如果要在工作簿关闭时运行代码,则需要使用类似Windows任务调度器的工具@Redas Valantina您的评论表明,由于公司的政策,可能无法采用任务计划程序选项。在这种情况下,您可能会想考虑<代码> MAILIME.DEFRIEW PREDIVITIONTIME属性(Outlook)<代码> >代码> MAILIM对象< /代码>。但是,随着编程变得更简单,如果将excelvba
与Outlook实例一起使用,则会更简单。您没有计划每小时发送一次邮件,因此每天打开一次工作簿
活动应该不会有问题。如果将所有任务移动到outlookvba
,它可能可以执行所有此类任务,但会失去Excel的灵活性,因为收件人将基于标准。如果要在工作簿关闭时运行代码,则需要使用类似于Windows任务计划程序的工具@Redas Valantina您的评论表明,由于公司的政策,可能无法采用任务计划程序选项。在这种情况下,您可能会想考虑<代码> MAILIME.DEFRIEW PREDIVITIONTIME属性(Outlook)<代码> >代码> MAILIM对象< /代码>。但是,随着编程变得更简单,如果将excelvba
与Outlook实例一起使用,则会更简单。您没有计划每小时发送一次邮件,因此每天打开一次工作簿
活动应该不会有问题。如果您将所有任务移动到outlookvba
中,它可能可以执行所有此类任务,但会失去Excel的灵活性,因为收件人将基于标准。劳尔,谢谢。我使用我工作的公司的计算机。所以,我没有这台笔记本电脑的管理员权限。无论如何,非常感谢;)这意味着你没有被授权做你在这里描述的工作?不是真的,这是我自己的项目。试图让老年人在我们的项目中使用一些不同的东西。我已经用gsheet做了很多电子表格。但这一个要在MS excel中创建。只是我没有这台笔记本电脑的管理员权限,因为总部正在高度关注计算机安全Hi Raul,谢谢你。我使用我工作的公司的计算机。所以,我没有这台笔记本电脑的管理员权限。无论如何,非常感谢;)这意味着你没有被授权做你在这里描述的工作?不是真的,这是我自己的项目。试图让老年人在我们的项目中使用一些不同的东西。我已经用gsheet做了很多电子表格。但这一个要在MS excel中创建。只是我没有这台笔记本电脑的管理员权限,因为总公司正在高度关注/管理计算机安全