Outlook VBA ThisOutlookSession 2 宏可能吗?

如何解决Outlook VBA ThisOutlookSession 2 宏可能吗?

我有 2 个要在 Outlook 中使用的宏。第一个宣布约会。

Private Sub Application_Reminder(ByVal Item As Object)
 
If Item.MessageClass <> "IPM.Appointment" Then
  Exit Sub
End If
 
Dim xlApp As Excel.Application
Dim timeOffset As Long
Dim strTimeOffset As String
Set xlApp = Excel.Application

timeOffset = (Item.Start - Now) * 1440

Select Case True
Case timeOffset < 60 'starts in under 1 hour
  strTimeOffset = timeOffset & " minutes,"

Case timeOffset <= 1440 'starts in under a day
  timeOffset = timeOffset / 60 
  strTimeOffset = timeOffset & " hours,"
  
Case timeOffset > 1440 'starts in more than a day
  timeOffset = timeOffset / 1440
  strTimeOffset = timeOffset & " days,on " & Format(Item.Start,"mmmm d")
End Select

 xlApp.Speech.Speak Item.Subject & "Starts in " & strTimeOffset & " at " & Format(Item.Start,"hh:mm am/pm"),True

Set xlApp = nothing

End Sub

第二个发送预定的电子邮件

Private Sub Application_Reminder(ByVal Item As Object)
Dim objMsg As MailItem
Dim objApp As AppointmentItem
Dim Att As Attachment
Dim tmpFolder As String
Dim filePath As String
Set objMsg = Application.CreateItem(olMailItem)
MsgBox "Appointment Triggered"
'message is appointment
If Item.MessageClass <> "IPM.Appointment" Then Exit Sub
'The appointment is set as "Send Schedule Recurring Email" Category
If Item.Categories <> "Send Schedule Recurring Email" Then Exit Sub
'MsgBox Item.MessageClass
'MsgBox Item.Categories
'MsgBox Item.Location
'MsgBox Item.Subject
'MsgBox objMsg.Body
'MsgBox Environ("USERPROFILE")
'to get the path of the email attachment
tmpFolder = Environ("USERPROFILE")
'Add each attachment to email object to be sent
For Each Att In Item.Attachments
filePath = tmpFolder & "\" & Att.FileName
Att.SaveAsFile (filePath)
objMsg.Attachments.Add filePath
Kill filePath
Next Att
'send email object
objMsg.To = Item.Location
objMsg.Subject = Item.Subject
objMsg.Body = Item.Body
objMsg.Send
Set objMsg = nothing
End Sub

每个都单独工作,但我想同时使用两者。不幸的是,我不是一个程序员,所以我希望有人能解释一下,如果可以将它们结合起来或创建 ThisOutlookSession 的第二个实例,以便我可以同时使用两者。

谢谢!

解决方法

您可以将 Item 传递给您的每个(重命名的)订阅者:

Private Sub Application_Reminder(ByVal Item As Object)
    SaySomething Item
    SendAMail Item
End sub

Sub SaySomething(ByVal Item As Object)
   'do the speaking thing with `Item`
End sub

Sub SendAMail(ByVal Item As Object)
   'do the mail thing with `Item`
End sub
,

您可以将来自不同来源的代码合并到一个子程序中,也可以像 Tim 展示的那样将其拆分为单独的函数。我认为后者更好:

Private Sub Application_Reminder(ByVal Item As Object)
  AnnounceAppointments Item
  SendScheduledEmail Item
End Sub

Private Sub AnnounceAppointments(ByVal Item as Object)
  If Item.MessageClass <> "IPM.Appointment" Then
    Exit Sub
  End If
 
  Dim xlApp As Excel.Application
  Dim timeOffset As Long
  Dim strTimeOffset As String
  Set xlApp = New Excel.Application

  timeOffset = (Item.Start - Now) * 1440

  Select Case True
  Case timeOffset < 60 'starts in under 1 hour
    strTimeOffset = timeOffset & " minutes,"

  Case timeOffset <= 1440 'starts in under a day
    timeOffset = timeOffset / 60 
    strTimeOffset = timeOffset & " hours,"
  
  Case timeOffset > 1440 'starts in more than a day
    timeOffset = timeOffset / 1440
    strTimeOffset = timeOffset & " days,on " & Format(Item.Start,"mmmm d")
  End Select

  xlApp.Speech.Speak Item.Subject & "Starts in " & strTimeOffset & " at " & Format(Item.Start,"hh:mm am/pm"),True

  Set xlApp = Nothing
End Sub

Private Sub SendScheduledEmail(ByVal Item As Object)
  Dim objMsg As MailItem
  Dim objApp As AppointmentItem
  Dim Att As Attachment
  Dim tmpFolder As String
  Dim filePath As String
  Set objMsg = Application.CreateItem(olMailItem)
  MsgBox "Appointment Triggered"
  'message is appointment
  If Item.MessageClass <> "IPM.Appointment" Then Exit Sub
  'The appointment is set as "Send Schedule Recurring Email" Category

  If Item.Categories <> "Send Schedule Recurring Email" Then Exit Sub
  'MsgBox Item.MessageClass
  'MsgBox Item.Categories
  'MsgBox Item.Location
  'MsgBox Item.Subject
  'MsgBox objMsg.Body
  'MsgBox Environ("USERPROFILE")
  'to get the path of the email attachment
  tmpFolder = Environ("USERPROFILE")
  'Add each attachment to email object to be sent
  For Each Att In Item.Attachments
    filePath = tmpFolder & "\" & Att.FileName
    Att.SaveAsFile (filePath)
    objMsg.Attachments.Add filePath
    Kill filePath
  Next Att
  'send email object
  objMsg.To = Item.Location
  objMsg.Subject = Item.Subject
  objMsg.Body = Item.Body
  objMsg.Send
  Set objMsg = Nothing
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?