2017-03-27 35 views
1

我使用JavaScript和Windows脚本宿主与Outlook项目的工作目前活动Outlook店。确定在VBA/WSH VBS

这已经足够简单,直到我们的用户之一指出,脚本不工作,因为他已经在Outlook中配置两个Exchange配置文件。

的一个脚本应该工作在第二轮廓,但如果我访问,例如Outlook类别主列表,这是从标准配置文件加载的。

答案是很容易的,我只需要解决的正确Outlook store object。我的脚本需要确定在当前活动的Outlook Explorer中正在访问哪个存储,并且我找不到原生功能。

给定一个outlook application objectvar ol = new ActiveXObject("Outlook.Application"),我可以通过简单地调用ol.[ActiveExplorer()][4];但会话对象,通过这些商店进行访问,不提供等效的功能本身确定当前活动Outlook资源管理器。

,我想出了一个解决办法,通过与环比商店的display names

ol.Session.Stores.Item(counter).DisplayName // "[email protected]" 

所以我有工作代码比较explorer's caption

ol.ActiveExplorer().Caption // "Inbox - [email protected] - Outlook" 

function ActiveStore(olApplication) { 
    var ActiveExplorerCaption=olApplication.ActiveExplorer().Caption; 
    for (var storeCounter=1; storeCounter<=olApplication.Session.Stores.Count; storeCounter++) { 
     var storeDisplayName=olApplication.Session.Stores.Item(storeCounter).DisplayName; 
     if (ActiveExplorerCaption.indexOf(storeDisplayName)!=-1) return olApplication.Session.Stores.Item(storeCounter); 
    } 
    return "undefined"; 
}; 

var ol = new ActiveXObject("Outlook.Application"); 
WScript.Echo("The Outlook store currently active in an explorer is called "+ActiveStore(ol).DisplayName); 

但是,我想知道:

  • 将这个代码总是工作,即此变量始终在此设立方式,或者只是在安装我可以
  • 工作是不是有更好的办法来确定当前活动的商店吗?
+0

快速解释,为什么我用Visual Basic标记了这一点,当我使用JavaScript时:我明显对vba(脚本)中的解决方案开放,因为这是Outlook更常用的。如果有一种解决方案可以在Outlook vba中运行,那么我可以将其适应wsh jscript。 – mheim

回答

3

既然你有ActiveExplorer,你也有Explorer.CurrentFolder,因此Folder.StoreID。然后使用该StoreID值使用Namespace.GetStoreFromID。

+0

谢谢,这正是我错过的链接。不过,我现在用的[Folder.Store(https://msdn.microsoft.com/en-us/library/office/ff863350.aspx),而不是[Folder.StoreID](https://msdn.microsoft .COM/EN-US /图书馆/办公室/ ff867495.aspx)。 这将我的功能从问题简化为一行: 'function ActiveStore(olApplication){return olApplication.ActiveExplorer()。CurrentFolder.Store; }' – mheim