Excel VBA验证自动电子邮件状态

斯科特·Fiander

到目前为止,我一直在网上无济于事。我有一个带有关联VBA代码的Excel电子表格,该电子表格每天在特定时间通过电子邮件将工作簿的内容发送给我工作的公司中的其他人。

此代码处于无限循环中,很少关闭。我们将其安装在一台计算机上,以全天执行此操作,以计算和更新Intranet上的各种内容。在每天的不同时间使用延时功能访问一些工作簿。

问题在于,有时代码运行得很快,最终发送的是同一工作簿的两封电子邮件,而不是一封。请参考下面的代码:

Private Declare Sub Sleep Lib "kernal32" (ByVal dwMilliseconds As Long)

Private Sub Workbook_Open()
Do While 1
Start = Timer

If Hour(Now())=13 & Minute(Now())>=45 Then
s = "path to file"
Application.DisplayAlerts = False
Workbooks.Open Filename:=s
ActiveWorkbook.SendMail Recipients:="[email protected]"
ActiveWindow.Close
End If

delay = Int(600 - (Timer - Start))
If delay>0 Then
delay = delay * 1000
Sleep delay
End If
Loop

End Sub

正如我所说,有更多的工作簿已激活并对其进行了计算,但也无需编写该代码。它们都遵循与上述几乎相同的格式。

我认为,如果我在循环中使用睡眠设置,则只能发送一次电子邮件,但这会花费太多时间。

我正在考虑使用一个简单的if语句来检查是否今天发送了一封电子邮件(使用Date?),如果是,只需关闭活动窗口,否则发送一封电子邮件。这样可以确保每个工作簿每天仅发送一封电子邮件。我唯一的麻烦是如何准确地编写代码...

关于我们正在使用的有关SendMail加载项的文档,我在网上找不到多少东西。我尝试的所有操作都出现错误,并且我不知道如何解决此问题。我尝试过的一个例子是:

If SendMail = False Then
"send the email"
Else
"close"

显然这是行不通的,但是值得尝试。

因此,如果有人可以帮助我,将不胜感激!

悉达思·劳特

我不确定您使用的时隙,但是我想问题是延迟不够好,因此您收到了两次电子邮件。

这是我尝试和测试的代码。我使用的方法与您使用的方法稍有不同,在该方法中,我与Outlook进行后期绑定,并将excel文件作为附件发送。这种方法的好处是您不必打开工作簿

测试条件

'Based on your comment, Testing for 4 different workbooks
'for 4 diff time intervals
'Time interval 1 : 11:30 PM - 11:35PM     C:\Temp\Book1.xlsx
'Time interval 2 : 11:35 PM - 11:40PM     C:\Temp\Book2.xlsx
'Time interval 3 : 11:40 PM - 11:45PM     C:\Temp\Book3.xlsx
'Time interval 4 : 11:45 PM - 11:50PM     C:\Temp\Book4.xlsx

逻辑

逻辑是设置该Wait值,使其不会再次重新进入同一循环。如果您在IF条件中指定开始时间和结束时间,则与您在代码中仅指定开始时间情况不同,这也会有所帮助

我已对代码进行了注释,以使您在理解代码时不会遇到问题。如果您仍然这样做,只需回发即可。

Private Sub Workbook_Open()
    Dim B1 As String, B2 As String, B3 As String, B4 As String
    Dim sEmail As String
    Dim SendEml As Boolean

    Dim OutApp As Object, OutMail As Object

    'Testing for 4 different workbooks for 4 diff time intervals
    'Time interval 1 : 11:30 PM - 11:35PM     C:\Temp\Book1.xlsx
    'Time interval 2 : 11:35 PM - 11:40PM     C:\Temp\Book2.xlsx
    'Time interval 3 : 11:40 PM - 11:45PM     C:\Temp\Book3.xlsx
    'Time interval 4 : 11:45 PM - 11:50PM     C:\Temp\Book4.xlsx

    B1 = "C:\Temp\Book1.xlsx"
    B2 = "C:\Temp\Book2.xlsx"
    B3 = "C:\Temp\Book3.xlsx"
    B4 = "C:\Temp\Book4.xlsx"

    '~~> Email Address
    sEmail = "[email protected]"

    Do
        Select Case Hour(Now())
            '~~> I have only one case here as I am checking for 11PM
            '~~> If your time slots fall under differnt hours then
            '~~> Create more cases accordingly
            Case 23
                If Minute(Now()) >= 20 And Minute(Now()) < 25 Then
                    FileToAttach = B1: SendEml = True
                ElseIf Minute(Now()) >= 25 And Minute(Now()) < 30 Then
                    FileToAttach = B2: SendEml = True
                ElseIf Minute(Now()) >= 30 And Minute(Now()) < 35 Then
                    FileToAttach = B3: SendEml = True
                ElseIf Minute(Now()) >= 35 And Minute(Now()) < 40 Then
                    FileToAttach = B4: SendEml = True
                End If
        End Select

        '~~> Latebind with Outlook to send the email
        If SendEml = True Then
            Set OutApp = CreateObject("Outlook.Application")
            Set OutMail = OutApp.CreateItem(0)

            With OutMail
                .To = sEmail
                .Subject = "SO Example"
                .Body = "Hi Scott :)"
                .Attachments.Add FileToAttach '<~~ This is where we attach the file
                .Send
            End With
            SendEml = False
        End If

        '~~> I have set the wait time for 200 seconds which is about 3.3 mins
        '~~> Change as applicable. You have to ensure that you set this carefully
        '~~> So that the Do Loop doesn't run in the same time frame else you will
        '~~> get duplicate emails.
        Wait 200
    Loop
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自动连接到ms excel并使用excel vba检查未读电子邮件

来自分类Dev

电子邮件中的附件VBA excel

来自分类Dev

VBA Excel 电子邮件格式问题

来自分类Dev

VBA使用OFT模板从Excel发送电子邮件-禁止自动签名

来自分类Dev

Excel VBA宏将文件名提取到自动电子邮件的正文中

来自分类Dev

如何通过Excel VBA在自动电子邮件正文上加粗文本或给文本上色

来自分类Dev

Excel VBA - 验证列中的电子邮件地址并复制到剪贴板

来自分类Dev

如何在Microsoft Excel中验证许多电子邮件

来自分类Dev

VBA函数解析电子邮件正文以获取电子邮件地址,并写入Excel

来自分类Dev

Excel VBA:根据日期获取电子邮件主题

来自分类Dev

通过VBA从Excel发送电子邮件附件

来自分类Dev

Excel VBA发送带有多个附件的电子邮件

来自分类Dev

Excel VBA代码从Outlook中检索电子邮件

来自分类Dev

从Excel VBA将签名插入Outlook电子邮件

来自分类Dev

VBA复制电子邮件正文到Excel作为表

来自分类Dev

Excel VBA,如何回复特定的电子邮件

来自分类Dev

带有Excel生成的电子邮件的nextline vba

来自分类Dev

带有Excel生成的电子邮件的nextline vba

来自分类Dev

Excel 2010电子邮件VBA发送整个工作簿

来自分类Dev

使用VBA从Excel格式化电子邮件正文

来自分类Dev

Q Excel VBA发送电子邮件

来自分类Dev

通过VBA从Excel发送电子邮件附件

来自分类Dev

Excel VBA 代码生成电子邮件但使 Outlook 崩溃

来自分类Dev

更改电子表格后,使用Outlook从Excel发送自动电子邮件

来自分类Dev

Excel 使用 Excel 工作表中的特定字段在 Outlook 中自动发送电子邮件

来自分类Dev

Vba 电子邮件生成器,来自 excel 电子表格的主题

来自分类Dev

使用Excel VBA将Word文档作为电子邮件发送到Excel中的列表

来自分类Dev

从Excel发送多封电子邮件

来自分类Dev

从 Excel 发送 Outlook 电子邮件

Related 相关文章

  1. 1

    自动连接到ms excel并使用excel vba检查未读电子邮件

  2. 2

    电子邮件中的附件VBA excel

  3. 3

    VBA Excel 电子邮件格式问题

  4. 4

    VBA使用OFT模板从Excel发送电子邮件-禁止自动签名

  5. 5

    Excel VBA宏将文件名提取到自动电子邮件的正文中

  6. 6

    如何通过Excel VBA在自动电子邮件正文上加粗文本或给文本上色

  7. 7

    Excel VBA - 验证列中的电子邮件地址并复制到剪贴板

  8. 8

    如何在Microsoft Excel中验证许多电子邮件

  9. 9

    VBA函数解析电子邮件正文以获取电子邮件地址,并写入Excel

  10. 10

    Excel VBA:根据日期获取电子邮件主题

  11. 11

    通过VBA从Excel发送电子邮件附件

  12. 12

    Excel VBA发送带有多个附件的电子邮件

  13. 13

    Excel VBA代码从Outlook中检索电子邮件

  14. 14

    从Excel VBA将签名插入Outlook电子邮件

  15. 15

    VBA复制电子邮件正文到Excel作为表

  16. 16

    Excel VBA,如何回复特定的电子邮件

  17. 17

    带有Excel生成的电子邮件的nextline vba

  18. 18

    带有Excel生成的电子邮件的nextline vba

  19. 19

    Excel 2010电子邮件VBA发送整个工作簿

  20. 20

    使用VBA从Excel格式化电子邮件正文

  21. 21

    Q Excel VBA发送电子邮件

  22. 22

    通过VBA从Excel发送电子邮件附件

  23. 23

    Excel VBA 代码生成电子邮件但使 Outlook 崩溃

  24. 24

    更改电子表格后,使用Outlook从Excel发送自动电子邮件

  25. 25

    Excel 使用 Excel 工作表中的特定字段在 Outlook 中自动发送电子邮件

  26. 26

    Vba 电子邮件生成器,来自 excel 电子表格的主题

  27. 27

    使用Excel VBA将Word文档作为电子邮件发送到Excel中的列表

  28. 28

    从Excel发送多封电子邮件

  29. 29

    从 Excel 发送 Outlook 电子邮件

热门标签

归档