0

我正在尝试使用 vba usind application.ontime 事件编写电子邮件提醒,但这对我来说是第一次,所以我有一些问题。

首先在这里我想做的是:

我有一张这样的桌子

在此处输入图像描述

如果在显示的小时前一小时内未单击“确定”按钮,我希望发送一封电子邮件,所以我正在尝试一些带有 ontime 事件的代码,我知道可以触发多个时间事件,所以为了避免丢失跟踪准时通话我想做这样的事情:

(这只是一个尝试代码的工作簿,一旦我发现我会在真正的工作簿上调整代码)

  Sub timer()

      r = TimeSerial(Hour(Foglio1.Cells(1, "h").Value), Minute(Foglio1.Cells(1, "h").Value), 0)

      Application.OnTime r, "test"

      End Sub

这是定时器子的启动,然后在这里测试

Sub test()
 Dim i As Long

   Foglio1.Cells(1, 1).Value = Foglio1.Cells(1, 1).Value + 1


   Call test2
  End Sub

测试是我最终放置电子邮件提醒宏的地方(这只是为了让我不明白它是如何工作的)

然后在这里 test2

   Sub test2()

    Dim oraricheck As New Collection

    For i = 1 To 3

           oraricheck.Add Foglio1.Cells(i, "l").Value
    Next i


         Dim orascritta As Date

          orascritta = Foglio1.Cells(1, "h").Value

          Dim num As Long

            num = Ncoll(oraricheck, orascritta)
          On Error GoTo basta
          Foglio1.Cells(1, "h").Value = oraricheck(num + 1)


           Call timer

            basta:

            End Sub


              Function Ncoll(coll As Collection, ora As Date) As Long

                Dim i As Long


                  For i = 1 To coll.Count

                     If coll(i) = ora Then

                         Ncoll = i
                         Exit Function
                         End If

                          Next i



                      End Function

所以我的想法是,我编写了一个代码来提取最早的时间并将其放入一个单元格中(在示例中 Foglio1.Cells(1, "h").Value)

然后启动计时器--->测试->使用test2我创建了一个从最小到最大顺序检查所需的时间集合,一旦检查最早的时间,那么第二小的时间将放在H1中,所以直到所有日期都被选中。

现在我有一些问题

如果我关闭工作簿,我停止了准时事件,如果我打开工作簿,则恢复,但是如果我打开这本书并且设置的时间已经过去,会发生什么?

例如

application.ontime 时间值(“12:00:00”),“测试”

如果当我开始准时 12 时会发生什么?

什么都没有,或者电话将在第二天的同一时间设置?

我再次尝试通过工作簿打开事件中的恢复调用来启动准时事件关闭并重新打开

 Private Sub Workbook_Open()
  Call timer

 End Sub

子工作但由于某种原因单元格没有更新,直到我在工作表中做某事,这正常吗?还是只是一个错误?

又是另一个问题

如果我建立一个时间集合并设置一系列准时事件,我该如何停止已经设置的事件?

我怎样才能从他们停止的地方恢复(如果可能的话)?

提前致谢

我希望我说清楚了(对不起我的英语)

4

0 回答 0