Ich baue diesen Index von Dateien in einem Verzeichnis. Spalte 1 mit Ordnername (n), Spalte 2 mit DateinameVBA Trimmen eines Objekts mit einem anderen Objekt in String (FSO.Getfolder verwandt) Grundsätzlich am Ende mit relativer Pfad zu einer Datei
Ich habe es geschafft, den tatsächlichen Dateinamen und Hyperlink den Dateinamen bereits zu erhalten. Ich habe jedoch Probleme, den Pfad zu der Datei in Spalte 1 aufzulisten, wobei ein relativer Pfad einschließlich seiner Unterordner verwendet wird.
Angenommen, ich habe den folgenden Ordner: "C: \ users \ ME \ Dokumente" In diesem Ordner befinden sich viele Unterordner.
Was ich erreichen möchte, ist eine Zeichenfolge, die den Pfad zu diesem tatsächlichen Unterordner auflistet. Beispiel:
"C:\users\ME\Documents\Subfolder1\Subfolder2\CharlieSheen.pdf"
Column 1 (A5) = Subfolder1\Subfolder2\
Column 2 (B5) = CharlieSheen.pdf
Wie ich sagte, ich habe die Kontrolle über Spalte 2.
Das Skript Ich bin schon mit ist
Private Function GetAllFiles(ByVal strpath As String, _
ByVal intRow As Integer, ByRef objFSO As Object) As Integer
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer`
i = intRow - ROW_FIRST + 1
Set objFolder = objFSO.Getfolder(strpath)
For Each objFile In objFolder.Files
'print file path
Cells(i + ROW_FIRST - 1, 1) = objFolder.Name
i = i + 1
Next objFile
GetAllFiles = i + ROW_FIRST - 1
End Function
ich, dass
Cells(i + ROW_FIRST - 1, 1) = objFolder.Name
Wechsel heraus in Cells(i + ROW_FIRST - 1, 1) = objFSO.Getfolder(".")
zurückgegeben genau das, was ich entfernen wollte die erste Schnur!
Deshalb möchte ich im Grunde ein Skript schreiben, das sagt:
Cells(i + ROW_FIRST - 1, 1) = objFolder.Name - objFSO.Getfolder(".")
Aber ich brauche Hilfe, da dieser Befehl offensichtlich nicht funktioniert.
Es könnte einen völlig anderen Ansatz dazu geben, aber da mein Makro bereits viel Code hat, wäre es am einfachsten, Trim oder Replace oder ähnliches zu verwenden?
Bearbeiten: Es gibt auch eine Funktion in meinem Skript namens "GetAllFolders". Vielleicht kann ich auf diese Weise die Zeichenfolge, die ich möchte, implementieren?
Private Sub GetAllFolders(ByVal strFolder As String, _
ByRef objFSO As Object, ByRef intRow As Integer)
Dim objFolder As Object
Dim objSubFolder As Object
'Get the folder object
Set objFolder = objFSO.GetFolder(strFolder)
'loops through each file in the directory and
'prints their names and path
For Each objSubFolder In objFolder.subfolders
intRow = GetAllFiles(objSubFolder.Path, _
intRow, objFSO)
'recursive call to to itsself
Call GetAllFolders(objSubFolder.Path, _
objFSO, intRow)
Next objSubFolder
End Sub
'Cells (i + ROW_FIRST -1, 1) = Replace (objFolder.Name, objFSO.GetFolder (""), "")' – Dave
Vielen Dank für Ihre Antworten. Ähnlich dem Vorschlag von Macro Man gab diese Lösung nur "Subfolder2" zurück. Nicht "Unterordner1 \ Unterordner2". Haben Sie eine Idee warum? Das Skript, das ich kopiert habe, hat auch eine Funktion für "GetAllFolders" und verwendet einen rekursiven Ansatz. Wird es helfen, wenn ich meine Frage aktualisiere, um diese zu enthalten? – Doons
Wenn Sie nur den "C: \ Users \ username" aus dem Pfad entfernen müssen, können Sie ihn stattdessen ersetzen durch 'Cells (i + ROW_FIRST -1, 1) = Ersetzen (objFolder.Name," C: \ Benutzer \ ME \ Documents "," ")' oder wenn es für alle Benutzer funktionieren musste, dann etwas wie 'Ersetzen (" C: \ Benutzer \ ME \ Dokumente \ EinigeDatei.pdf ", CStr (oShell.ExpandEnvironmentStrings ("% userprofile % "))," ")' – Dave