08. januar 2004 - 14:34Der er
9 kommentarer og 1 løsning
VBA i access 2003 hurtigt svar ønskes
jeg har et script der skal kunne læse antallet af biblioteker fro filkopiering. Problemet er bare at der ikke tage alle underfoldere med i scriptgennemløbet. Hvad er det der mangler i scriptet.
(NB har fået hjælp fra eksperten til denne del af scriptet)
Function kopierbilleder() Dim db As Database Dim rs As DAO.Recordset Dim n As Long Dim StartFolder As String Dim Folder As String Dim FolderNavn(1 To 1000) As String Dim I As Integer Dim FolderAntal As Integer
StartFolder = "d:\folder1\" Folder = Dir(StartFolder, vbDirectory) I = 0 Do While Folder <> "" If Folder <> "." And Folder <> ".." Then ' Ignorer det overordnede bibliotek. If (GetAttr(StartFolder & Folder) And vbDirectory) = vbDirectory Then I = I + 1 FolderNavn(I) = Folder End If End If Folder = Dir ' Hent næste folder Loop
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Hvis du nu laver en function der tæller foldere: Function Count_Folders(StrFolder as string) as Long Count_Folders=0 'Skal returnere 0 hvis der ikke er andre mapper
Her laver du din dirfunction og kalder rekursivt hvis du møder endnu en mappe - der ved modtager du det samlede antal undermapper i undermapper
Count_Folders=I End Function
Function kopierBilleder() Dim antal as long antal=Count_folders("d:\folder1\")
de skal vel også registreres eller lign i hukommelsen da de skal bruges senere i scriptet for kopiering eller??
Her er resten /hele scriptet til orientering, da jeg ikke er klar over om der måske er udeladt noget i mon forklaring..
Function kopierbilleder() Dim db As Database Dim rs As DAO.Recordset Dim n As Long Dim StartFolder As String Dim Folder As String Dim FolderNavn(1 To 1000) As String Dim I As Integer Dim FolderAntal As Integer
StartFolder = "d:\folder1\" Folder = Dir(StartFolder, vbDirectory) I = 0 Do While Folder <> "" If Folder <> "." And Folder <> ".." Then ' Ignorer det overordnede bibliotek. If (GetAttr(StartFolder & Folder) And vbDirectory) = vbDirectory Then I = I + 1 FolderNavn(I) = Folder End If End If Folder = Dir ' Hent næste folder Loop
FolderAntal = I
Set db = CurrentDb Set rs = db.OpenRecordset("billeder_kopieres", dbOpenSnapshot) rs.MoveLast For I = 1 To FolderAntal rs.MoveFirst For n = 1 To rs.RecordCount If Dir(StartFolder & FolderNavn(I) & "\" & rs![billednavn]) <> "" Then FileCopy StartFolder & FolderNavn(I) & "\" & rs![billednavn], "d:\dest\" & rs![billednavn] 'FileCopy StartFolder & FolderNavn(I) & "\" & rs![billednavn], "\\Dkedbs01\Stibo$\Ventilationskatalog\Kopi_Billeder\" & rs![billednavn] End If rs.MoveNext Next n Next I
rs.Close Set rs = Nothing db.Close MsgBox "jeg er nu færdig med denne opgave... ;-)" End Function
Har lavet søgningen af underfoldere om til at bruge dir fra shell, som gemmer oplysningerne i en fil, som så genindlæses. Jeg kører win XP og office 2000, så jeg håber at det kan bruges.
Function kopierbilleder() Dim db As Database Dim rs As DAO.Recordset Dim n As Long Dim folder As String Dim FolderAntal As Integer Dim I As Long, FolderNavn() As String I = -1 Shell "cmd.exe /k dir d:\folder1\ /a:d /s /b > folder.txt", vbHide For Pause = 1 To 50000000: Next ' holder pause, for at shell kan blive færdig Open "folder.txt" For Input As #1 Do Until EOF(1) I = I + 1 ReDim Preserve FolderNavn(I) Input #1, FolderNavn(I) Loop Close #1 FolderAntal = I Set db = CurrentDb Set rs = db.OpenRecordset("billeder_kopieres", dbOpenSnapshot) rs.MoveLast For I = 0 To FolderAntal rs.MoveFirst For n = 1 To rs.RecordCount If Dir(FolderNavn(I) & "\" & rs![billednavn]) <> "" Then FileCopy FolderNavn(I) & "\" & rs![billednavn], "d:\dest\" & rs![billednavn] 'FileCopy FolderNavn(I) & "\" & rs![billednavn], "\\Dkedbs01\Stibo$\Ventilationskatalog\Kopi_Billeder\" & rs![billednavn] End If rs.MoveNext Next n Next I
rs.Close Set rs = Nothing db.Close MsgBox "jeg er nu færdig med denne opgave... ;-)" End Function
NB Kunne du måske lige forklare hvad det er du gør i disse linier. gerne med en komment ud for hver ;-)
Dim I As Long, FolderNavn() As String I = -1 Shell "cmd.exe /k dir d:\folder1\ /a:d /s /b > folder.txt", vbHide For Pause = 1 To 50000000: Next ' holder pause, for at shell kan blive færdig Open "folder.txt" For Input As #1 Do Until EOF(1) I = I + 1 ReDim Preserve FolderNavn(I) Input #1, FolderNavn(I) Loop Close #1 FolderAntal = I
På denne måde er det ikke kun en læsning men også for mig et værktøj til at forstå handlingerne i scriptet til en anden gang.
Dim I As Long, FolderNavn() As String I = -1 ' -1 fordi første skal være 0 ' kalder dir i dos, beder kun om mapper, også i undermapper og skriver det til en fil folder.txt _ vbHide, fordi jeg ikke vil se dosvinduet. Shell "cmd.exe /k dir d:\folder1\ /a:d /s /b > folder.txt", vbHide For Pause = 1 To 50000000: Next ' holder pause, for at shell kan blive færdig _ inden koden fortsætter. Open "folder.txt" For Input As #1' henter data ind fra folder.txt Do Until EOF(1)' læs indtil EOF = end of file på #1 I = I + 1 ' I bliver + med 1 så den starter med 0 og vokser ReDim Preserve FolderNavn(I)' da jeg ikke ved hvor mange mapper der _ er skrevet i filen, redimmer jeg til 1 større ved hver linie. Input #1, FolderNavn(I)' Det hele er nu i variablen FolderNavn(I) Loop Close #1 FolderAntal = I ' det antal mapper der er fundet
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.