2012-10-04 1 views
0

J'ai écrit ce petit programme VS2010 pour fonctionner sur Outlook 2007.programme Outlook pour déplacer les pièces jointes à SubFolder

Il travaille pour une lecture standard dans la boîte de réception, mais je ne peux pas le faire pour pointer correctement vers d'autres dossiers , J'obtiens une erreur "COMException a été gérée par le code utilisateur" qui dit "L'opération a échoué. Un objet n'a pas pu être trouvé." ...

J'ai inclus une capture d'écran de ma structure Outlook si elle aide ...

Imports Microsoft.Office.Interop 

Public Class ThisAddIn 
Private Sub ThisAddIn_Startup() Handles Me.Startup 
End Sub 
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown 
End Sub 
Private Sub Application_Startup() Handles Application.Startup 

    Dim MyApp As Outlook.Application = New Outlook.Application 
    Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI") 
    Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) 
    Dim MyEmails As Integer = MyInbox.Items.Count 
    Dim MyEMail As Outlook.MailItem 
    Dim MyCount As Integer 
    Dim MySubFolder As Outlook.MAPIFolder = MyNS.Folders("Kickabout") **<<< Error occurs here** 

    For MyCount = MyEmails To 1 Step -1 
     MyEMail = MyInbox.Items(MyCount) 
     If MyEMail.SenderEmailAddress = "[email protected]" Then 
      If MyEMail.Attachments.Count > 0 Then 
       MySubFolder = MyNS.Folders("Kickabout\Attachments") 
      End If 
      MyEMail.Move(MySubFolder) 
     End If 
    Next 
End Sub 

End Class 

My Outlook Structure

+0

avez-vous essayé d'utiliser le débogueur et sett un point d'arrêt sur la ligne 'Dim MySubFolder ...' et l'extension de l'arborescence 'MyNs.Folders' pour voir ce qu'il y a dedans? Dans les services Web Exchange, je ne pense pas qu'il les clés par nom, mais plutôt par ID et vous devez utiliser une fonction distincte pour les trouver par leur nom. – Origin

+0

Oui, j'utilisais le débogueur et n'allait nulle part, spectaculairement !!! Cependant, j'ai trouvé une solution dans l'ancien site de Sue Mosher, www.outlookcode.com et vous avez raison, j'avais besoin d'une fonction, je vais mettre le code maintenant ... –

Répondre

0

OK, j'ai résolu moi-même ... si quelqu'un est intéressé par le l'avenir, vous devez être tout à fait explicite dans la mise en place du chemin & besoin d'une fonction pour le faire, voici le code ...

Imports Microsoft.Office.Interop 

Public Class ThisAddIn 

Dim strFolderPath As String 

Private Sub ThisAddIn_Startup() Handles Me.Startup 
End Sub 
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown 
End Sub 
Private Sub Application_Startup() Handles Application.Startup 

    Dim MyApp As Outlook.Application = New Outlook.Application 
    Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI") 
    Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) 
    Dim MyEmails As Integer = MyInbox.Items.Count 
    Dim MyEMail As Outlook.MailItem 
    Dim MyCount As Integer 
    Dim MySubFolder As Outlook.Folder = GetMyFolder("Outlook (Gary)\Kickabout") 
    Stop 
    For MyCount = MyEmails To 1 Step -1 
     MyEMail = MyInbox.Items(MyCount) 
     If MyEMail.SenderEmailAddress = "[email protected]" Then 
      If MyEMail.Attachments.Count &gt; 0 Then 
       MySubFolder = GetMyFolder("Outlook (Gary)\Kickabout\Attachments") 
      End If 
      MyEMail.Move(MySubFolder) 
     End If 
    Next 
End Sub 

Function GetMyFolder(FolderPath) 
    ' folder path needs to be something like 
    ' "Public Folders\All Public Folders\Company\Sales" 
    Dim aFolders 
    Dim fldr 
    Dim i 
    Dim objNS 

    On Error Resume Next 
    strFolderPath = Replace(FolderPath, "/", "\") 
    aFolders = Split(FolderPath, "\") 

    'get the Outlook objects 
    ' use intrinsic Application object in form script 
    objNS = Application.GetNamespace("MAPI") 

    'set the root folder 
    fldr = objNS.Folders(aFolders(0)) 

    'loop through the array to get the subfolder 
    'loop is skipped when there is only one element in the array 
    For i = 1 To UBound(aFolders) 
     fldr = fldr.Folders(aFolders(i)) 
     'check for errors 
     'If Err() &lt;&gt; 0 Then Exit Function 
    Next 
    GetMyFolder = fldr 

    ' dereference objects 
    objNS = Nothing 
End Function 
End Class 
Questions connexes