2016-05-12 25 views
2

我正在構建目錄中的文件索引。 第1列與文件夾名稱,第2列與文件名VBA使用字符串中的另一個對象修剪一個對象(與FSO.Getfolder相關)基本結束與文件的相對路徑

我已經設法得到實際的文件名和超鏈接的文件名已經。 但我有問題列出列1中的文件的路徑,使用相對路徑,包括其子文件夾。

說我有以下文件夾: 「C:\ users \ ME \ Documents」 該文件夾中有許多子文件夾。

我想要實現的是一個字符串,列出該實際子文件夾的路徑。 例子:

"C:\users\ME\Documents\Subfolder1\Subfolder2\CharlieSheen.pdf" 
Column 1 (A5) = Subfolder1\Subfolder2\ 
Column 2 (B5) = CharlieSheen.pdf 

正如我說我能控制的第2列。

我已經使用這個腳本是

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 

我想通了,改變
Cells(i + ROW_FIRST - 1, 1) = objFolder.Name

Cells(i + ROW_FIRST - 1, 1) = objFSO.Getfolder(".")正是我想要從中刪除第一個字符串!

所以我基本上要編寫一個腳本,說:

Cells(i + ROW_FIRST - 1, 1) = objFolder.Name - objFSO.Getfolder(".")

但我需要幫助,因爲該命令顯然是行不通的。

這可能有一個完全不同的方法,但由於我的宏已經有很多代碼,使用修剪或替換或類似將是最簡單的?

編輯: 我的腳本中還有一個名爲「GetAllFolders」的函數。 也許我可以通過某種方式調用它來實現我想要的字符串?

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

'細胞(1 + ROW_FIRST -1,1)=替換(objFolder.Name,objFSO.GetFolder( 「」), 「」)' – Dave

+0

謝謝您回覆。與Macro Man的建議類似,此解決方案僅返回「Subfolder2」。不是「Subfolder1 \ Subfolder2」。 你知道爲什麼嗎?我複製的腳本還具有「GetAllFolders」功能並使用遞歸方法。 如果我更新我的問題來包含它,它會有幫助嗎? – Doons

+0

如果您只需要從路徑中刪除「C:\ Users \ username」,您可以將其替換爲「Cells(i + ROW_FIRST -1,1)= Replace(objFolder.Name,」C:\ Users \ ME \ Documents \「,」「)'或者它需要爲所有用戶工作,那麼就像'Replace(」C:\ Users \ ME \ Documents \ Somefile.pdf「,CStr(oShell.ExpandEnvironmentStrings(」%userprofile %「)),」「)' – Dave

回答

2

什麼

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

感謝您的回覆。我嘗試添加您的解決方案作爲我的原始線路的替代品,並且除了(在)我的原始線路之外。 在這兩種情況下,只有「子文件夾2」被打印在單元格中。 它不打印爲「Subfolder1 \ Subfolder2」。任何想法爲什麼? – Doons

相關問題