26. oktober 2020 - 21:03 Der er 7 kommentarer

Gemme pdf i undermappe som ligger under tilfældig mappe

Jeg skal gemme pdf i en mappe med navn fra celle B3. eks.(55100)
mappen som har samme navn som B3 ligger allerede i en tilfældig mappe som ligger under D:\documenter\  mappen kan ligge i kunde1 eller kunde2 osv.
eks: jeg skal gemme pdf i mappen der hedder "55100" som ligger i mappen D:\documenter\?\55100.
samtidig vil jeg gerne oprette 2 under mapper med henholdsvis navn fra celle B4 og B5.
Eks: D:\documenter\?\55100\B4\B5\
Håber i kan hjælpe.

Sub Gem_certifikat()

Dim PDFfile As Range
For Each PDFfile In ActiveSheet.Range("B6")
If PDFfile.Value <> "" Then
FileCopy Range("B7") & PDFfile.Value, "D:\Document\" & PDFfile.Value
End If
Next
Range("B6").ClearContents
MsgBox "certifikat er gemt"

End Sub
bvirk Professor
27. oktober 2020 - 10:39 #1
Du kan gennemløbe "D:\Document\" med dir() og for hver, også med dir(), for hvilke fundet der har længde: len(dir("D:\Document\" & fundet & "\55100")) - det indikerer at 55100 er mappe i fundet.

Da dir() ikke kan parameterisere anvendelsen af flere buffere, eller med andre ord kun har en buffer, kan den ikke anvendes 'inden i hinanden' programflowmæssigt - fordi så ville inderste anvendelse overskrive yderste.
Derfor skal alle mappenavne under dokumenter gemmes i et array som så gennemløbes for at finde hvilken der indeholder f.eks.55100
27. oktober 2020 - 11:39 #2
Hej bvirk.

Jeg er ikke helt med på hvad du mener.
kan du skære det lidt mere ud i pap for mig?
bvirk Professor
28. oktober 2020 - 00:45 #3
Det er blot et tip om at anvende dir() til at finde ? i D:\documenter\?\55100 jeg omtaler.

  pathWithEnding("D:\","documenter\","55100")

kunne f.eks returnere

D:\documenter\kunde1\55100

givet

Function pathWithEnding(containingDir, startDir, endDir)
    Dim documents, folder
    push documents, Dir(containingDir & startDir & "*.*", vbDirectory)
    Do
        push documents, Dir()
    Loop While Len(documents(UBound(documents)))
    For Each folder In documents
        pathWithEnding = containingDir & startDir & folder & "\" & endDir
        'Debug.Print pathWithEnding
        If folder <> "." And folder <> ".." Then If Len(Dir(pathWithEnding, vbDirectory)) Then Exit Function
    Next
    pathWithEnding = Empty ''not found
End Function


Sub push(V, i)
    If IsEmpty(V) Then V = Array()
    ReDim Preserve V(UBound(V) + 1)
    If IsObject(i) Then Set V(UBound(V)) = i Else V(UBound(V)) = i
End Sub
28. oktober 2020 - 10:42 #4
jeg har stadig lidt problemer med at sætte koden rigtig sammen.
kan du hjælpe?


Sub find_folder()
ans = pathWithEnding(containingDir, startDir, endDir)
End Sub
Function pathWithEnding(containingDir, startDir, endDir)

    Dim documents, folder
    push documents, Dir("D:\", "document\", "55100" & "*.*", vbDirectory)
    Do
        push documents, Dir()
    Loop While Len(documents(UBound(documents)))
    For Each folder In documents
        pathWithEnding = containingDir & startDir & folder & "\" & endDir
        'Debug.Print pathWithEnding
        If folder <> "." And folder <> ".." Then If Len(Dir(pathWithEnding, vbDirectory)) Then Exit Function
    Next
    pathWithEnding = Empty ''not found
End Function


Sub push(V, i)
    If IsEmpty(V) Then V = Array()
    ReDim Preserve V(UBound(V) + 1)
    If IsObject(i) Then Set V(UBound(V)) = i Else V(UBound(V)) = i
End Sub
bvirk Professor
28. oktober 2020 - 12:25 #5
Hej igen
Man kan slet ikke skrive som du gør med:

Sub find_folder()
ans = pathWithEnding(containingDir, startDir, endDir)
End Sub

da containingDir, startDir, endDir er parametre navne som i deres stavede form bliver variabler i  funktionen pathWithEnding. Der eksisterer ingen værdier i  find_folder der hedder (= er variable) containingDir, startDir eller endDir. Det giver kompileringsfejl - hvis du som, man bør anvender
  option explicit
som indholdet i første linie i modulet. (ellers er det blot 3 empty værdier)

du skal bruge faktiske værdier som i #3, linie 4, konstanter, celle referencer eller andre udtryk.
28. oktober 2020 - 15:04 #6
Det er fuldstændig sort snak for mig da jeg ikke er så skrap til kodning.

Kan jeg ikke få dig til at skrive hele koden som du mener den skal se ud?
bvirk Professor
28. oktober 2020 - 16:53 #7
Hvis f.eks celle b3 indeholder navnet på en mappe som ligger i en mappe som liggger i d:\documenter og celle b7 er navnet på en pdf fil uden path - alså som i "minpd.pdf", så vil

pathWithEnding("D:\","documenter\",range("b3")) & "\" & range("b7")

være denne pdfs fulde stinavn.

Det var ordet herfra - andre må byde ind!

-- signing off
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.

Opret Preview

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





Premium
I Hvidovre står Danmarks måske mest sikre hardware-enhed - anvendes af efterretningstjenester verden over
Reportage: Nede i en kælder i Hvidovre opbevares Danmarks måske sikreste hardware-enheder. Det har kostet flere millioner at opbygge denne sikkerhed, men reelt gør det ikke noget, hvis der sker indbrud. Kom med ned i sikkerhedsvirksomheden Arbits kælder og se, hvad det er, der er gemt bag fire låse, et metalgitter og to sikkerhedsskabe.
Computerworld
Sundhed.dk er klar med vaccinepas: Sådan finder du det
Regeringen har sendt et digitalt coronapas i udbud, men allerede nu kan du få adgang til et digitalt vaccinepas, der dokumenterer din vaccinationsstatus.
CIO
Har du rost din mellemleder i dag? Snart er de uddøde - og det er et tab
Computerworld mener: Mellemledere lever livet farligt: Topledelsen får konstant ideer med skiftende hold i virkeligheden, og moden går mod flade agile organisationer. Men mellemlederen er en overset hverdagens helt med et kæmpe ansvar. Her er min hyldest til den ofte latterliggjorte mellemleder.
Job & Karriere
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
White paper
Kunsten at navigere i en tilpasningsøkonomi
Evnen til at tilpasse sig en verden i konstant forandring bliver afgørende for virksomhedens mulighed for at vækste i fremtiden. Ét af de finansielle håndtag du kan skrue på, er en hel eller delvis outsourcing af it-driften. I e-bogen ”Kunsten at navigere i en tilpasningsøkonomi” får du viden om, hvordan din virksomhed kan bruge tilpasningsøkonomi til at håndtere fremtidens krav til it. Vi spørger blandt andet: - Kan din virksomhed skalere og tilpasse sin digitale kapacitet og økonomi? - Har dine kunder tillid til, at du har de skarpeste it-løsninger? - Ville I kunne styrke forretningen ved at give jeres it mere fokus? - Kan I få øget funktionalitet til samme pris? Vi fokuserer på risiko, økonomi, fokus og valg af it-partner, som er fire opmærksomhedspunkter du skal have styr på for at lykkes med at tilpasse virksomheden til at modstå forandringerne i verden.