Benutzer mit den meisten Antworten
Access und Outlook (Inbox auslesen und Mail als msg speichern)

Frage
-
hallo zusammen
Ich kann ohne Probleme Mails aus Access heraus über Outlook versenden. Auch Termine in den Kalender eintragen funktioniert einwandfrei.
Nun möchte ich eine im Posteingang eine markierte Mail (oder bei Bedarf auch alle) "auslesen" und als msg-File speichern mit einem Dateinamen, welcher aus Access heraus generiert wird.
Habe den folgeden Code gefunden, der bei mir in Access aber nicht funktioniert:
Compile Error: Methode or Data not Found in der Zeile:
Set Application.ActiveExplorer.CurrentFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
Es scheint, als könnte er mit ActiveExplorer nichts anfangen; obwohl der Verweis auf Outlook gesetzt ist.
Public Sub ListSaveAs() ' Definition der Variablen Dim myOLApp Dim myInspector As Inspector Dim myItem As MailItem Dim myNameSpace As NameSpace Dim myfolder As MAPIFolder Dim myOlSel As Outlook.Selection Dim myOlExp As Outlook.Explorer Dim x As Integer ' Mail-Eingangsordner festlegen Set myNameSpace = Outlook.GetNamespace("MAPI") Set myfolder = myNameSpace.GetDefaultFolder(olFolderInbox) ' Markierter Eintrag On Error Resume Next ' Ansicht auf Eingangsordner Set Application.ActiveExplorer.CurrentFolder = _ myNameSpace.GetDefaultFolder(olFolderInbox) Set myOlExp = Outlook.ActiveExplorer ' Markierte Mails zuweisen Set myOlSel = myOlExp.Selection ' Alle markierten Mails durchlaufen For x = 1 To myOlSel.Count Set myItem = myOlSel.Item(x) If myItem Is Nothing Then MsgBox "Nichts markiert" Exit For End If On Error GoTo 0 ' Exportieren fkt_Export myItem Next x ' Aufräumen Set myItem = Nothing Set myOlExp = Nothing Set myOlSel = Nothing Set myfolder = Nothing Set myNameSpace = Nothing End Sub
Hat jemand vielleicht schon so was gemacht und kann helfen.
Vielen Dank.
Gruss René
- Bearbeitet René Stutz Mittwoch, 17. Oktober 2012 15:12
Antworten
-
Hallo René
Jetzt werden wir off-topic. Ich denke, Deine weitere Frage wäre in einem Outlook Forum besser aufgehoben und dort vermutlich sogar bereits beantwortet. Wenn Du es selber "erforschen" willst, dürfte das Explorer Objekt allenfalls weiterhelfen.
Noch eine kleine Bitte: Wenn Du jeweils weitere Fragen hast, starte bitte einen neuen Thread. Das hilft späteren Besuchern, die Antworten auf deren Fragen ebenfalls zu finden.
Gruss
Henry"René Stutz" schrieb im Newsbeitrag news:ea60405e-1d9c-4ab3-b5b8-f542e1550fbd@communitybridge.codeplex.com...
Frage: kann ich auch abfragen, welche Mail gerade selektiert ist ? Wie
mache ich das ? Auf der Basis von deinem Code?- Als Antwort markiert René Stutz Dienstag, 6. November 2012 08:28
-
Hallo Henry
Ich denke ich bin fast am Ziel, nur das mit dem Speichern geht noch nicht.
Ich kann die Details der einzelnen Mails auslesen; wie z.B. SenderEMail usw. aber der Save Befehl
läuft ins leere. Was mache ich noch falsch ?
Public Function saveOlInboxToTemp()
Dim appOL As Outlook.Application
Dim mit As Outlook.MailItem
Dim nsp As Outlook.NameSpace
Dim fld As Outlook.MAPIFolder
Dim J As Long
Set appOL = New Outlook.Application
Set nsp = appOL.GetNamespace("MAPI")
Set fld = nsp.GetDefaultFolder(olFolderInbox)
For J = 1 To fld.Items.Count
On Error Resume Next
Set mit = fld.Items(J)
If Err = 0 Then
'Debug.Print mit.Subject
MsgBox mit.SenderEmailAddress
mit.SaveAs Environ("c:\Temp") & "\msg(" & J & ").msg", olMSG
Else
Debug.Print "Item(" & J & ") Is not a Mailitem"
End If
Next
Set mit = Nothing
Set fld = Nothing
Set appOL = Nothing
End FunctionGruss
René
- Als Antwort markiert René Stutz Montag, 5. November 2012 15:06
Alle Antworten
-
Hallo,
René Stutz wrote:
.....habe bis zum heutigen Tag noch keine Lösung bekommen, resp. einen
Hinweis, der mich dieser näher bringen würde.Liegt wohl daran, dass man dazu das Outlook-Objektmodell gut kennen muss,
was in einem Outlook-Forum eher der Fall sein duerfte.Wenn du dort nicht weiter kommst, melde dich nochmal.
Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com -
Hallo Peter
Bin nun nochmals in die Tiefe des Netzes gestiegen....
Es ist überall Code vorhanden, wie man das machen kann was ich mir vorstelle, nämlich aus Access
heraus den Posteingang durchsehen und unter bestimmten Bedingungen das Mail als msg speichern.
Bei mir ergibt sich nur das Problem, dass dieser Code wie oben beschrieben nicht läuft. Im Wesentlichen
scheitert das Ganze jeweils beim Outlook.ActiveExplorer; dies scheint er bei mir nicht zu kennen/finden.
Braucht es neben der Outlook.dll noch weitere Referenzen die ich einbinden müsste ?
Wie schon erwähnt; ich kann Mails aus Access heraus versenden, Termine eintragen in Outlook usw., also ganz
alles kann nicht fehlen bei mir, aber eben, etwas eben doch.
Besten Dank und Gruss
René
-
Hallo,
René Stutz wrote:
Es ist überall Code vorhanden, [...] Bei mir ergibt sich nur das Problem,
dass dieser Code wie oben beschrieben nicht läuft. Im Wesentlichen
scheitert das Ganze jeweils beim Outlook.ActiveExplorer; dies scheint er
bei mir nicht zu kennen/finden.Zeig mal den Code.
Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com -
Am 29.10.2012 schrieb René Stutz:
....siehe oben, alles schon drin....
Wo ist der Code?
Servus
Winfried
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
GPO's: http://www.gruppenrichtlinien.de
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/ -
Hallo René"René Stutz" schrieb im Newsbeitragnews:fc53d740-0667-47fc-8a51-110e5d2bd900@communitybridge.codeplex.com...> Es ist überall Code vorhanden, wie man das machen kann was ich mir> vorstelle, nämlich aus Access> heraus den Posteingang durchsehen und unter bestimmten Bedingungen das> Mail als msg speichern.> Bei mir ergibt sich nur das Problem, dass dieser Code wie oben beschrieben> nicht läuft. Im Wesentlichen> scheitert das Ganze jeweils beim Outlook.ActiveExplorer; dies scheint er> bei mir nicht zu kennen/finden.Du musst die Makro Security sowohl von Access als auch von der OLEkontrollierten Anwendung (Outlook) auf Low setzen, sonst kann VBA nicht sorichtig. Ist mir bei anderen Anwendungen (Excel, Word, PowerPoint) ebenfallsaufgefallen. Mal geht es problemlos, dann geht es wieder nicht und einzelneObjekte werden nicht gefunden. Abhilfe war bisher immer, die Makro Securitybei diesen anderen Anwendungen zu deaktivieren. Evt. gibt es auch nochweniger invasive Eingriffe, aber ein Versuch wär's mal wert, oder?GrussHenry
-
Hallo Winfried,
Winfried Sonntag [MVP] wrote:
Am 29.10.2012 schrieb René Stutz:
....siehe oben, alles schon drin....
Wo ist der Code?
Der wurde im OP nachtraeglich eingefuegt. Da wir beide ueber die Bridge
lesen und diese bestehende Nachrichten nicht aktualisiert, kriegen wir das
nicht mit ;-), ergo:http://social.msdn.microsoft.com/Forums/de-DE/accessde/thread/1c09fcc4-82c3-4961-9477-6a633df8faa3
Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com -
Hallo,
René Stutz wrote:
....siehe oben, alles schon drin....
Probier mal, die Zeilen mit dem ActiveExplorer wegzulassen und den Default Folder direkt zuzuweisen:
'Set Application.ActiveExplorer.CurrentFolder = _ myNameSpace.GetDefaultFolder(olFolderInbox) Set myOlExp = myNameSpace.GetDefaultFolder(olFolderInbox)
Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com -
Am 30.10.2012 schrieb Peter Doering [MVP]:
Hallo Peter,Winfried Sonntag [MVP] wrote:
Am 29.10.2012 schrieb René Stutz:
....siehe oben, alles schon drin....
Wo ist der Code?
Der wurde im OP nachtraeglich eingefuegt. Da wir beide ueber die Bridge
lesen und diese bestehende Nachrichten nicht aktualisiert, kriegen wir das
nicht mit ;-), ergo:Aha, Danke für den Hinweis. Es gibt/gab eine zweite Bridge, die
aktualisiert sogar die Postings im NUA wenn sie im Forum editiert
wurden. Ich finde jetzt auf die Schnelle aber nicht den Download,
poste ich später.Servus
Winfried
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
GPO's: http://www.gruppenrichtlinien.de
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/ -
Am 30.10.2012 schrieb Peter Doering [MVP]:
Der wurde im OP nachtraeglich eingefuegt. Da wir beide ueber die Bridge
lesen und diese bestehende Nachrichten nicht aktualisiert, kriegen wir das
nicht mit ;-), ergo:http://communitybridge.kalmbach.eu/LocalDB.html ist das kleine Projekt
von Jochen Kalmbach. Bei Gelegenheit werde ich das bestimmt mal
testen. ;)Servus
Winfried
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
GPO's: http://www.gruppenrichtlinien.de
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/ -
Sali Peter
Komme leider damit nicht weiter....
Es scheint, dass er schon bei den Dim Befehlen nicht findet was er möchte....
Welche Verweise muss ich da noch einbinden? Habe Outlook eingebunden.
Public Sub ListSaveAs()
' Definition der Variablen
Dim myOLApp
Dim myInspector As Inspector
Dim myItem As MailItem
Dim myNameSpace As NameSpace
Dim myfolder As MAPIFolder
Dim myOlSel As Outlook.Selection
Dim myOlExp As Outlook.Explorer
Dim x As Integer
' Mail-Eingangsordner festlegen
Set myNameSpace = Outlook.GetNamespace("MAPI")
Set myfolder = myNameSpace.GetDefaultFolder(olFolderInbox)
' Markierter Eintrag
On Error Resume NextGibt es wirklich nirgends ein kleines Projekt, dass aus Access heraus die Inbox anschaut und bei Bedarf
ein Mail als msg speichert???
Vielen Dank für alle Hinweise die Licht ins Dunkel bringen...
Gruss
René
-
Ich weiss nicht genau was Ihr da macht. Zuerst mal: Hast Du eine Referenz auf die Outlook Typelibrary gesetzt, sonst wird das nichts (ausser wenn Du Late Binding vorziehst, aber das ist dann der nächste Schritt). Dann müsste da die myOLApp als Outlook.Application definiert und instanziiert werden.
Hier ein Beispiel (Outlook Referenz vorausgesetzt), das alle Mail Items, die in der Inbox drin sind, als msg speichert (ausnahmsweise mal getestet)
Public Function saveOlInboxToTemp() Dim appOL As outlook.Application Dim mit As outlook.MailItem Dim nsp As outlook.NameSpace Dim fld As outlook.MAPIFolder Dim J As Long Set appOL = New outlook.Application Set nsp = appOL.GetNamespace("MAPI") Set fld = nsp.GetDefaultFolder(olFolderInbox) For J = 1 To fld.Items.Count On Error Resume Next Set mit = fld.Items(J) If Err = 0 Then Debug.Print mit.Subject mit.SaveAs Environ("TEMP") & "\msg(" & J & ").msg", olMSG Else Debug.Print "Item(" & J & ") Is not a Mailitem" End If Next Set mit = Nothing Set fld = Nothing Set appOL = Nothing End Function
Und damit solltest Du eigentlich, sobald das mit instanziiert wurde, auch auf dessen Inhalt zugreifen können, um Deine speziellen Filter Kriterien anwenden zu können.
HTH
Henry
-
Hallo Henry
Ich denke ich bin fast am Ziel, nur das mit dem Speichern geht noch nicht.
Ich kann die Details der einzelnen Mails auslesen; wie z.B. SenderEMail usw. aber der Save Befehl
läuft ins leere. Was mache ich noch falsch ?
Public Function saveOlInboxToTemp()
Dim appOL As Outlook.Application
Dim mit As Outlook.MailItem
Dim nsp As Outlook.NameSpace
Dim fld As Outlook.MAPIFolder
Dim J As Long
Set appOL = New Outlook.Application
Set nsp = appOL.GetNamespace("MAPI")
Set fld = nsp.GetDefaultFolder(olFolderInbox)
For J = 1 To fld.Items.Count
On Error Resume Next
Set mit = fld.Items(J)
If Err = 0 Then
'Debug.Print mit.Subject
MsgBox mit.SenderEmailAddress
mit.SaveAs Environ("c:\Temp") & "\msg(" & J & ").msg", olMSG
Else
Debug.Print "Item(" & J & ") Is not a Mailitem"
End If
Next
Set mit = Nothing
Set fld = Nothing
Set appOL = Nothing
End FunctionGruss
René
- Als Antwort markiert René Stutz Montag, 5. November 2012 15:06
-
Hallo Henry
Jetzt habe ich es geschafft; er hatte wohl einwenig Probleme mit dem Dateinamen.
Herzlichen Dank für deinen Hinweis, hat mich echt weiter gebracht !
Frage: kann ich auch abfragen, welche Mail gerade selektiert ist ? Wie mache ich das ? Auf der Basis von deinem Code?
Danke und Gruss
René
-
...sorry, anbei natürlich noch der Code so wie es funktioniert hat:
Public Function saveOlInboxToTemp()
Dim appOL As Outlook.Application
Dim mit As Outlook.MailItem
Dim nsp As Outlook.NameSpace
Dim fld As Outlook.MAPIFolder
Dim J As Long
Set appOL = New Outlook.Application
Set nsp = appOL.GetNamespace("MAPI")
Set fld = nsp.GetDefaultFolder(olFolderInbox)
For J = 1 To fld.Items.Count
On Error Resume Next
Set mit = fld.Items(J)
If Err = 0 Then
mit.SaveAs "c:\Temp\" & J & ".msg", olMSG
Else
MsgBox "Item(" & J & ") Is not a Mailitem"
End If
Next
Set mit = Nothing
Set fld = Nothing
Set appOL = Nothing
End Function -
Hallo René
Jetzt werden wir off-topic. Ich denke, Deine weitere Frage wäre in einem Outlook Forum besser aufgehoben und dort vermutlich sogar bereits beantwortet. Wenn Du es selber "erforschen" willst, dürfte das Explorer Objekt allenfalls weiterhelfen.
Noch eine kleine Bitte: Wenn Du jeweils weitere Fragen hast, starte bitte einen neuen Thread. Das hilft späteren Besuchern, die Antworten auf deren Fragen ebenfalls zu finden.
Gruss
Henry"René Stutz" schrieb im Newsbeitrag news:ea60405e-1d9c-4ab3-b5b8-f542e1550fbd@communitybridge.codeplex.com...
Frage: kann ich auch abfragen, welche Mail gerade selektiert ist ? Wie
mache ich das ? Auf der Basis von deinem Code?- Als Antwort markiert René Stutz Dienstag, 6. November 2012 08:28
-