• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Bestandsmap zoeken

Status
Niet open voor verdere reacties.

daghengst

Gebruiker
Lid geworden
16 apr 2015
Berichten
32
Goede morgen,

Ik heb een bestand waarbij op basis van een ordernummer, klantnaam en vestiging een bestandsmap wordt aangemaakt - met streepjes ertussen. Vrij specifiek dus echter zijn er collega's die wel eens anders opslaan als omschreven. Via VBA wordt dan de map gezocht en een nieuw bestand in die map geplaatst óf mocht er nog geen map zijn aangemaakt een nieuwe map aanmaakt. Omdat echter niet iedereen op dezelfde wijze een map aanmaakt heeft één project vaak meerdere mappen. Is het mogelijk om VBA alleen het - unieke - ordernummer te laten zoeken in de mappenstructuur en dan het bestand in die map te plaatsen, ongeacht de naamopbouw?

Ik heb nu onderstaande code:

Dim Path As String
Dim Folder As String
Dim answer As VbMsgBoxResult
Path = ActiveSheet.Range("BA6")
Folder = Dir(Path, vbDirectory)

If Folder = vbNullString Then
answer = MsgBox("Bestandsmap bestaat niet. Wil je graag een map maken?", vbYesNo, "Maak bestandsmap?")
Select Case answer
Case vbYes
VBA.FileSystem.MkDir (Path)
Case Else
Exit Sub
End Select
Else
MsgBox "Bestandsmap bestaat, bestand wordt erin opgeslagen"

End If



Cel BA6 = C:\users\gebruiker\Documenten\Meerssen\Aanbiedingen Meerssen\M 2022\22009999-daghengst-Meerssen

Bij voorbaat dank!
 
Wat precies je bedoeling is weet ik niet, maar dat ordernummer kan je zo uit dir string halen:
Code:
Ordernummer = Split(Split(Range("BA6").Value, "-")(0), "\")(UBound(Split(Range("BA6").Value, "\")))
 
Hallo Edmoor, de bestandsmap is nu als volgt: "22009999-daghengst-Meerssen" maar er zijn ook collega's die de mapnaam zouden omschrijven als "22009999-daghengst" of als "22009999 daghengst Meerssen" (zonder streepjes). In deze gevallen zou VBA dan een nieuwe map aanmaken terwijl het bestand gewoon in diezelfde map weggeschreven zou moeten worden. Mijn vraag is dan wat de code moet worden als het bestand wordt weggeschreven in elke willekeurige map(omschrijving) maar met die specifieke opdrachtnummer.
 
Zet eerst de VBA code tussen code Tags !!
 
Even een testje gedaan met twee waarden in B6 en B7. Dit werkt:
Code:
For i = 6 To 7
    Ordernummer = Split(Cells(i, 2).Value, "\")(UBound(Split(Cells(i, 2).Value, "\")))
    If InStr(1, Ordernummer, "-") > 0 Then
        Ordernummer = Split(Ordernummer, "-")(0)
    Else
        Ordernummer = Split(Ordernummer, " ")(0)
    End If
Next i
 
Mijn excuses voor de late reactie maar dit is niet wat ik bedoel. Van ieder werk wordt een bestandsmap aangemaakt in onedrive aan de hand van het ordernummer, klantnaam en vestiging dus: "22009999-daghengst-Meerssen" maar de code in VBA is zo opgemaakt map "22009999 daghengst" als een ander werk wordt herkend. De mapnaam wordt via 3 verschillende celinvoeren samengesteld. Mijn bedoeling is om met een code de map met het ordernummer te zoeken en dan, het bestand in die map in opslaan, ongeacht hoe de mapnaam is opgebouwd. En mocht het ordernummer nog niet gebruikt zijn om dan pas een compleet nieuwe bestandsmap aan te maken en het bestand in op te slaan. Ik hoop dat het zo een beetje duidelijker is.
 
Kan niemand zeggen hoe ik op een deel van een bestandsmapnaam kan laten zoeken en eventueel hierin iets opslaan of een nieuwe map aanmaken?
 
Goede morgen, ik zal de vraag even opnieuw stellen en beter verwoorden

Op het werk worden de opdrachten opgeslagen in bestandsmappen op basis van een ordernummer, klantnaam en – eventueel – vestiging. Ik heb een bestand gemaakt die via VBA de betreffende map zoekt en het bestand erin plaatst. Echter alleen als de mapnaam exact overeenkomt volgens de opbouw als onder geplaatst.

C:\....\22009999-daghengst-Meerssen

Als iemand de map dan "C:\....\22009999 daghengst" noemt maakt VBA een nieuwe map met hetzelfde ordernummer aan. Is het mogelijk om via VBA alleen het - unieke - ordernummer te laten zoeken in de mappenstructuur en dan het bestand in die map te plaatsen, ongeacht de naamopbouw? Of anders een nieuwe map aan te maken op basis van de eerste variant?

Ik heb nu onderstaande code, met in cel BA6 de verwijzing “C:\....\22009999-daghengst-Meerssen”:

Code:
Dim Path As String
Dim Folder As String
Dim answer As VbMsgBoxResult
Path = ActiveSheet.Range("BA6")
Folder = Dir(Path, vbDirectory)

If Folder = vbNullString Then
answer = MsgBox("Bestandsmap bestaat niet. Wil je graag een map maken?", vbYesNo, "Maak bestandsmap?")
Select Case answer
Case vbYes
VBA.FileSystem.MkDir (Path)
Case Else
Exit Sub
End Select
Else
MsgBox "Bestandsmap bestaat, bestand wordt erin opgeslagen"

End If

Bij voorbaat dank!
 
Zoiets misschien, er wordt gecheckt of er een mapnaam is met een specifiek ordernummer. Zo ja, dan geen nieuw map aanmaken en anders wel.
De rest kun je zelf tweaken naar wens.


Code:
Sub jec()
 Dim baseFolder, newFolder, strFold
 baseFolder = "C:\Users\xx\xxx\xx\"
 newFolder = ActiveSheet.Range("BA6")
 
 Application.DisplayAlerts = False
 
 With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "\b\d{8}\b"
    If Not .test(newFolder) Then
        MsgBox "Foldername does not contain any ordernumber", vbOKOnly, "Pay attention"
        Application.DisplayAlerts = True
        Exit Sub
    End If
    strFold = Dir(baseFolder & "*" & .Execute(newFolder)(0) & "*", 16)
    With ThisWorkbook
      If strFold = "" Then
         MkDir newFolder
        .SaveAs newFolder & .Name, 52
      Else
        .SaveAs baseFolder & strFold & "\" & .Name, 52
      End If
    End With
 End With
 Application.DisplayAlerts = True
End Sub
 
Laatst bewerkt:
Je geeft zelf in je vraag aan dat de mappen alleen het ordernummer als onderscheidend kenmerk nodig hebben.
Het overige is overbodige ballast.

Code:
Sub M_snb()
  c00="22009999" 
  if Dir("G:\OF\" & c00 & "*",16)="" then mkdir "G:\OF\" & c00
  Thisworkbook.savecopyas  Dir("G:\OF\" & c00 & "*",16) & "\" & thisworkbook.name
End Sub
 
Sorry wederom voor mijn late reactie. Ik heb beide mogelijkheden geprobeerd en aangepast en de optie van snb past het beste echter ik krijg met geen mogelijkheid het bestand in die map opgeslagen. Ik heb een bestandje toegevoegd misschien helpt dat.

De volgende vraag is of niet alleen een excelbestand met die naam kan worden opgeslagen in de betreffende map maar ook een pdf bestand.

Wederom bedankt voor de hulp.
 

Bijlagen

  • TEST.xlsm
    26,3 KB · Weergaven: 22
Er staat ook tekst in mijn vorige bericht.
Die staat er niets voor niets.
Uit jouw code blijkt dat je die tekst genegeerd hebt.
Als je belangstelling hebt om met VBA te werken is het verstandig een goed handboek met de beginselen te lezen of een cursus met die inhoud te volgen.
Die basiskennis is nodig om geholopen te kunnen worden met VBA.
Als je een aangereikte 100% oplossing verslechtert houdt het op.
 
Laatst bewerkt:
Er staat ook tekst in mijn vorige bericht.
Die staat er niets voor niets.
Uit jouw code blijkt dat je die tekst genegeerd hebt.
Als je belangstelling hebt om met VBA te werken is het verstandig een goed handboek met de beginselen te lezen of een cursus met die inhoud te volgen.
Die basiskennis is nodig om geholopen te kunnen worden met VBA.
Als je een aangereikte 100% oplossing verslechtert houdt het op.

Wow, slecht nachtje zeker?
Maar als je het over begrijpend lezen hebt moet je mijn vraag nog eens goed doorlezen... ik heb het gehad over bestandsmappen met ordernummer in combinatie met klantnaam... en opslaan doet ie het bestand ook niet want dan krijg ik een foutmelding
 
Het is opgelost! Mijn dank aan iedereen in dit forum en externe fora die zich over mijn probleem hebben gebogen.

Groetjes Hans
 
Mijn dank aan iedereen in dit forum en externe fora die zich over mijn probleem hebben gebogen.
Heb je vraag dan ook op een ander forum voorgelegd. Waar is dan de link?
 
Ik heb onderstaande code van snb, aangepast door een forumlid van hier en een extern forum, ingepast in code waarbij gelijk het bestand als pdf wordt opgeslagen, een e-mail bericht wordt opgestart, ingevuld en de pdf als bijlage wordt toegevoegd. Gelijktijdig ook worden de ingevulde velden in het bestand leeggemaakt. Ik heb niet alle -te wissen -velden toegevoegd omdat anders de code te lang wordt.

Code:
    c00 = ActiveSheet.Range("BA7"): mydocs = ActiveSheet.Range("BA4")
    Dim answer As VbMsgBoxResult
    If Dir(mydocs & "\" & c00 & "*", 16) = vbNullString Then
    answer = MsgBox("Bestandsmap bestaat niet. Wil je graag een map maken?", vbYesNo, "Maak bestandsmap?")
        Select Case answer
            Case vbYes
                VBA.FileSystem.MkDir (mydocs & "\" & ActiveSheet.Range("BA8"))
            Case Else
                Exit Sub
        End Select
    Else
       MsgBox "Bestandsmap bestaat"
    
    End If

'   ThisWorkbook.SaveCopyAs mydocs & Dir(mydocs & "\" & c00 & "*", 16) & "\" & c00 & "-" & ThisWorkbook.Name

    Dim OutApp As Object
    Dim OutMail As Object

    PdfFile = ActiveSheet.Range("BA6") & "\" & ActiveSheet.Range("BA2") & ".pdf"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PdfFile, OpenAfterPublish:=True
    
    MailAdres = Sheets("gegevens").Range("A34")
    CC = Sheets("gegevens").Range("A35")
    CC = Sheets("gegevens").Range("A36")
    MailOnderwerp = ActiveSheet.Range("BA2")
    MailBody = ""
        
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
       .Display
        HTMLPart = .HTMLbody
       .To = MailAdres
       .CC = CC
       .Subject = MailOnderwerp
       .HTMLbody = MailBody & HTMLPart
       .Attachments.Add PdfFile
       .Display
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

    Range("AM2:AR2").ClearContents

In ieder geval nogmaals bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan