2016-05-12 12 views
2

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 
+1

'Cells (i + ROW_FIRST -1, 1) = Replace (objFolder.Name, objFSO.GetFolder (""), "")' – Dave

+0

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

+0

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

Antwort

2

Was

Cells(i + ROW_FIRST - 1, 1) = Replace$(objFolder.Name, CStr(objFSO.Getfolder(".")), vbNullString) 
+0

Danke für Ihre Antwort. Ich habe versucht, Ihre Lösung als Ersatz für meine ursprüngliche Zeile und zusätzlich zu (unter) meiner ursprünglichen Zeile hinzuzufügen. In beiden Fällen wird nur "Unterordner2" in die Zelle gedruckt. Es wird nicht als "Unterordner1 \ Unterordner2" gedruckt. Irgendeine Idee warum? – Doons