首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动脱机/联机Outlook

自动脱机/联机Outlook
EN

Stack Overflow用户
提问于 2017-06-30 04:59:17
回答 2查看 2.2K关注 0票数 0

我的大部分任务都是通过Outlook 2016完成的,即我做的大部分工作都是撰写和回复电子邮件。如果我不将Outlook切换到脱机状态,我就会从不断的流入中分心。很多时候,在一小时左右的时间内,我不需要回复,因为任务已经处理好了。

我可以手动切换Outlook offline /online,但我想知道是否有宏可以自动执行此操作。

我的日程安排如下

上午7:45在线10:45在线10:50在线12:45在线12:50离线14:30在线14:35离线15:55在线16:00离线16:55在线17:00离线

具有手动覆盖的能力?

这个是可能的吗?

我可以执行基本的Excel宏,但我从未创建过Outlook宏

EN

回答 2

Stack Overflow用户

发布于 2017-06-30 10:10:46

扩展的MAPI (C++或Delphi) -你可以使用IMAPIOfflineMgr::SetCurrentState

对于除C++或Delphi之外的其他语言,您可以使用Redemption及其RDOSessionOffline属性:

代码语言:javascript
运行
复制
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
Session.Offline = true

但是请记住,IMAPIOfflineMsg接口不能在不同的进程(例如outlook.exe和excel.exe)之间进行封送处理,因此IMAPIOfflineMgr和RDOSession.Offline都不能在Excel VBA中工作。您可以尝试使用Accessibility API或再次使用Redemption及其SafeExplorer对象来模拟单击“脱机工作”按钮:

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2017-06-30 22:54:36

多亏了Slipstick的Diane,以及我自己的一些工作,我找到了一个解决方案。请参阅https://forums.slipstick.com/threads/95555-vba-to-switch-outlook-online-offline/

有三组宏-一组用于脱机切换,一组用于联机切换,另一组用于为计划分配任务。前两个宏在这里,第三个你可以在上面的论坛参考中找到。

希望这能帮助到某人

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44834901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档