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"
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
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
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
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.
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
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.