4

我正在尝试创建一个用户表单,该表单将允许用户选择文件夹以将一组电子邮件复制到 Excel 电子表格。我已经完成了所有其余的工作(即创建了复制过程),但目前我必须为这个宏的每个新安装手动输入名称空间和文件夹层次结构。以下是我的手动过程

Set ol_App = New Outlook.Application
Set ol_Namespace = ol_App.GetNamespace("MAPI")
' Set ol_Folder = olNamespace.GetDefaultFolder(olFolderInbox)

' reference the folder that the emails are stored in
Set ol_Folder = ol_Namespace.Folders("Their own namespace")
Set ol_Folder = ol_Folder.Folders("Inbox")
Set ol_Folder = ol_Folder.Folders("Required_Folder")

现在这个 vba 将在少数人之间共享,每个人都有不同的设置。有没有办法我可以使用说列表框在用户表单中进行设置,他们所做的只是选择正确的文件夹并单击继续,文件夹选择存储在变量或某种类型中?

先感谢您,

4

2 回答 2

7

这是你正在尝试的吗?这也将消除使用列表框的需要。:)

Option Explicit

'~~> Set a reference to Outlook Object x.x Library
Sub Sample()
    Dim oOlApp As Outlook.Application
    Dim objNmSpc As Namespace
    Dim ofldr As Object

    Set oOlApp = Outlook.Application
    Set objNmSpc = oOlApp.GetNamespace("MAPI")
    Set ofldr = objNmSpc.PickFolder

    If Not ofldr Is Nothing Then MsgBox ofldr
End Sub

这里是通过后期绑定,即,如果您不想添加对 Outlook 对象 xx 库的引用

Option Explicit

Sub Sample()
    Dim oOlApp As Object, objNmSpc As Object, ofldr As Object

    '~~> Establish an Outlook application object
    On Error Resume Next
    Set oOlApp = GetObject(, "Outlook.Application")

    If Err.Number <> 0 Then
        Set oOlApp = CreateObject("Outlook.Application")
    End If
    Err.Clear
    On Error GoTo 0

    Set objNmSpc = oOlApp.GetNamespace("MAPI")
    Set ofldr = objNmSpc.PickFolder

    If Not ofldr Is Nothing Then MsgBox ofldr
End Sub

编辑

快照

在此处输入图像描述

于 2012-05-15T16:48:46.107 回答
0

您要做的是遍历 Outlook 文件夹,并让每个文件夹名称填充表单的激活事件中的列表框/组合框。通过这样做,当每个人运行它时,将使用他们自己的 Outlook 配置。

这个链接应该是一个好的开始Outlook 文件夹循环

于 2012-05-15T16:49:14.427 回答