24. februar 2019 - 19:44Der er
2 kommentarer og 1 løsning
Problemer med dynamisk sti i VBA
Nedenståede skript henter alle sti navn i en mappe og dets undermappe, der inderholder ordet noter, og som er i word, og indsætter i et excelark.
Det virker fint med en fast sti, men jeg vil gerne være stien mere dynamisk (dvs, at sti kan ændre sig efter valg i bestemte celler). I mit tilfælde bruger jeg M4 som referer til et bestemt navn. Fx Medier.
Jeg vil gerne ændre ""C:\Users\Falentin\Desktop\Test\Medier\*Noter.docm*"" til noget a la:
har du prøvet at vise Path i en mgsboks, så du kan tjekke sti og antal \ og er det ok, så tag linjen "CMD /C DIR ""C:\Users\Falentin\Desktop\Test\Medier\*Noter.docm*"" /S /B /A:-D" og byg den i fx kommando="..." så du kan indsætte den uden dobbelte "" .Exec(kommando) er lettere at håndtere
Der er jo mange veje til Rom, så jeg har lige skruet lidt sammen, som måske kan inspirere dig - go leg
Public Sub getFileProperties() Dim aFiles As Variant, i As Integer, lRow As Long, filePath As String
'Indsæt selv overskrifter lRow = 2 filePath = "C:\_Projects\" 'læse fra arket aFiles = listFiles(filePath)
If Not IsEmpty(aFiles) Then For i = LBound(aFiles) To UBound(aFiles) If Not InStr(1, "noter.docm") = 0 Then 'indsæt kun filer der indeholder noter.domc insertFileInfo filePath & aFiles(i), ActiveSheet, lRow lRow = lRow + 1 End If Next i End If
End Sub
Function listFiles(ByVal sPath As String) As Variant 'læser alle filer i et bibliotek ind i et array Dim vaArray As Variant, i As Integer Dim oFile As Object, oFSO As Object, oFolder As Object, oFiles As Object
Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFolder = oFSO.GetFolder(sPath) Set oFiles = oFolder.Files
If oFiles.Count = 0 Then Exit Function
ReDim vaArray(1 To oFiles.Count) i = 1 For Each oFile In oFiles vaArray(i) = oFile.Name i = i + 1 Next
listFiles = vaArray End Function
Public Function insertFileInfo(ByVal sFile As String, ByVal ws As Worksheet, ByVal lRow As Long) 'Indsætter værdier Dim fso As Object, f As Object
On Error Resume Next Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(sFile)
'Juster selv antal værdier og rækkefølge (Cells er hurtigere end Range) ws.Cells(lRow, 1).Value = f.Name ws.Cells(lRow, 2).Value = f.Size ws.Cells(lRow, 3).Value = f.DateCreated ws.Cells(lRow, 4).Value = f.DateLastModified ws.Cells(lRow, 5).Value = f.DateLastAccessed ws.Cells(lRow, 6).Value = f.Type ws.Cells(lRow, 7).Value = f.Attributes ws.Cells(lRow, 8).Value = f.Path End Function
Tak for det store arbejde, men jeg tror at jeg bare må have forskellige makroer for hver. Jeg bruger alligevel dem for 6 måneder ad gangen :-)
Synes godt om
Ny brugerNybegynder
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.