Outlook 2013 VBA:存储用户定义的设置

Outlook 2013 VBA:存储用户定义的设置,vba,outlook,Vba,Outlook,目前在办公室,我们有Outlook 2003。我们将迁移到Outlook 2013。 在Outlook2003中,我们有一个命令栏,例如将邮件项目保存到用户指定的文件夹或将项目移动到所需的团队。 在userform中,最终用户可以将其设置设置为所需的文件夹或选择当前所在的团队。在此设置表单中,用户可以填写多个输入字段。 每当他单击命令栏上的按钮时,outlook都会检查他的设置,查看他所在的团队、所需的保存文件夹等。 此用户定义的设置由其标记存储和调用 (Application.ActiveEx

目前在办公室,我们有Outlook 2003。我们将迁移到Outlook 2013。 在Outlook2003中,我们有一个命令栏,例如将邮件项目保存到用户指定的文件夹或将项目移动到所需的团队。 在userform中,最终用户可以将其设置设置为所需的文件夹或选择当前所在的团队。在此设置表单中,用户可以填写多个输入字段。 每当他单击命令栏上的按钮时,outlook都会检查他的设置,查看他所在的团队、所需的保存文件夹等。 此用户定义的设置由其标记存储和调用
(Application.ActiveExplorer.commandbar(“工具栏”).Controls.Item(1.tag)

据我在互联网上发现,Outlook 2013不支持命令栏。我可以安装命令栏,但只要重新启动outlook,命令栏就会消失,设置也会消失

是否有办法将最终用户所做的设置保存/存储在userform中,以便脚本根据其设置将邮件项目保存到正确的文件夹或团队中

我试图找到一个解决方案,但还没有找到,或者不知道去哪里找

希望你能引导我朝着正确的方向去寻找解决方案


(注意:我懂一点VBA,可以读写,但很难解释它是如何工作的。如果我在问题中遗漏了一些关键信息,请告诉我。)

Outlook不允许使用VBA自定义功能区UI。您唯一能做的就是将宏指定给QAT按钮(或在Outlook中手动添加控件)

您需要开发一个外接程序,以便能够自定义Ribbon UI(也称为Fluent UI)。有关更多信息,请参阅

在MSDN的以下系列文章中阅读有关Fluent UI的更多信息:

是否有办法将最终用户所做的设置保存/存储在userform中,以便脚本根据其设置将邮件项目保存到正确的文件夹或团队中

使用标记属性不是存储用户设置的最佳方式。当然,您可以使用标准方式在PC上存储设置-文件(XML、文本或您自己的二进制格式)、windows注册表等


但是Outlook对象模型为此提供了隐藏项。Folder类的方法返回父文件夹上的对象以存储Outlook解决方案的数据。有关更多信息,请参阅

正如我承诺的那样,我使用了一些代码示例来存储和获取设置。 也许这不是最好的方法,但它解决了我存储设置的问题,也许它可以帮助其他人

首先,我做了一点检查,看看设置是否已经存在

Function Hidden_Settings_Aanwezig() As Boolean

Dim oNs As Outlook.Namespace
Dim oFL As Outlook.folder
Dim oItem As Outlook.StorageItem

On Error GoTo OL_Error

Set oNs = Application.GetNamespace("MAPI")
Set oFld = oNs.GetDefaultFolder(olFolderInbox)
Set oItem = oFld.GetStorage("Hidden Settings", olIdentifyBySubject)

If oItem.Size <> 0 Then
    Hidden_Settings_Aanwezig = True
    Else
    Hidden_Settings_Aanwezig = False
End If

Exit Function
OL_Error:
MsgBox (Err.Description)
Err.Clear

End Function
使用以下代码调用上述函数:

If Hidden_Settings_Aanwezig = True Then
   Call Get_Hidden_Settings_Startup
Else
   Maak_Settings_Hidden
End If
要使用其中一个设置,我使用以下代码。 在主sub中,我使用以下行:

DestFolder = Get_Hidden_Settings("Export Folder")
要调用此函数,请执行以下操作:

Function Get_Hidden_Settings(Setting) As String

Dim oNs As Outlook.Namespace
Dim oFL As Outlook.folder
Dim oItem As Outlook.StorageItem

On Error GoTo OL_Error

Set oNs = Application.GetNamespace("MAPI")
Set oFld = oNs.GetDefaultFolder(olFolderInbox)
Set oItem = oFld.GetStorage("Hidden Settings", olIdentifyBySubject)

If oItem.Size <> 0 Then
    Get_Hidden_Settings = oItem.UserProperties(Setting)
End If

Exit Function
OL_Error:
MsgBox (Err.Description)
Err.Clear

End Function
函数获取隐藏设置(设置)为字符串
作为Outlook.Namespace设置名称
Dim oFL作为Outlook.folder
将oItem设置为Outlook.StorageItem
On错误转到OL_错误
设置oNs=Application.GetNamespace(“MAPI”)
Set of ld=oNs.GetDefaultFolder(olFolderInbox)
Set oItem=oFld.GetStorage(“隐藏设置”,oliIdentityBySubject)
如果oItem.Size为0,则
获取隐藏设置=oItem.UserProperties(设置)
如果结束
退出功能
OL_错误:
MsgBox(错误描述)
呃,明白了
端函数

如果我正确理解您的问题,我会做以下几点:

1) 将VBA内容导出到*.bas文件(对于模块)和*.frx(对于用户窗体)中。这是在VBA编辑器的文件-->导出中完成的。您可以对每个项目(模块和用户表单)执行此操作。将这些文件保存在记忆棒上或任何适合您的地方

2) 将Outlook 2013中的这些文件导入VBA编辑器(方法相同,但-->文件-->当然可以导入),例如从记忆棒加载

这将使您的VBA代码在新的Outlook 2013环境中可用

3) 您的命令栏将不可用。但您可以轻松创建其他内容:在Office 2013(等)产品中,您可以向“功能区”添加内容。例如,您可以创建一个名为“我的自制工具”的新选项卡,并可以在其中放置调用VBA过程的按钮。在那里你可以找到“新建…”的按钮

为此:-->文件-->Optiobs-->自定义功能区-->宏


注意:在Office 2013(等)的标准安装中,您将无法访问VBA编辑器。要使编辑器可用,请浏览-->文件-->选项-->自定义功能区,并在“开发操作器工具”字段中设置一个勾号。这将使该名称的选项卡显示在“功能区”中。

我没有使用Outlook 2013,但我想您可以使用许多不同的方法保存设置,如在任何Windows客户端上,例如在注册表中,在设置文件(XML或其他)中等。此外,较新的Office产品使用功能区而不是命令栏,请参阅“为Outlook自定义功能区”在MSDN上:我没有Visual Studio,并且由于政策的原因,注册表被锁定。但是GetStorage方法似乎是存储这些设置的答案。对于Ribbon,我认为可以创建一个XML文件,将其存储在网络共享上,并可能通过启动事件加载该XML文件。我要调查一下。如果我让它工作,我会发布我的代码,以便其他人可以使用它。谢谢你的邀请。
Function Get_Hidden_Settings(Setting) As String

Dim oNs As Outlook.Namespace
Dim oFL As Outlook.folder
Dim oItem As Outlook.StorageItem

On Error GoTo OL_Error

Set oNs = Application.GetNamespace("MAPI")
Set oFld = oNs.GetDefaultFolder(olFolderInbox)
Set oItem = oFld.GetStorage("Hidden Settings", olIdentifyBySubject)

If oItem.Size <> 0 Then
    Get_Hidden_Settings = oItem.UserProperties(Setting)
End If

Exit Function
OL_Error:
MsgBox (Err.Description)
Err.Clear

End Function