Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何创建每周发送邮件的时间触发器_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 如何创建每周发送邮件的时间触发器

Excel 如何创建每周发送邮件的时间触发器,excel,vba,excel-formula,Excel,Vba,Excel Formula,我想请你帮个忙。我得到了一个电子表格,上面有代码,如果单元格(I3)包含一个txt“YES”,就会发送一封电子邮件 基本上,如果单元格(J3)为空,则(I3)返回值“是”,然后代码向单元格(B3)中的地址发送电子邮件。完成后,日期显示在单元格(J3)中,(I3)中的值变为“否”。因此,下一次,代码知道不需要向特定的人发送电子邮件 我在网上找到了这个密码。对代码做了一些修改,以适应表单1。我是个新手,请耐心点 在单元格(C3)中,我有开始日期,单元格(H3)有完成/到期日期。我希望我的电子表格在

我想请你帮个忙。我得到了一个电子表格,上面有代码,如果单元格(I3)包含一个txt“YES”,就会发送一封电子邮件

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

我在网上找到了这个密码。对代码做了一些修改,以适应表单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
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中创建。只是我没有这台笔记本电脑的管理员权限,因为总公司正在高度关注/管理计算机安全