Avatar billede martin_moth Mester
15. september 2004 - 07:56 Der er 14 kommentarer og
1 løsning

VBA Outlook: Gem e-mail som .msg-fil

Hej

Jeg kender ikke rigtig de objekter osv. der er i Outlook VBA.

Jeg skal have en macro, der gemmer den email inck. attachments der er markeret i min inbox som en .msg fil med navnet

afsender_modtager_subject_dato.msg
afsender_modtager_subject_dato_attachedfilnavn.xls
afsender_modtager_subject_dato_attachedfilnavn.doc

(hvis der altså er hæftet en doc og en xls på)

Filerne gemmes i c:\mail, og der tjekkes om der findes filer med samme navn (så der ikke overskrives)

Desuden skal "ulovlige tegn" som < : osv, der ikke må optræde i filnavne, frasorteres.

Jeg kan sikkert finde ud af det meste selv, men mangler lige sparket til at komme igang - hvordan får man "fat i " den markerede mail, hvordan gemmes den og de vedhæftede filer, og hvordan aflæser man afsender, modtager, subject osv...
Avatar billede martin_moth Mester
15. september 2004 - 08:06 #1
Glem det med attachments - de bliver gemt som en del af msg-filen. Det er altså bare *.msg-filen der skal gemmes
Avatar billede martin_moth Mester
15. september 2004 - 08:54 #2
Har fundet denne kode, der viser subject på alle ulæste mails i inbox

    Dim oApp As Application
    Dim oNS As NameSpace
    Dim oMsg As Object
    Dim oFolder As Object
   
    Set oApp = New Outlook.Application
    Set oNS = oApp.GetNamespace("MAPI")
   
    'Set folder to check the INBOX
    Set oFolder = oNS.GetDefaultFolder(olFolderInbox)
    For Each oMsg In oFolder.Items
        With oMsg
          If .UnRead Then
            MsgBox oMsg.Subject
          End If
        End With
    Next

Men jeg skal bare have fat i den markerede mail (når mailen er markeret, skal jeg starte macroen med Crtl+W eller lignende, og så gemmes den markerede mail)
Avatar billede martin_moth Mester
15. september 2004 - 16:33 #3
Nu har jeg besvaret over 500 spørgsmål - er der så ikke nogen der gider svare på et af mine?
:o)
Avatar billede Slettet bruger
15. september 2004 - 20:00 #4
Noget i denne stil du søger?

Dim myOA As Outlook.Application
Dim myOM As Outlook.MailItem
Set myOA = GetObject(, "Outlook.Application")
Set myOM = myOA.ActiveInspector.CurrentItem
FilNavn = DokSti & FilNavn & ".msg"
Do Until Not FilFindes(FilNavn) 'Sørg for at filen ikke findes i forvejen
  offset = offset + 1
  FilNavn = DokSti & AendreNavn(offset) & ".msg"
Loop
myOM.SaveAs FilNavn 'Gem filen
myOM.Close (olDiscard) 'Luk uden at gemme
Set myOM = Nothing
Set myOA = Nothing
Avatar billede Slettet bruger
15. september 2004 - 20:00 #5
Den gemmer den aktuelle email man har åbent, måske du kan komme videre ud fra det?
Avatar billede martin_moth Mester
16. september 2004 - 08:32 #6
Det var vist dette jeg ledte efter:

  Set myOM = myOA.ActiveInspector.CurrentItem

Men hvordan får jeg så fat i subject osv

Kan man skrive myOM.subject, myOM.From, myOM.to osv?

Du har nogle funktioner/variabler du selv har lavet, og som ikke er beskrevet:

FilFindes()
DokSti
offset
Aendrenavn()

Men det ser ud til at det kan være ligemeget med dem
Avatar billede venne Nybegynder
16. september 2004 - 09:23 #7
Som sædvanlig har Microsoft dokumenteret API'et i detaljer:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaol11/html/olobjMailItem.asp

Der er både Subject, Body, To og meget andet godt.
Avatar billede martin_moth Mester
16. september 2004 - 09:40 #8
Det virker bare ikke:

    Dim oApp As Application
    Dim oNS As NameSpace
    Dim oMsg As Object
    Dim oFolder As Object
    Dim oMail As MailItem
   
    Set oApp = New Outlook.Application
    Set oNS = oApp.GetNamespace("MAPI")
    Set oMail = oApp.ActiveInspector.CurrentItem
            MsgBox oMail.Subject & " - " & oMail.SenderName
    Set oApp = Nothing
    Set oNS = Nothing
    Set oMail = Nothing



I mis msgbox bliver der IKKE skrevet subject og sender ud for den markerede mail, men for en helt anden
Avatar billede venne Nybegynder
16. september 2004 - 10:57 #9
Næ, det har du ret i. Men så prøver vi bare et andet objekt:

    Dim oApp As Application
    Dim oMail As MailItem
   
    Set oApp = Outlook.Application
    For Each oMail In oApp.ActiveExplorer.Selection
        MsgBox oMail.Subject & " - " & oMail.SenderName
    Next
    Set oApp = Nothing
    Set oMail = Nothing


Det virker hos mig - alle de markerede emner vises.
Avatar billede martin_moth Mester
16. september 2004 - 11:28 #10
Sådan venne

Smid et svar
Avatar billede venne Nybegynder
16. september 2004 - 11:35 #11
(:
Avatar billede martin_moth Mester
16. september 2004 - 11:38 #12
Og hvis du lige lynhurtigt ville vise hvordan man meget met med FSO tjekker om "C:\fil.msg" eksisterer, og derefter gemmer filen?
Avatar billede venne Nybegynder
16. september 2004 - 12:00 #13
Så pyt...

Nu ved jeg ikke hvilken logik du ønsker, men her er et hurtigt eksempel:

Sub GemMail(oMail As MailItem)
    Dim fso As FileSystemObject
    Dim filnavn As String
   
    Set fso = New FileSystemObject
    filnavn = "c:\fil.msg"
   
    If fso.FileExists(filnavn) Then
        MsgBox "Filen findes allerede"
    Else
        oMail.SaveAs filnavn, olTXT
    End If
End Sub


Ved SaveAs kan du selv vælge hvilket format filen skal være i - det kan være tekst, RTF, HTML, Outlook-msg osv.
Avatar billede venne Nybegynder
16. september 2004 - 12:02 #14
Jeg glemte: du skal lige have en reference til "Microsoft Scripting Runtime".
Avatar billede martin_moth Mester
16. september 2004 - 12:04 #15
OK...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester