Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA使用字符串中的另一个对象修剪一个对象(FSO.Getfolder related)基本上以文件的相对路径结束_Excel_Vba_Trim_Subdirectory_Fso - Fatal编程技术网

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

Excel VBA使用字符串中的另一个对象修剪一个对象(FSO.Getfolder related)基本上以文件的相对路径结束,excel,vba,trim,subdirectory,fso,Excel,Vba,Trim,Subdirectory,Fso,我正在目录中建立文件索引。 第1列具有文件夹名称,第2列具有文件名 我已经设法得到了实际的文件名和文件名的超链接。 但是我在列1中列出文件的路径时遇到了问题,使用了包含其子文件夹的相对路径 假设我有以下文件夹: “C:\users\ME\Documents” 在该文件夹中有许多子文件夹 我想要实现的是一个字符串,它列出了实际子文件夹的路径。 例如: 正如我所说,我可以控制第2列 我已经使用的脚本是 Private Function GetAllFiles(ByVal strpath As Str

我正在目录中建立文件索引。 第1列具有文件夹名称,第2列具有文件名

我已经设法得到了实际的文件名和文件名的超链接。 但是我在列1中列出文件的路径时遇到了问题,使用了包含其子文件夹的相对路径

假设我有以下文件夹: “C:\users\ME\Documents” 在该文件夹中有许多子文件夹

我想要实现的是一个字符串,它列出了实际子文件夹的路径。 例如:

正如我所说,我可以控制第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
我发现了改变
单元格(第一行+第一行-1,1)=objFolder.Name

into
单元格(i+ROW_FIRST-1,1)=objFSO.Getfolder(“.”)
返回了我想要从第一个字符串中删除的内容

所以我基本上想写一个脚本,上面写着:

单元格(i+ROW_FIRST-1,1)=objFolder.Name-objFSO.Getfolder(“.”)

但我需要帮助,因为那个命令显然不起作用

可能有一种完全不同的方法来实现这一点,但是由于我的宏已经有很多代码,所以使用Trim或Replace或类似的方法是最简单的

编辑: 在我的脚本中还有一个名为“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)

单元格(i+ROW_FIRST-1,1)=替换(objFolder.Name,objFSO.GetFolder(“.”)”
感谢您的回复。与Macro Man的建议类似,此解决方案仅返回“子文件夹2”。不是“子文件夹1 \子文件夹2”。你知道为什么吗?我复制的脚本还有一个“GetAllFolders”函数,并使用递归方法。如果我更新我的问题以包括这一点,会有帮助吗?如果你只需要从路径中删除“C:\Users\username”,你可以用
单元格(I+ROW_FIRST-1,1)=替换(objFolder.Name,“C:\Users\ME\Documents”,“C:\code>)
或者如果它需要为所有用户工作,那么类似于
替换(“C:\Users\ME\Documents\Somefile.pdf”,CStr(oShell.ExpandEnvironmentStrings(“%userprofile%”))
我解释的时候可能有点快。objFSO.GetFolder(“.”)返回“C:\user\ME\”。objFolder.Name返回“Subfolder2”“。很抱歉,当我没有插入整个路径的命令时,我自己建议的替换自然不起作用。我修复了它!我没有使用objFolder.Name,而是使用了objFolder.Path,然后应用了您伟大的替换解决方案!谢谢你的帮助!谢谢你的回复。我尝试添加您的解决方案,既可以替代我的原始行,也可以添加到我的原始行(下)。在这两种情况下,单元格中只打印“子文件夹2”。它不会打印为“子文件夹1\子文件夹2”。知道为什么吗?
Cells(i + ROW_FIRST - 1, 1) = Replace$(objFolder.Name, CStr(objFSO.Getfolder(".")), vbNullString)