Hallo,
ich möchte von Access aus in Outlook eine bestimmte Email im Ordner Gesendete Elemente selektieren, um die EntryID auszulesen.
Als Einstieg benutze ich einen Beispiel-Code von Microsoft, den ich im Bereich "Filter" und "zu durchsuchender Ordner" angepasst habe. Den Code will ich später ausbauen, um die Entry-ID zu selektieren und in ein Feld zu schreiben.
Wenn ich kompiliere erhalte ich an der Stelle ".Session" die Fehlermeldung "Methode oder Datenobjekt nicht gefunden". Was fehlt noch im Code? Oder fehlt ein Verweis?
Eigentlich bräuchte ich auch keine Tabelle, weil der Filter eindeutig ist und nur 1ne Email zurückgeben wird. Ich finde aber keinen anderen Einstieg...
Vielen Dank für die Hilfe
Harry
Private Sub cmdEmailSuchen_Click()
Dim oT As Outlook.Table
Dim strFilter As String
Dim oRow As Outlook.Row
Dim vBetreff As String
vBetreff = Me.Subject
'Construct filter for Subject containing 'Office'
Const PropTag As String = "https://schemas.microsoft.com/mapi/proptag/"
strFilter = "@SQL=" & Chr(34) & PropTag & "0x0037001E" & Chr(34) & vBetreff
'Do search and obtain Table on Inbox
Set oT = Application.Session.GetDefaultFolder(olFolderSentMail).GetTable(strFilter) 'Fehlermeldung bei Session
'Print Subject of each returned item
Do Until oT.EndOfTable
Set oRow = oT.GetNextRow
Debug.Print oRow("Subject")
Loop
End Sub
Zitat von: Umbauwfb am Februar 23, 2022, 11:27:51Wenn ich kompiliere erhalte ich an der Stelle ".Session" die Fehlermeldung "Methode oder Datenobjekt nicht gefunden". Was fehlt noch im Code? Oder fehlt ein Verweis?
Du brauchst eine konkrete
Outlook.Application Instanz. - In anderer Funktionalität, die du schon hast solltest du funktionierende Beispiele finden.
Wenn du in Access einfach nur "Application" schreibst, bekommst du deine Access.Application.
Hallo PhilS,
ich habe den Code jetzt ergänzt...und den Filter im Ursprungszustand des Microsoft-Beispiels belassen.
Dort dann einen Betrefftext eingesetzt, von dem es eine Email im Ordner "Gesendete Objekte" gibt.
Der Filter wird auch angezeigt, wenn ich mit F8 Zeile für Zeile durch den Code gehe...
Das Direktfenster zeigt:
?strFilter
@SQL="https://schemas.microsoft.com/mapi/proptag/0x0037001E" ci_phrasematch 'Bewerbung um einen Ausbildungsplatz als Bäckerin (4/988/373)'
Debug.Print bringt aber nichts...
Woran kann das noch liegen?
Harry
Private Sub cmdEmailSuchen_Click()
Dim oT As Outlook.Table
Dim strFilter As String
Dim oRow As Outlook.Row
Dim vBetreff As String
vBetreff = Me.Subject
'Construct filter for Subject containing 'Office'
Const PropTag As String = "https://schemas.microsoft.com/mapi/proptag/"
' strFilter = "@SQL=" & Chr(34) & PropTag & "0x0037001E" & Chr(34) & vBetreff
strFilter = "@SQL=" & Chr(34) & PropTag _
& "0x0037001E" & Chr(34) & " ci_phrasematch 'Bewerbung um einen Ausbildungsplatz als Bäckerin (4/988/373)'"
'Do search and obtain Table on Inbox
Set oT = Outlook.Application.Session.GetDefaultFolder(olFolderSentMail).GetTable(strFilter)
'Print Subject of each returned item
Do Until oT.EndOfTable
Set oRow = oT.GetNextRow
Debug.Print oRow("Subject")
Loop
End Sub
Zitat von: Umbauwfb am Februar 24, 2022, 09:21:32?strFilter
@SQL="https://schemas.microsoft.com/mapi/proptag/0x0037001E" (https://schemas.microsoft.com/mapi/proptag/0x0037001E"); ci_phrasematch 'Bewerbung um einen Ausbildungsplatz als Bäckerin (4/988/373)'
Debug.Print bringt aber nichts...
Woran kann das noch liegen?
Das liegt an dem Filter.
Ich kann dir weder das konkrete Problem noch eine Lösung nennen, aber wenn ich das nachvollziehe, werden bei mir auch Items nicht gefunden, die m.E. eigentlich dem Filter entsprechen müssten.
Außer nochmal die Doku genau lesen, Googlen, und herumprobieren kann ich im Moment keinen Lösungsansatz empfehlen.
Hallo,
versuch dies:
Private Sub cmdEmailSuchen_Click()
Dim oOL As New Outlook.Application 'Verweis auf MS Outlook- Library setzen
Dim oT As Outlook.Table
Dim strFilter As String
Dim oRow As Outlook.Row
strFilter = "[Subject] = '" & Me!Betreff & "'"
Set oT = oOL.Session.GetDefaultFolder(olFolderSentMail).GetTable(strFilter)
Do Until oT.EndOfTable
Set oRow = oT.GetNextRow
Debug.Print oRow.Item("Subject"), oRow.Item("entryID")
Loop
Set oRow = Nothing
Set oT = Nothing
Set oOL = Nothing
End Sub
Super! Klappt einwandfrei!
Mir ist natürlich auch sofort aufgefallen, dass Du mir an der Stelle strFilter = ... einen kleinen Fitnesstest eingebaut hast!
Herzlichen Dank für den Code!
Diesen Code verstehe ich jetzt auch vollumfänglich...
Und Danke an die anderen, die geholfen haben
Mit einem schönen Gruß aus Lüneburg
Harry
Private Sub cmdEmailSuchen_Click()
Dim oOL As New Outlook.Application 'Verweis auf MS Outlook- Library setzen
Dim oT As Outlook.Table
Dim strFilter As String
Dim oRow As Outlook.Row
strFilter = "[Subject] = '" & Me!Subject & "'"
Set oT = oOL.Session.GetDefaultFolder(olFolderSentMail).GetTable(strFilter)
Do Until oT.EndOfTable
Set oRow = oT.GetNextRow
' Debug.Print oRow.Item("Subject"), oRow.Item("entryID")
Me.EntryID = oRow.Item("entryID")
Me.Requery
Loop
Set oRow = Nothing
Set oT = Nothing
Set oOL = Nothing
End Sub