Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[VBA] For each

Pagina: 1
Acties:
  • 372 views

  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Hallo,

ik wil graag met een stukje VBcode een mailtje opslaan (in outlook, als .msg) met een vaste bestandsnaam in een vaste directory. Het bestandsnaam/directory verhaal is geen probeem, echter het handmatig opslaan wel.

Ik heb onderstaande code op google gevonden en wat aangepast naar mijn wensen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim OL As Application
Dim NmeSpace As NameSpace
Set OL = CreateObject("Outlook.Application")
Set NmeSpace = OL.GetNamespace("MAPI")
Set Inbx = NmeSpace.GetDefaultFolder(olFolderInbox)
Set Fldr = Application.ActiveExplorer.CurrentFolder
DirName = "H:\Emails\"
For Each itm In Fldr.Items
    SubTxt = itm.Subject
    SubTxt = CleanString(SubTxt) 'removes characters that cannot be part of filename
    FNme = DirName & Trim(SubTxt) & ".msg"
    If itm.Class = olMail Then
        itm.SaveAs FNme, olMSG
    End If
     
Next

End Sub


Echter wil ik niet dat de gehele inbox ineens opgeslagen wordt. Ik wil dus graag de emails handmatig kunnen selecteren. Volgens mij moet ik dan de loop eruit halen maar dit wil maar niet lukken.

Alvast bedankt.

[ Voor 33% gewijzigd door Adelbert op 15-07-2008 10:52 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Want wat lukt er niet aan dan?

Je zal de Fldr.Items op index moeten benaderen. (En ja, dat is een hint)

Is de getoonde code trouwens alle code? Zo ja, dan lijkt het mij dat er sowieso al dingen enorm fout moeten gaan.

Edit: als je dus even leest op het forum waar je de code vandaan hebt zie je dat daar ook al gezegd wordt dat essentiële zaken missen.

[ Voor 30% gewijzigd door TeeDee op 15-07-2008 11:16 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Dat is alle code ja voor het stukje waar mijn probleem in ligt. Het enige wat er fout liep is regel 10 en die heb ik verwijderd.

Verder loopt het als een zonnetje als je al mailtjes uit je inbox wil opslaan (mits de bestandnaam goed is). Daarom doe ik dit ook anders.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Nogmaals:

Je zal de Fldr.Items op index moeten benaderen.

Mijn VBA is roestig maar:
Visual Basic:
1
Set CurrentMailItem = Flder.Items(2)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • SierdW
  • Registratie: April 2004
  • Laatst online: 23-09 12:48
CleanString op regel 10 werkt niet omdat de functie niet bekend is. Als je niet alle berichten wilt opslaan zal je duidelijk moeten maken welk bericht je dan wel op wilt slaan. Je zal dus het huidige bericht moeten achterhalen. Op http://www.codeforexcelandoutlook.com/Outlook.html staat heel wat voorbeeldcode, beetje knip en plakwerk leverde mij het volgende op, hoop dat je er iets mee kan :):

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub SaveMail()
Dim CurrMail As Outlook.MailItem
Dim DirName, FNme
On Error Resume Next
Set CurrMail = ActiveInspector.CurrentItem

DirName = "H:\Emails\"

If CurrMail Is Nothing Then
' we might be in the explorer window
    If (ActiveExplorer.Selection.Count = 1) And _
    (ActiveExplorer.Selection.Item(1).Class = olMail) Then
        Set CurrMail = ActiveExplorer.Selection.Item(1)
    End If
End If

If CurrMail Is Nothing Then
' either a mail msg is not open, or more than one email selected in explorer
' window, or no email selected at all, cannot set ref
    MsgBox "I was not able to save the email. Please run this code ONLY " & _
    "under one of the following conditions:" & vbCr & vbCr & _
        "-- You are viewing a single email message." & vbCr & _
        "-- You are in your Inbox and have exactly one message selected.", _
    vbInformation
    Exit Sub

End If

FNme = DirName & Trim(CurrMail) & ".msg"

CurrMail.SaveAs FNme, olMSG

End Sub

[ Voor 8% gewijzigd door SierdW op 15-07-2008 12:59 ]


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Die website had ik ookal gevonden :) Jammer genoeg werken ze daar met objItem.Saveas net als op de MS website. Deze manier werkt het wel alleen krijg je dan de melding of je dit toe wilt staan of niet. Ik weet nu al hoe de gebruikers daarop zouden reageren dus dat is nog net niet de methode.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Adelbert schreef op dinsdag 15 juli 2008 @ 14:01:
Die website had ik ookal gevonden :)
Zeg dat dan... scheelt weer extra werk.
Jammer genoeg werken ze daar met objItem.Saveas net als op de MS website. Deze manier werkt het wel alleen krijg je dan de melding of je dit toe wilt staan of niet. Ik weet nu al hoe de gebruikers daarop zouden reageren dus dat is nog net niet de methode.
Krijg je die melding/vraag in Windows 2000, XP en/of Vista? Ik vermoed dat dat een onoverkomelijk probleem zal zijn.

Gaat het hier om een simpele macro in Outlook zodat een gebruiker simpel een mailtje kan opslaan: volgens mij is het goedkeuren van zoiets een eenmalige actie.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Nee dit moet je iedere keer goedkeuren.Het enige wat je op kan geven is de tijd dat je dit goedkeurd 1 tot 15min ofzo.

Ik ben geen VB held, maar volgens mij moet dit ook te omzeilen zijn. Je krijgt deze melding namelijk niet als je zonder een object werkt (zoals in mijn voorbeeldje).

  • SierdW
  • Registratie: April 2004
  • Laatst online: 23-09 12:48
Adelbert schreef op dinsdag 15 juli 2008 @ 14:01:
Deze manier werkt het wel alleen krijg je dan de melding of je dit toe wilt staan of niet.
Welke melding heb je het over? Bij mij werkt dit zonder eventuele meldingen, als het beveiligingsniveau voor het uitvoeren van macro's in outlook maar niet te hoog staat. Of voer jij dit macro misschien uit vanuit een andere applicatie? :?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Laat nu eens je huidige code zien?

Nogmaals, ik ben van mening dat je door Fldr.Items(1) of iets dergelijks te gebruiken je zonder loop een email kan opslaan. Maar daar ga je inhoudelijk niet op in...

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-11 15:37

Janoz

Moderator Devschuur®

!litemod

Dat is een security instelling. Dat security instellingen te omzeilen zouden zijn ondermijnt natuurlijk het complete nut van security.

Verder hoort VBA niet thuit in programming, maar in OFF, maar gezien het 'bij het handje neem' niveau van dit topic is het daar ook niet wenselijk.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.