【问题标题】:Outlook 2013 VBA: store user defined settingsOutlook 2013 VBA:存储用户定义的设置
【发布时间】:2019-02-21 01:50:09
【问题描述】:

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

据我在互联网上发现,Outlook 2013 不支持命令栏。我可以安装commandBar,但是一旦您重新启动Outlook,该栏就消失了,设置也消失了。

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

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

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

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

【问题讨论】:

  • 我没有使用过 Outlook 2013,但我猜您可以使用许多不同的方法保存设置,例如在任何 Windows 客户端上,例如在注册表中、在设置文件(XML 或其他)等中。还有,较新的 Office 产品使用功能区而不是命令栏,请参阅 MSDN 上的“为 Outlook 自定义功能区”:msdn.microsoft.com)/en-us/library/bb398246.aspx

标签: vba outlook


【解决方案1】:

Outlook 不允许使用 VBA 自定义功能区 UI。您唯一能做的就是为 QA​​T 按钮分配一个宏(或在 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 了解更多信息。

【讨论】:

  • 我没有 Visual Studio,并且由于政策原因,寄存器被锁定。但是 GetStorage 方法似乎是我存储这些设置的答案。对于功能区,我认为可以创建一个 XML 文件,将其存储在网络共享上,并可能通过启动事件加载此 XML 文件。我要调查一下。如果我让它工作,我会发布我的代码,以便其他人可以使用它。谢谢你的遮阳篷。
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多