【问题标题】:Outlook vba codes saved under application_reminder does not always work保存在 application_reminder 下的 Outlook vba 代码并不总是有效
【发布时间】:2020-08-25 00:47:51
【问题描述】:

我设计了一个简单的解决方案,让五人团队自动获知团队的日常关键任务是否已完成。我为每个任务创建了一个单独的任务,并将任务的提醒设置为与任务的时间(0 分钟前)相同。 结构是这样的; 任务所有者完成任务,截取屏幕截图(作为证明。这是必须的)并将其以预定义的文件名保存在特定文件夹(file.jpg)中。
弹出相关的outlook任务提醒,运行代码查找该文件,如果找到该文件,则不执行任何操作;如果文件不存在,则向团队发送一封电子邮件,说明任务未完成。 代码保存在 Outlook 的 application_reminder 下,我也有几个函数保存在一个模块下。 代码在前一个或两个实例的任务提醒触发后运行良好,但由于某种原因停止工作。提醒弹出,但代码不运行。

  1. 知道为什么代码不起作用吗?有什么解决办法吗
    关于这个问题?
  2. 你知道的任何其他解决方案,做我想做的事。
  3. 我可以将其转换为 vsto 项目吗?这会不会更有效 解决方案? (到目前为止,我在 Visual Studio 中什么也没做,但我想 开始使用)

我在下面粘贴代码仅供参考。正如我所说,代码适用于第一个实例。但我们总是欢迎改进建议。

Private Sub Application_Reminder(ByVal Item As Object)

    Dim objPeriodicalMail As MailItem
    If Item.Categories = "Screenshot" Then
        Call Screenshot(Item.Subject)
    End If

End Sub
*************************
Function reppdate() As Date  'returns previous working date
Dim yest As Date
Dim tatiller As Variant
tatiller = Array("19.05.2020", "06.05.2020", "05.05.2020", "04.05.2020", "01.05.2020", "01.01.2020")  'local holidays
j = -1

For i = 0 To UBound(tatiller)
    yest = Format(DateAdd("w", j, Now()), "dd.mm.yyyy")
    If yest = tatiller(i) Then
            If Weekday(yest) = 2 Then
                j = j - 3
            Else: j = j - 1
            End If
    Else
        If j < -1 Then
        Exit For
        Else: End If
    End If
Next i
reppdate = yest
End Function
**************************************
Sub Screenshot(dosya As String)
yestt = reppdate()
Dim objMsg As MailItem
Set objMsg = Application.CreateItem(olMailItem)
vamsg = "Dikkat, " & dosya & ".jpg bulunamadi, rapor gönderilmemis mi!"
dosyaadi1 = "c:folder\" & Format(yestt, "yyyymm") & "\Daily\" & Format(yestt, "dd") & "\" & dosya & ".jpg"
baglanti = "<a href=" & dosyaadi1 & ">" & vamsg & "</a>"

            If FileFolderExists(dosyaadi1) = False Then
            msg = vamsg
            Else
            End If

      objMsg.To = "vvvvv.com"
      objMsg.Subject = msg
      objMsg.Body = msg & " - " & dosyaadi1
      objMsg.Send

      Set objMsg = Nothing

End Sub

【问题讨论】:

  • 更新:我发现我为指定任务分配的“屏幕截图”类别奇怪地消失了。现在我重新分配了类别并且现在工作正常。如果再次失败,我会及时通知您。

标签: vba outlook vsto outlook-addin office-addins


【解决方案1】:
  1. Categories 属性值可能包括分配的另一个字符串类别。因此,我建议改为检查具有特定值的子字符串。
Contains = InStr(strBaseString, strSearchTerm)

Categories 是已分配给 Outlook 项目的类别名称的分隔字符串。此属性使用 Windows 注册表中 HKEY_CURRENT_USER\Control Panel\International 下的值名称 sList 中指定的字符作为多个类别的分隔符。要将类别名称字符串转换为类别名称数组,请使用 Microsoft Visual Basic 函数Split

  1. 我建议在调试器下运行代码,看看它是如何工作的以及失败的地方。此外,您可以添加错误处理例程,请参阅Error Handling in VBA

  2. 没有直接迁移。基本上,您必须创建一个新的加载项项目并在那里添加您的事件处理程序。然后,您可以将代码从 VBA 事件处理程序转换为加载项的代码。有关详细信息,请参阅 https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/aa830702(v=office.12)?redirectedfrom=MSDNCreate VSTO Add-ins for Office by using Visual Studio

【讨论】:

  • 感谢您的回复。请在 org question 下查看我的更新。
  • 除此之外,我只想确定您的响应#2(错误处理)。目前我的代码中没有错误处理例程。也没有“on error resume next”或其他错误消息抑制。如果发生错误,我应该会看到 Outlook 的错误消息弹出到我的屏幕上,对吗?不过,我将此作为对良好编码实践的建议。
猜你喜欢
  • 1970-01-01
  • 2019-01-30
  • 2022-01-01
  • 2019-12-31
  • 2012-08-21
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多