Outlook Ordnerpfad von aktueller Mail ermitteln

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Volker Bunge.

    Outlook Ordnerpfad von aktueller Mail ermitteln

    Hallo zusammen,

    wie kann ich mit VB.Net 2019 von der gerade markierten e-Mail Adresse den internen kpl. Pfad ermitteln?

    Am Ende möchte ich also nicht den aktuellen Ordnernamen haben, sondern auch alle davor liegenden Ordner (also wie beim Explorer den kpl. Dateipfad).

    Im Internet habe ich leider nichts passendes gefunden.

    Diesen Tipp vboffice.net/de/developers/email-ordner-ermitteln bekomme ich leider nicht vollständig in VB.Net umgesetzt. Es scheitert an der Zeile 4 (Set obj = Application.ActiveWindow) Fehler: ActiveWindow wäre keine Member von Application

    Hier mal meine bisherige Umsetzung

    Spoiler anzeigen

    Quellcode

    1. Dim Outlook_Anwendung As Microsoft.Office.Interop.Outlook.Application
    2. Dim obj As Object
    3. Dim F As Microsoft.Office.Interop.Outlook.MAPIFolder
    4. Dim Msg$
    5. obj = Application.ActiveWindow
    6. If TypeOf obj Is Microsoft.Office.Interop.Outlook.Inspector Then
    7. obj = obj.CurrentItem
    8. Else
    9. obj = obj.Selection(1)
    10. End If
    11. F = obj.Parent
    12. Msg = "Ordner: " & F.FolderPath & vbCrLf
    13. Msg = Msg & "Zum Ordner wechseln?"
    14. If MsgBox(Msg, vbYesNo) = vbYes Then
    15. Outlook_Anwendung.CurrentFolder = F
    16. End If


    Könnt Ihr mir da einen Tipp geben?

    Gruß

    Volker

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Volker Bunge“ ()

    Du musst die Variable Outlook_Anwendung schon auch mit einer Outlook-Instanz befüllen.

    Ich mach das entweder mit Marshal.GetActiveObject (ähnlich GetObject aus VB6) oder mit Activator.CreateInstance (ähnlich CreateObject aus VB6), wenn ich eine bestehende Instanz zuweisen muss.

    VB.NET-Quellcode

    1. Public Sub GetItemsFolderPath()
    2. 'Dim Outlook_Anwendung As Outlook.Application = CType(Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application")), Outlook.Application)
    3. Dim Outlook_Anwendung As Outlook.Application = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application"), Outlook.Application)
    4. Dim obj As Object
    5. Dim F As Outlook.MAPIFolder
    6. Dim Msg As String
    7. obj = Outlook_Anwendung.ActiveWindow
    8. If TypeOf obj Is Outlook.Inspector Then
    9. obj = CType(obj, Outlook.Inspector).CurrentItem
    10. Else
    11. obj = CType(obj, Outlook.Explorer).Selection(1)
    12. End If
    13. F = CType(CType(obj, Outlook.MailItem).Parent, Outlook.MAPIFolder)
    14. Msg = "Ordner: " & F.FolderPath & Environment.NewLine
    15. Msg &= "Zum Ordner wechseln?"
    16. If MessageBox.Show(Msg, Me.Text, MessageBoxButtons.YesNo) = DialogResult.Yes Then
    17. Outlook_Anwendung.ActiveExplorer.CurrentFolder = F
    18. End If
    19. End Sub
    Hallo HenryV,

    habe es jetzt mal in folgende Funktion gepackt

    Spoiler anzeigen

    Quellcode

    1. Public Function Outlook_aktuellen_Ordner_ermitteln() As String
    2. ' *************************************************************************
    3. ' Hier wird der kpl. Pfad des aktuellen Outlook-Ordners zurück gegeben
    4. ' *************************************************************************
    5. ' Hier wird die Verbindung zu Outlook aufgebaut
    6. 'Dim Outlook_Anwendung As Outlook.Applcication = CType(Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application")), Outlook.Application)
    7. Dim Outlook_Anwendung As Microsoft.Office.Interop.Outlook.Application = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application"), Microsoft.Office.Interop.Outlook.Application)
    8. ' Es wird sich das aktive Fenster gemerkt
    9. Outlook_Objekt = Outlook_Anwendung.ActiveWindow
    10. ' Ist das aktuelle Fenster ein Fenster, in dem ein Outlook-Element angezeigt wird.
    11. If TypeOf Outlook_Objekt Is Microsoft.Office.Interop.Outlook.Inspector Then
    12. ' Wenn ja, dann den Verweis auf die aktuelle e-Mail setzen
    13. Outlook_Objekt = CType(Outlook_Objekt, Microsoft.Office.Interop.Outlook.Inspector).CurrentItem
    14. Else
    15. ' andernfalls auf die erste markierte e-Mail
    16. Outlook_Objekt = CType(Outlook_Objekt, Microsoft.Office.Interop.Outlook.Explorer).Selection(1)
    17. End If
    18. ' Jetzt den Outlook-Ordner von der aktuellen e-Mail ermitteln
    19. Outlook_Ordner = CType(CType(Outlook_Objekt, Microsoft.Office.Interop.Outlook.MailItem).Parent, Microsoft.Office.Interop.Outlook.MAPIFolder)
    20. ' und diesen zurück geben
    21. Return Outlook_Ordner.FolderPath
    22. End Function


    Es läuft jetzt auch im Büro.

    Vielen Dank

    Volker