Creare MAPIFolder in PST utilizzando VBA
-
09-10-2019 - |
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
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