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
什么
Cells(i + ROW_FIRST - 1, 1) = Replace$(objFolder.Name, CStr(objFSO.Getfolder(".")), vbNullString)
感谢您的回复。我尝试添加您的解决方案作为我的原始线路的替代品,并且除了(在)我的原始线路之外。 在这两种情况下,只有“子文件夹2”被打印在单元格中。 它不打印为“Subfolder1 \ Subfolder2”。任何想法为什么? – Doons
'细胞(1 + ROW_FIRST -1,1)=替换(objFolder.Name,objFSO.GetFolder( “”), “”)' – Dave
谢谢您回复。与Macro Man的建议类似,此解决方案仅返回“Subfolder2”。不是“Subfolder1 \ Subfolder2”。 你知道为什么吗?我复制的脚本还具有“GetAllFolders”功能并使用递归方法。 如果我更新我的问题来包含它,它会有帮助吗? – Doons
如果您只需要从路径中删除“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