Domanda

Sto cercando di copiare una struttura di cartelle e sottocartelle da un PST di Outlook a un altro e hanno difficoltà con l'affermazione Folders.Add():

Private Sub Process(S As MAPIFolder, T As MAPIFolder, RootLevel As Boolean, BeforeDate As Date)
Dim N As NameSpace, F As MAPIFolder, G As MAPIFolder

    ' S is source folder (parameter)
    ' T is target folder (parameter)
    ' F is current source subfolder for recursion (private)
    ' G is target folder for recursion (private)

    Set N = Application.GetNamespace("MAPI")

    ' recurse through subfolders
    For Each F In S.Folders
        If F.Items.Count <> 0 Or F.Folders.Count <> 0 Then          ' process only if items or subfolders found

            If FoundFolder(T, F) Then                               ' this function works fine
                Set G = T.Folders(F.Name)                           ' found - just assign
            Else
                Set G = T.Folders.Add(F.Name, N.GetDefaultFolder(F.DefaultItemType))        ' not found - create
            End If
            '
            ' more code (working well)
            '                
            ' process next level without Root flag
            Process F, G, False, BeforeDate
        End If
    Next F
    Set F = Nothing
    Set G = Nothing
End Sub

Finché nella dichiarazione Folders.Add() non specificare il parametro Type a tutti, viene creata una cartella con DefaultType olMailItem (perché la mia cartella principale sembra essere una cartella di posta). Tuttavia, voglio creare una cartella dello stesso tipo, come la cartella di origine.

prima osservazione peculiare:

  • Guida di VBA, MSN e altri dicono che per Folders.Add (nome, tipo) Tipo è opzionale Long.
  • VBA Editor dice (in suggerimento quando battitura) Type è MAPIFolder

2 ° osservazione: Comunque cerco di impostare l'argomento tipo, ricevo un errore


Errore -2147024809 (80070057)

Impossibile completare l'operazione. Uno o più valori dei parametri non validi


Ho provato il seguente

' Type as Long
Set G = T.Folders.Add(F.Name, 0)
Set G = T.Folders.Add(F.Name, olMailItem)
Set G = T.Folders.Add(F.Name, OlItemType.olMailItem)
Set G = T.Folders.Add(F.Name, F.DefaultItemType) ' this is what I actually want
' Type as MAPIFolder
Set G = T.Folders.Add(F.Name, F)
Set G = T.Folders.Add(F.Name, N.GetDefaultFolder(F.DefaultItemType))

Error - Errore - Errore

Cosa fare per creare una cartella dello stesso tipo come la fonte della cartella F

Chiunque aiuto .... si prega

Saluti MikeD

È stato utile?

Soluzione

OK risolto .... problema è stato semplicemente usato il enumerazione sbagliato : - (

La funzione di creazione di una cartella MAPI di tipo simile a Source sotto di una determinata aspetto Target in questo modo:

Private Function CreateFolderOfType(Source As MAPIFolder, Target As MAPIFolder) As MAPIFolder
Dim F As MAPIFolder

    Set CreateFolderOfType = Nothing
    ' if source already exists below Target
    For Each F In Target.Folders
        If F.Name = Source.Name Then
            Set CreateFolderOfType = F
            Exit Function
        End If
    Next F

    Select Case Source.DefaultItemType
    Case olAppointmentItem
        Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderCalendar)
    Case olContactItem, olDistributionListItem
        Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderContacts)
    Case olJournalItem
        Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderJournal)
    Case olMailItem, olPostItem
        Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderInbox)
    Case olNoteItem
        Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderNotes)
    Case olTaskItem
        Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderTasks)
    Case Else
        Set CreateFolderOfType = Target.Folders.Add(Source.Name)
    End Select
End Function
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top