我有一个调用Chrome的宏,但是在不同的计算机上部署此代码会因每台计算机上的chrome的完整文件路径而受到破坏。为了缓解这种情况,我想执行一次性搜索“chrome.exe”并将文件路径存储为变量。以下似乎可行,但递归会产生堆栈空间问题(运行时错误28)。
这似乎是一个简单的操作,递归搜索遍布通常的论坛,但我无法做到正确!
Function Recurse(sPath As String) As String
Dim FSO As New FileSystemObject
Dim myFolder As Folder
Dim mySubFolder As Folder
Dim myFile As File
Application.ScreenUpdating = False
Set myFolder = FSO.GetFolder("C:\")
For Each mySubFolder In myFolder.SubFolders
For Each myFile In mySubFolder.Files
If myFile.Name = "chrome.exe" Then
Debug.Print myFile.Name & " in " & myFile.Path
Exit For
End If
Next
Recurse = Recurse(mySubFolder.Path)
Next
Application.ScreenUpdating = True
End Function
Sub ChromeSearch()
Call Recurse("C:\")
End Sub
答案 0 :(得分:0)
请注意,您正在将参数sPath
传递给递归函数。
然后,您将忽略此参数并在每次调用时搜索文件夹C:\
。现在你有一个没有终止条件的递归函数,所以你当然会得到一个堆栈溢出异常。
简单地替换
Set myFolder = FSO.GetFolder("C:\")
与
Set myFolder = FSO.GetFolder(sPath)
并替换:
Recurse = Recurse(mySubFolder.Path)
使用
Recurse = Recurse(sPath + "\\" + mySubFolder.Path);
(或者你用这种语言连接文件夹)
关于查找Chrome.exe的主题,如果您先在两个地方查看,可以节省大量时间: