Я думаю, что у меня может быть решение, которое работает, основываясь на некоторых советах, которые уже даны.
Короче говоря, мы создаем глобальный массив, и каждый раз, когда пользователь нажимает save
, SendTime записывается в массив. Это служит для отслеживания всех наших запланированных времен.
Когда рабочая книга закрыта, мы перебираем массив и удаляем все запланированные времена.
Я проверил это, и, похоже, он работал в Excel 2003. Дайте мне знать, как вы поживаете.
Dim scheduleArray() As String //Set as global array to hold times
Private Sub Workbook_BeforeSave
SendTime = Sheets("Email").Range("B9")
AddToScheduleArray SendTime
Application.OnTime SendTime, "SendEmail"
End Sub
Private Sub Workbook_BeforeClose
On Error Resume Next
Dim iArr As Integer, startTime As String
For iArr = 0 To UBound(scheduleArray) - 1 //Loop through array and delete any existing scheduled actions
startTime = scheduleArray(iArr)
Application.OnTime TimeValue(startTime), "SendEmail", , False
Next iArr
End Sub
Sub AddToScheduleArray(startTime As String)
Dim arrLength As Integer
If Len(Join(scheduleArray)) < 1 Then
arrLength = 0
Else
arrLength = UBound(scheduleArray)
End If
ReDim Preserve scheduleArray(arrLength + 1) //Resize array
scheduleArray(arrLength) = startTime //Add start time
End Sub