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
Avatar billede bvirk Guru
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?
Avatar billede bvirk Guru
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
Avatar billede bvirk Guru
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?
Avatar billede bvirk Guru
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
Avatar billede 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.

Loading billede 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