VB 6.3 Outlook - emails opslaan in directory met deels onbekende naam

Status
Niet open voor verdere reacties.

brma001

Gebruiker
Lid geworden
8 mei 2013
Berichten
5
Goedemiddag,

Ik heb in Outlook 2007 een macro gemaakt. Deze slaat in hoofdlijnen emails (als .msg) en bijlagen op in een door de gebruiker te bepalen directory. De eerste 8 cijfers van deze directory zijn bekend.
Dat zijn het jaar en een viercijferig bekend unique nummer. Daarna komt een onbekende factor (het adres). Bijv. T:\2013\20130015 Dorpsstraat 15\
Ter info: In deze map T:\2013\ staan zo'n 1000 van deze deze subdirectory's.

Graag wil ik dat de gebruiker in een textbox de laatste vier cijfers invult (bijv. 0015) en dat de emails en bijlagen dan in bovenstaande map komen T:\2013\20130015 Dorpsstraat 15\..
Hoe krijg ik dat voor elkaar? Een wildmark * werkt niet, ook niet *.* en ook niet als deze tussen aanhalingstekens wordt gezet?
Nog even een toevoeging: Ik weet helaas niet veel van visual basic. :rolleyes:

Omdat de macro zeer lang is kopieer ik even alleen de belangrijke regels.

Code:
 Dim myItems, myItem, myAttachments, myAttachment As Object
    Dim myOlApp As New Outlook.Application
    Dim myOlExp As Outlook.Explorer
    Dim myOlSel As Outlook.Selection
    Dim Mail As Outlook.MailItem
    Dim Onderwerp As String
    Dim Opslag As String
    Dim myEmailnaam As String
    Dim mybestandsnaam As String
    Dim mybestandszonderextensie As String
       
    'work on selected items
    Set myOlExp = myOlApp.ActiveExplorer
    Set myOlSel = myOlExp.Selection


Opslag = "T:\jaar " & Format(Date, "yyyy") & "\" & Format(Date, "yyyy")  & UserForm4.TextBox2.Text  & “*”   ' Set the path.

'Vraag naar emailnaam
  myEmailnaam = InputBox("Welke naam wil je de E-MAIL meegeven?", "Email van " & Mail.SenderName & " " & "d.d: " & Format(Mail.ReceivedTime, "dd mmmm yyyy"), Onderwerp)
 
'Bewaart de emails met de middels de inputnaam gegeven naam en de datum van de email
  Mail.SaveAs (Opslag) & Format(Mail.ReceivedTime, "yyyy-mm-dd ") & myEmailnaam & ".msg", olMSG




Wie kan mij helpen.
Alvast hartstikke bedankt.
 
Laatst bewerkt door een moderator:
Nog even een toevoeging: Ik weet helaas niet veel van visual basic.
Dan zou ik ofwel zorgen dat ik daar wèl wat vanaf weet, ofwel de klus uitbesteden aan iemand die kan programmeren; dit is het beste recept voor een ramp dat je op het internet kunt vinden. Of koop je ook zelf 4 wielen, een stuur etc. en bouw je je eigen auto?
Zelfs zonder programmeerkennis zou je kunnen weten dat je geen beschermde karakters zoals '*' in een mapnaam kunt gebruiken; probeer maar eens een mapje aan te maken met een / of een * er in. Gaat niet lukken. Dus hoe moet jouw code weten welk adres hij moet gebruiken?
 
Dank voor je antwoord. Ben ik mij van bewust. Maar soms moet je helaas roeien met de riemen die je hebt.

Overigens heb ik * wel eens gebruikt in de volgende opdracht. Dat werkt wel. Maar ChangeFileOpenDirectory kan ik hier niet gebruiken.

ChangeFileOpenDirectory _
Dir(Mijnbouwno & "*", vbDirectory)
 
Jouw voorbeeldje is iets anders als een mapje maken. Zoeken en filteren kun je uiteraard perfect met wildcards doen. Maar dat is hier de vraag ook niet. Overigens geef je geen antwoord op mijn vraag: hoe bepaal je de mapnaam?
 
Wellicht heb ik me niet handig uitgedrukt. Alle mappen bestaan al. Deze zijn handmatig aangemaakt.

Ze beginnen allemaal met het jaartal (2013) en dan vier cijfer (vanaf 0001 t/m 9999). Daarna staat een adres.

Bijvoorbeeld T:\2013\20130015 J. Smitstraat 15\
T:\2013\20130016 Joke Smitstraat 1\

Het volledige cijfer is bekend bij de invuller van de Userform. Het adres echter niet of niet betrouwbaar om op te zoeken (adressen kunnen vaak op verschillende wijzen geschreven worden).

Dus ik wil in mijn macro kunnen zoeken op het nummer.

Hoop dat ik nu duidelijker ben. Excuus.
 
Ik snap ondertussen wat je bedoelt; zoeken met een wildcard kan nog wel op bestandsniveau, maar op mapniveau kun je beter een check doen op de eerste cijfers van de mapnaam.
Code:
Sub MapLezen()
Dim BronPad As String, ZoekPad As String, TotaalPad As String

    BronPad = "T:\" & Year(Date) & "\"    ' Set the path.
    TotaalPad = InputBox("Typ de 4-cijferige code achter het jaar", "Mapnaam")
    TotaalPad = Year(Date) & TotaalPad
    
    ZoekPad = Dir(BronPad, vbDirectory)    ' Retrieve the first entry.
    Do While ZoekPad <> ""    ' Start the loop.
        If ZoekPad <> "." And ZoekPad <> ".." Then
            If (GetAttr(BronPad & ZoekPad) And vbDirectory) = vbDirectory Then
                If Left(ZoekPad, 8) = TotaalPad Then
                    Opslag = BronPad & ZoekPad
                    Exit Sub
                End If
            End If    ' it represents a directory.
        End If
        ZoekPad = Dir    ' Get next entry.
    Loop

End Sub
 
Ik heb het gisteravond geprobeerd. Het werkt.
Geweldig. Uiteindelijk is het gelukkig toch niet zo'n ramp geworden;).

Hartstikke bedankt voor je hulp.
 
Mij lijkt dit voldoende

Code:
Sub M_snb()
    msgbox = Dir("T:\" & year(date) & "\xxxx_*.", 16)
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan