我的大部分任务都是通过Outlook 2016完成的,即我所做的大部分工作都是编写和回复电子邮件。如果我没有将Outlook切换到离线状态,我会从不断的流入中分心。而且经常在一个小时左右的时间内我不需要回应,因为任务已经处理完毕。
我可以手动切换Outlook离线/在线,但我想知道是否有一个可以自动执行此操作的宏。
我的日程安排如下
早上7点在线 8:45离线 10:45在线 10:50离线 12:45在线 12:50离线 14:30在线 14:35离线 15:55在线 16:00离线 16:55在线 17:00离线
能否手动覆盖?
这可能吗?
我可以做基本的Excel宏,但我从来没有制作过Outlook宏
答案 0 :(得分:0)
扩展MAPI(C ++或Delphi) - 您可以使用IMAPIOfflineMgr::SetCurrentState。
对于除C ++或Delphi之外的其他语言,您可以使用Redemption及其RDOSession。Offline
属性:
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
Session.Offline = true
请注意,IMAPIOfflineMsg interfaace无法在不同进程(例如outlook.exe和excel.exe)之间进行封送,因此IMAPIOfflineMgr和RDOSession.Offline都无法在Excel VBA中运行。您可以尝试模拟"离线工作"按钮使用Accessibility API,或者再次使用Redemption及其SafeExplorer对象:
set sExplorer = CreateObject("Redemption.SafeExplorer")
sExplorer.Item = Application.ActiveExplorer
set Ribbon = sExplorer.Ribbon
oldActiveTab = Ribbon.ActiveTab
Ribbon.ActiveTab = "Send / Receive"
set Control = Ribbon.Controls("Work Offline")
Control.Execute
Ribbon.ActiveTab = oldActiveTab 'restore the active tab
答案 1 :(得分:0)
感谢Diane at Slipstick,以及我自己的一些工作,我找到了解决方案。见https://forums.slipstick.com/threads/95555-vba-to-switch-outlook-online-offline/
有三组宏 - 一组用于离线切换,一组用于在线切换,然后是宏用于为调度分配任务。前两个宏在这里,第三个你可以在上面的论坛参考中找到。
希望这有助于某人
Sub SetOffline()
Dim oNS As NameSpace
Set oNS = Application.Session
If oNS.ExchangeConnectionMode <> olCachedOffline And _
oNS.ExchangeConnectionMode <> olOffline Then
Dim olApp As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim objExpl As Outlook.Explorer
Set olApp = Application
Set olNS = olApp.GetNamespace("MAPI")
Set objExpl = olApp.ActiveExplorer
objExpl.CommandBars.ExecuteMso ("ToggleOnline")
End If
End Sub
和
Sub OnlineStatus()
Dim oNS As NameSpace
Set oNS = Application.Session
If oNS.ExchangeConnectionMode = olOnline
Dim olApp As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim objExpl As Outlook.Explorer
Set olApp = Application
Set olNS = olApp.GetNamespace("MAPI")
Set objExpl = olApp.ActiveExplorer
objExpl.CommandBars.ExecuteMso ("ToggleOnline")
End If
End Sub
答案 2 :(得分:0)
感谢您找到信息Jo8888
代码以令人困惑的方式定义对象(有些未使用)
这是每个潜艇
的单行版本Sub ToggleStatus()
Application.ActiveExplorer.CommandBars.ExecuteMso ("ToggleOnline")
End Sub
Sub ReportStatus()
Debug.Print Application.Session.ExchangeConnectionMode ' prints out status (numeric value)
' here are the numeric values of the connectionMode constants that are defined in outlook
' olNoExchange = 0,
' olOffline = 100,
' olCachedOffline = 200,
' olDisconnected = 300,
' olCachedDisconnected = 400,
' olCachedConnectedHeaders = 500,
' olCachedConnectedDrizzle = 600,
' olCachedConnectedFull = 700,
' olOnline = 800
End Sub