【问题标题】:Locate "chrome.exe"找到“chrome.exe”
【发布时间】:2016-01-14 22:07:03
【问题描述】:

我有一个调用 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

【问题讨论】:

  • 我会说,如果你使用的是 linux,你可以使用 which 命令,但后来我看到了 C:/ ...
  • 刚刚搜到了Windows type of which

标签: google-chrome file-search


【解决方案1】:

请注意,您将参数 sPath 传递给您的递归函数。

然后您将忽略此参数并在每次调用时搜索文件夹C:\。现在你有了一个没有终止条件的递归函数,所以你当然会得到一个堆栈溢出异常。

简单替换

Set myFolder = FSO.GetFolder("C:\")

Set myFolder = FSO.GetFolder(sPath)

并替换:

Recurse = Recurse(mySubFolder.Path)

Recurse = Recurse(sPath + "\\" + mySubFolder.Path);

(或者你用这种语言连接文件夹)


关于寻找Chrome.exe的话题,如果你先看两个地方,你会节省很多时间:

  • "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
  • (环境变量 LOCALAPPDATA) + "\Google\Chrome\Application\Chrome.exe"

【讨论】:

  • 感谢@AndrewShepherd。建议的更改 FSO.GetFolder(sPath) 返回“找不到路径”错误。
  • @JonPotter - 您必须将子路径连接到基本路径。我为您添加了额外的代码行。 (您可能需要稍微修改一下 - 我什至不知道您使用的是什么语言 :-)
  • 非常感谢您的帮助,尽管我的学生犯了错误。它的 Excel VBA,在大多数情况下我都相当擅长,但是多年来没有接触过 VBA,而这个就在我的皮肤下:|
猜你喜欢
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多