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 Object xx Library への参照を追加したくない場合は、Late Binding を使用します。

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 に答える