1

初めての質問:D.

Outlook 2007 の Marco を作成して、ユーザーがフォルダーを選択できるようにし、そのフォルダーを使用してすべてのメール アイテムをそこから移動し、選択したフォルダー名を個人用フォルダーの下の宛先として使用する個人用アーカイブ フォルダーに移動します。 .

例えば

ユーザーは、「Test」という名前のランダム フォルダーを選択します。

マルコは事前に個人用フォルダーにマップされ、同じ名前のサブフォルダーを見つけてメールアイテムを移動します。

私の質問:

私は現在、'を使用しています。PickFolder ' 使用してフォルダを選択するための構文. 何をすべきかは、複数選択フォルダ フォームを使用することです:

  • Combobox および listbox フォームを使用して、すべてのフォドラーの Mapi をカスタム フォームに表示するにはどうすればよいでしょうか。

これは 1 つのレベルにしかないことは理解していますが、200 以上のフォルダーが 1 つのレベルにあるため、これで十分です。

コードのとおり、一度に1つのフォルダーで見事に動作しますが、アンチを上げたいです。

ありがとうございます。

4

1 に答える 1

1

フォルダーの完全なリスト (以下のコード) を取得するという問題に取り組みましたが、他の部分でさらにヘルプが必要な場合は、コメントを追加してください。回答を拡張します。

ComboBox で何をするのか理解できませんでした。この例では、フォームを作成し、ListBox (と呼ばれるListBox1) を追加しました。以下のコードは、選択したフォルダーから下に向かってすべてのフォルダーの名前をリストボックスに入力します。コメントを読んで、他に何ができるかを確認してください (たとえば、サブフォルダーを再帰する - この場合は必要ないことはわかっています)。

さらにヘルプや情報が必要な場合はお知らせください。

Private Sub PopulateListBoxWithFolders()

    Dim objApp As Outlook.Application
    Dim objNamespace As Outlook.NameSpace
    Dim objFolder As Outlook.MAPIFolder

    ' Clear current contents of listbox
    ListBox1.Clear

    Set objApp = New Outlook.Application

    Set objNamespace = objApp.GetNamespace("MAPI")

    ' Allow user to select folder.
    ' Replace this with either objNamespace.GetDefaultFolder(...) or objNamespace.GetFolderFromID(...)
    ' to avoid the user having to select a folder
    Set objFolder = objNamespace.PickFolder

    ' See if the user cancelled or no folder found
    If Not objFolder Is Nothing Then
        ' Addition of true here recurses through all subfolders
        ProcessFolder objFolder ', True
    End If

End Sub

' Populates the ListBox with the folders. Optionally you can recurse all folders
Sub ProcessFolder(objStartFolder As Outlook.MAPIFolder, Optional blnRecurseSubFolders As Boolean = False, Optional strFolderPath As String = "")

    Dim objFolder As Outlook.MAPIFolder

    Dim i As Long

     ' Loop through the items in the current folder
    For i = 1 To objStartFolder.Folders.Count

        Set objFolder = objStartFolder.Folders(i)

        ' Populate the listbox
        ListBox1.AddItem ListBox1.Text + objFolder.FolderPath

        If blnRecurseSubFolders Then
            ' Recurse through subfolders
            ProcessFolder objFolder, True, strFolderPath + "\" + objFolder.FolderPath
        End If
    Next

End Sub

複数選択リストボックスで選択されたアイテムを識別するコードが必要な場合は、ここにあります。ListBox を複数選択するMultiSelectには、フォーム エディターでプロパティを次のように設定する必要があります。1 - fmMultiSelectMulti

Private Sub btnOK_Click()
    Dim i As Long

    ' Loop through all items in the listbox identifying those that are selected
    With ListBox1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then
                ' Here goes the code to act on the selected item
                ' In the example below it outputs to the Immediate window
                Debug.Print .List(i)
            End If
        Next i
    End With

End Sub
于 2013-03-28T14:49:14.407 に答える