VBA使用字符串中的另一个对象修剪一个对象(与FSO.Getfolder相关)基本结束与文件的相对路径

问题描述:

我正在构建目录中的文件索引。 第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

什么

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

感谢您的回复。我尝试添加您的解决方案作为我的原始线路的替代品,并且除了(在)我的原始线路之外。 在这两种情况下,只有“子文件夹2”被打印在单元格中。 它不打印为“Subfolder1 \ Subfolder2”。任何想法为什么? – Doons