Ordner aus Outlook Papierkorb löschen

  • Sonstige

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von nocode.

    Ordner aus Outlook Papierkorb löschen

    Hallo
    ich möchte in einem Otlook 2007 (angebunden an Exchange 2010) einen Ordner (hier:"test1") aus öffentliche Ordner in meinen privaten Kalender kopieren. Eine eventuell schon vorhandene Kopie soll gelöscht werden. Diese eigentlich überschaubare Aufgabe scheitert aber daran das ich den Ordner aus Gelöschte Elemente nicht löschen kann. Um es noch komplizierter zu machen funktionert der Code wenn ich ihn im Debugger per Einzelschritt durchlaufen lasse. Will ich das Makro ausführen erhalte ich immer die Meldung
    Laufzeitfehler -2147352567 (80020009) Dieser Ordner kann nicht gelöscht werden. ... Wenden Sie sich an den Besitzer des Ordners oder den Administrator um ihre Berechtigung zu ändern.
    Und hier der durch Experimente etwas verunstaltete Code

    Visual Basic-Quellcode

    1. Private Function GetFolder(ByVal strFolder As String) As Outlook.Folder
    2. On Error Resume Next
    3. Set GetFolder = Outlook.Session.Folders("Öffentliche Ordner")
    4. Set GetFolder = GetFolder.Folders("Alle Öffentlichen Ordner")
    5. Set GetFolder = GetFolder.Folders(strFolder)
    6. End Function
    7. Private Function GetCoppyFolder(ByVal strFolder As String) As Outlook.Folder
    8. Dim mytmpKalenderFolder As Outlook.Folder
    9. On Error Resume Next
    10. Set GetCoppyFolder = Outlook.Session.GetDefaultFolder(olFolderCalendar)
    11. Set mytmpKalenderFolder = GetCoppyFolder
    12. Set GetCoppyFolder = GetCoppyFolder.Folders(strFolder)
    13. If mytmpKalenderFolder.Name = GetCoppyFolder.Name Then
    14. Set GetCoppyFolder = Nothing
    15. End If
    16. End Function
    17. Private Function GetdeletedFolder(ByVal strFolder As String) As Outlook.Folder
    18. Dim mytmpKalenderFolder1 As Outlook.Folder
    19. On Error Resume Next
    20. Set GetdeletedFolder = Outlook.Session.GetDefaultFolder(olFolderDeletedItems)
    21. Set mytmpKalenderFolder1 = GetdeletedFolder
    22. Set GetdeletedFolder = GetdeletedFolder.Folders(strFolder)
    23. If mytmpKalenderFolder1.Name = GetdeletedFolder.Name Then
    24. Set GetdeletedFolder = Nothing
    25. End If
    26. End Function
    27. Private Function loeschenFolder(ByVal strFolder As String) As Boolean
    28. Dim geloeschtFolder As Outlook.Folder
    29. Set geloeschtFolder = GetdeletedFolder("test1")
    30. If Not geloeschtFolder Is Nothing Then
    31. geloeschtFolder.Delete
    32. loeschenFolder = True
    33. Else
    34. loeschenFolder = False
    35. End If
    36. End Function
    37. Sub CopyFolder()
    38. Dim myOlApp As New Outlook.Application
    39. Dim myNameSpace As Outlook.NameSpace
    40. Dim myKalenderFolder As Outlook.Folder
    41. Dim myoldKalenderFolder As Outlook.Folder
    42. Dim geloeschtFolder As Outlook.Folder
    43. Dim myPersKalenderFolder As Outlook.Folder
    44. Dim myNewFolder As Outlook.Folder
    45. Dim test As Boolean
    46. 'löschen des Kalenders aus "Kalender"
    47. Set myoldKalenderFolder = GetCoppyFolder("test1")
    48. If Not myoldKalenderFolder Is Nothing Then
    49. myoldKalenderFolder.Delete
    50. End If
    51. 'Kopieren des Kalenders
    52. Set myNameSpace = myOlApp.GetNamespace("MAPI")
    53. Set myKalenderFolder = Outlook.Session.GetDefaultFolder(olFolderCalendar)
    54. Set myPersKalenderFolder = GetFolder("test1")
    55. Set myNewFolder = myPersKalenderFolder.CopyTo(myKalenderFolder)
    56. test = loeschenFolder("test1")
    57. End Sub
    Outlook benötigt eine Weile, bis der Ordner tatsächlich gelöscht ist und im Papierkorb verfügbar ist.

    Du kannst entweder kurz warten bevor du den Folder aus dem Papierkorb löschst
    oder den Workflow ändern:

    Erst ggf. Papierkorb leeren (der Vorgang müsste schneller gehen und nicht auf Lock-Probleme mit dem Folgebefehl stossen).
    Dann Folder löschen.
    Dann neuen Folder anlegen.

    So bleibt der neue Folder so lange im Papierkorb, bis das nächste Mal ein Folder angelegt werden soll.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --