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

时间:2015-04-21 09:41:11

标签: vba outlook

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

到目前为止,我在互联网上发现Outlook 2013不支持命令栏。我可以安装commandBar,但是一旦你重新启动outlook,该栏就会消失,设置也就消失了。

有没有办法将最终用户的设置保存/存储在用户窗体中,以便脚本根据他的设置将邮件项目保存到正确的文件夹或团队?

我试图找到一个解决方案,但尚未发现它,或者不知道在哪里寻找。

希望您能引导我找到正确的方向寻找解决方案。

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

3 个答案:

答案 0 :(得分:1)

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

您需要开发一个加载项才能自定义功能区UI(也称为Fluent UI)。有关详细信息,请参阅Walkthrough: Creating a Custom Tab by Using the Ribbon Designer

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

  

有没有办法将最终用户的设置保存/存储在用户窗体中,以便脚本根据他的设置将邮件项目保存到正确的文件夹或团队?

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

但Outlook对象模型为此提供了隐藏的项目。 Folder类的GetStorage方法在父文件夹上返回StorageItem对象,以存储Outlook解决方案的数据。有关详细信息,请参阅Storing Data for Solutions

答案 1 :(得分:1)

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

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

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

如果没有,以下代码使用以下代码在用户窗体上创建基于tekstbox和复选框的设置

Function Maak_Settings_Hidden()

Dim oNs As Outlook.Namespace
Dim oFld As Outlook.folder
Dim oSItem As Outlook.StorageItem

On Error GoTo OL_Error

Set oFld = Application.Session.GetDefaultFolder(olFolderInbox)
Set oSItem = oFld.GetStorage("Hidden Settings", olIdentifyBySubject)

'repeat the next to lines for every setting you want to store
oSItem.UserProperties.Add "Export Folder", olText
oSItem.UserProperties("Export Folder").Value = TextBox1.Text

oSItem.Save

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

要使用其中一个设置,请使用以下代码。 在主要子中,我使用以下行:

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

答案 2 :(得分:0)

如果我正确理解了您的问题,我将采取以下措施:

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

2)将Outlook 2013中的这些文件导入VBA编辑器中(以同样的方式,但是->文件->导入),例如从记忆棒中加载它们。

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

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

要这样做:->文件-> Optiobs->自定义功能区->宏

注意:在Office 2013(等)的标准安装中,您将无权访问VBA编辑器。要使编辑器可用,请通过->文件->选项->自定义功能区,然后在“ Develooper工具”字段中设置一个刻度线。这将使该名称的标签显示在“功能区”中。