到目前为止,我一直在网上四处寻找无济于事。我有一个带有相关 VBA 代码的 Excel 电子表格,它在每天的某个时间将工作簿的内容通过电子邮件发送给我工作的公司中的其他人。
此代码处于无限循环中,很少关闭。我们将它设置在一台计算机上,以便整天执行此操作,以计算和更新我们内部网上的各种内容。代码每天使用时间延迟功能在不同时间访问一些工作簿。
问题在于,有时代码运行得有点快,最终会发送同一工作簿的两封电子邮件,而不是一封。参考下面的代码:
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:="someone@someone.com"
ActiveWindow.Close
End If
delay = Int(600 - (Timer - Start))
If delay>0 Then
delay = delay * 1000
Sleep delay
End If
Loop
End Sub
正如我所说,有更多的工作簿被激活并对其进行了计算,但也不需要放置代码。这一切都遵循与上面几乎相同的格式。
我想如果我在循环中使用睡眠设置,我可以让它只发送一次电子邮件,但这会花费太多时间。
我正在考虑使用一个简单的 if 语句来检查今天是否发送了一封电子邮件(使用日期?),如果是,只需关闭活动窗口,否则发送一封电子邮件。这将确保每个工作簿每天只发送一封电子邮件。我遇到的唯一麻烦是如何准确地编码......
关于我们正在使用的 SendMail 插件的文档,我在网上找不到太多。我尝试的一切都会出现错误,我不知道如何解决这个问题。我尝试过的一个例子是:
If SendMail = False Then
"send the email"
Else
"close"
显然这行不通,但值得一试。
因此,如果有人可以帮我解决这个问题,将不胜感激!