Spostare email da una cartelal di posta a un file .Pst

Anonimo
2015-03-23T09:20:40+00:00

Buongiorno a tutti. Ho trovato in qualche forum questo esempio per spostare email da una cartella di posta a un file con estensione ".Pst".

    Sub Archive_Outlook_eMails_To_Backup_PST_Folder()

    ' Declare Objects

    Dim SourceFolder As Outlook.MAPIFolder, DestFolder As Outlook.MAPIFolder

    Dim MailItem As Outlook.MailItem

    Dim SourceMailBoxName As String, DestMailBoxName As String

    Dim Source_Pst_Folder_Name As String, Dest_Pst_Folder_Name  As String

    Dim MailsCount As Double, NumberOfDays As Double

    'Set Number of days for aging check

    NumberOfDays = 10

    'Source Mailbox or PST name

    SourceMailBoxName = "******@libero.it"

    Source_Pst_Folder_Name = "Posta eliminata"

    Set SourceFolder = Outlook.Session.Folders(SourceMailBoxName).Folders(Source_Pst_Folder_Name)

    'Backup to this Mailbox or PST name

    DestMailBoxName = "D:\Profili\u086520\Desktop\PRogrammi\Outlook\Salvataggio\ProvaMove.pst"

    Dest_Pst_Folder_Name = "Posta"

    Set DestFolder = Outlook.Session.Folders(DestMailBoxName).Folders(Dest_Pst_Folder_Name)        'Errore 91

    'Set DestFolder = Outlook.Session.PickFolder                                                                                     'Funziona

    MailsCount = SourceFolder.Items.Count - 1

    While MailsCount > 0

        'Backup Mails Older than "Number of Days"

        Set MailItem = SourceFolder.Items.Item(MailsCount)

        If VBA.DateValue(VBA.Now) - VBA.DateValue(MailItem.ReceivedTime) >= NumberOfDays Then

            SourceFolder.Items.Item(MailsCount).Move DestFolder

        End If

        MailsCount = MailsCount - 1

    Wend

    MsgBox "Mailes in " & Source_Pst_Folder_Name & " are Processed"

End Sub

Funziona tutto se commento la riga con "Errore 91" e utilizzo quella che segue con la dicitura "Funziona" dove scelgo manualmente il Folder di destinazione, ma non mi spiego perché funziona se la il "SET DestFolder" contiene, non tutto il percorso del file Pst ma solo il nome edl Folder. 

E comunque non capisco l'errore 91, che oggetto non trova?

Grazie

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

7 risposte

Ordina per: Più utili
  1. Anonimo
    2015-03-26T08:12:31+00:00

    Ciao FulvioRobbiani,

    quello che ottieni con l'esempio che ti ho proposto e che sembra un indirizzo di rete è il percorso completo della cartella nella quale desideri spostare gli elementi ed è quello che dovrai usare, se ho ben compreso il problema, al posto di quello che usi attualmente nel codice.

    Quindi invece di:

    Dest_Pst_Folder_Name = "Posta"

    userai:

    Dest_Pst_Folder_Name = "\\Prova di Move\Posta"

    Sempre che io abbia capito bene il problema...

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-03-25T22:22:56+00:00

    Ciao FulvioRobbiani,

    l'istruzione che hai indicato con il commento "'Errore 91" è quella che ti permette di scegliere quale sarà la cartella di destinazione. L'errore viene prodotto quando invece di scegliere una cartella annulli l'operazione e la variabile oggetto DestFolder diventa "Nothing". (Il messaggio di errore è appunto Variabile oggetto o variabile del blocco With non impostata.)

    Pertanto nel tuo caso per prima cosa bisogna provvedere a fare qualcosa quando annulli la richiesta della finestra PickFolder. Per esempio:

        Set DestFolder = Outlook.Session.PickFolder

        If DestFolder Is Nothing Then

          MsgBox "L'utente ha annullato l'operazione."

    Exit Sub ' <--- Così esci dalla routine perché

    ' evidentemente se hai annullato non vuoi proseguire

        End If

    Poi controlla che l'istruzione che usa tale variabile oggetto faccia quel che deve, ovvero spostare (Move) gli elementi da SourceFolder a DestFolder:

    SourceFolder.Items.Item(MailsCount).Move DestFolder

    Forse nell'esempio ho commentato male le istruzioni:

    'Descrizione file .Pst e cartella che vorrei utilizzare come variabile tipo "MM YYYY"

        DestMailBoxName = "D:\Profili\u086520\Desktop\PRogrammi\Outlook\Salvataggio\ProvaMove.pst"

        Dest_Pst_Folder_Name = "Posta"

    'Questa è l'istruzione che mi da l'errore 91

    Set DestFolder = Outlook.Session.Folders(DestMailBoxName).Folders(Dest_Pst_Folder_Name)

    Sia "DestMailBoxName" che "Dest_Pst_Folder_Name" esistono

    'Non vorrei utilizzare

    Set DestFolder = Outlook.Session.PickFolder 

    perchè implica un'azione manuale.

    L'istruzione di

                SourceFolder.Items.Item(MailsCount).Move DestFolder

    funziona

    Grazie e ciao..

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-03-24T05:06:09+00:00

    Ciao FulvioRobbiani,

    l'istruzione che hai indicato con il commento "'Errore 91" è quella che ti permette di scegliere quale sarà la cartella di destinazione. L'errore viene prodotto quando invece di scegliere una cartella annulli l'operazione e la variabile oggetto DestFolder diventa "Nothing". (Il messaggio di errore è appunto Variabile oggetto o variabile del blocco With non impostata.)

    Pertanto nel tuo caso per prima cosa bisogna provvedere a fare qualcosa quando annulli la richiesta della finestra PickFolder. Per esempio:

        Set DestFolder = Outlook.Session.PickFolder

        If DestFolder Is Nothing Then

          MsgBox "L'utente ha annullato l'operazione."

    Exit Sub ' <--- Così esci dalla routine perché

    ' evidentemente se hai annullato non vuoi proseguire

        End If

    Poi controlla che l'istruzione che usa tale variabile oggetto faccia quel che deve, ovvero spostare (Move) gli elementi da SourceFolder a DestFolder:

    SourceFolder.Items.Item(MailsCount).Move DestFolder

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-03-23T19:40:49+00:00

    Ciao FulvioRobbiani,

    prova a eseguire, meglio se passo passo (F8), questo piccolo test:

    Option Explicit

    Public Sub Test()

    Dim DestFolder As Outlook.MAPIFolder

       

        Set DestFolder = Outlook.Session.PickFolder

        If DestFolder Is Nothing Then

          MsgBox "L'utente ha annullato l'operazione."

         

        Else

          With DestFolder

            MsgBox "FolderPath: '" & .FolderPath & "'" _

                 & vbNewLine & "Name: '" & .Name & "'"

          End With

         

        End If

       

        Set DestFolder = Nothing

    End Sub

    Questo è il risultato:

    FolderPath: '\Prova di Move\Posta'

    Name: 'Posta'

    Sembra essere un indirizzo di rete, ma come posso integrarlo nel codice precedente?

    Grazie 1000 per la sollecita rispsta.

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2015-03-23T16:42:40+00:00

    Ciao FulvioRobbiani,

    prova a eseguire, meglio se passo passo (F8), questo piccolo test:

    Option Explicit

    Public Sub Test()

    Dim DestFolder As Outlook.MAPIFolder

        Set DestFolder = Outlook.Session.PickFolder

        If DestFolder Is Nothing Then

          MsgBox "L'utente ha annullato l'operazione."

        Else

          With DestFolder

            MsgBox "FolderPath: '" & .FolderPath & "'" _

                 & vbNewLine & "Name: '" & .Name & "'"

          End With

        End If

        Set DestFolder = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento