VBA code Outlook opslaan bestand

Status
Niet open voor verdere reacties.

Boerlo

Gebruiker
Lid geworden
14 jan 2021
Berichten
40
Ik heb in Outlook een aantal codes zoals deze om via een regel bepaalde mails na binnenkomst automatisch in een map onder te brengen en de bijlage op te slaan op schijf. Het is een reeks van dezelfde codes met alleen telkens een ander pad om op te slaan. De code wordt opgeroepen door een regel die automatisch wordt uitgevoerd bij een bepaalde afzender:

Code:
Public Sub BijlagenFacturenOpslaan(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = "D:\Gebruikers\User1\Documenten\2021\Boekhouding\Inkoopfacturen\"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub

Als de bestandsmap niet bestaat of wordt gewijzigd, werkt de code niet meer. Ik heb nu 2 vragen:
1. Kan ik bovenaan deze reeks codes één waarde vastzetten die in iedere code telkens wordt opgeroepen als pad, bijv. pad = "D:\Gebruikers\User1\Documenten\2021". Vervolgens kan ik dan per code de naam "pad & ...." gebruiken. Als het "hoofdpad" dan wijzigt, verandert dit automatisch overal mee.
2. Kan ik deze waarde ook automatisch laten wijzigen a.h.v. datum? Bijv. als het 2021 is, wordt pad "D:\.....\2021" gebruikt en als het 2022 is, wordt het pad "D:\....\2022" gebruikt.

Hartelijk dank.
 
Bedoel je zoiets?
Code:
Public Sub BijlagenFacturenOpslaan(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sFolder As String
    
    CreateObject("Shell.Application").NameSpace("C:").newFolder (CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\" & Year(Date) & "\Boekhouding\InkoopFacturen\")
    sFolder = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\" & Year(Date) & "\Boekhouding\InkoopFacturen\"
    For Each oAttachment In MItem.Attachments
        oAttachment.SaveAsFile sFolder & oAttachment.DisplayName
    Next
End Sub
 
Hartelijk dank.
Nee, deze code maakt zelf de mappen aan, maar die zijn er al. De code hoeft alleen maar een keuze te maken: ("If" ?): als het vandaag 2021 is, slaat hij het bestand op in ....mydocuments\2021\.... en als het 2022 is, slaat hij het bestand op in ...mydocuments\2022\.....

De andere vraag is nog belangrijker;
Ik heb ongeveer 12 van deze codes onder elkaar staan in VB Outlook. Iedere code slaat een ander type bestand op. De eerste bijvoorbeeld de facturen, de tweede een nieuwsbrief, de derde een rapportage, etc. Iedere code wordt ingeroepen door een regel die een email of afzender herkent: die regel stopt dan de mail in een bepaald outlook-mapje en slaat de bijlage op in een bestandsmap. Die bestandsmap hang af van het type mail (factuur, nieuwsbrief, rapportage, etc.) maar gaat altijd vooraf door het jaartal "mydocuments/2021" etc.
Ik zou graag voorafgaand aan deze 12 Public Subs één keer de hoofdmap vastzetten: bijv: HOOFDPAD = C:\Users\Mydocuments\Attachments.
Vervolgens gebruiken we bij iedere Public Sub dit hoofdpad, bijv: Attachment.SaveAsFile HOOFDPAD & Year (Date) & oAttachment.DisplayName

Zoiets:

Code:
'Voorafgaand aan alle subs:
HOOFDPAD = C:\Users\Mydocuments\Attachments

'Dan alle subs:

Public Sub BijlagenFacturenOpslaan(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = HOOFDPAD & Year (Date) &"\Inkoopfaturen"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub

Public Sub NieuwsbriefOpslaan(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = HOOFDPAD & Year (Date) &"\Nieuwsbrieven"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub


Public Sub RapportageOpslaan(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = HOOFDPAD & Year (Date) &"\Rapportages"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub

Hoe kan ik de waarde "HOOFDPAD" definiëren voorafgaand aan en geldend voor alle subs?
Verder is mijn code waarschijnlijk onnodig omslachtig en kunnen de deskundigen dat veel efficiënter...

Nogmaals dank.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan