【问题标题】:Excel vba open folder using same instance of explorer.exeExcel vba 使用相同的 explorer.exe 实例打开文件夹
【发布时间】:2018-12-28 17:47:10
【问题描述】:

我在 excel vba 中使用以下代码

returnval = Shell("explorer.exe " & folderPath, vbNormalFocus)

打开文件夹,这工作正常,但它启动了一个新的 Windows 资源管理器进程。现在在任务管理器中可以看到 2 个 Windows 资源管理器进程。如果我继续将此函数与不同的folderPath 一起使用,它每次都会创建一个新的资源管理器进程实例。

如何使用现有的 explorer.exe 实例从 excel vba 打开文件夹?

【问题讨论】:

  • 当我运行代码时,它不会创建 explorer.exe 的另一个实例
  • 我不知道为什么它不会发生在你身上。但是我在几台win10机器上试过,在任务管理器中清晰的看到windows explorer的几个进程。但是如果我从 excel vba 外部打开许多文件夹,它们会在 explorer.exe 的同一进程中打开。
  • 另外,如果你在 cmd 中键入“explorer.exe c:\path”,它会创建一个新的 explorer.exe 进程。但在 cmd 中,如果键入“start c:\path”不会创建新进程。不幸的是,如果我尝试在 vba 代码中用“start”替换“explorer.exe”,它不起作用

标签: excel vba explorer


【解决方案1】:

ThisWorkbook 不是 shell,而是跟随超链接,它将使用默认应用程序打开任何文件/url。它不会为我打开 explorer.exe 的另一个进程。

ThisWorkbook.FollowHyperlink "C:\filepath"

如果你真的需要使用 shell,那么你必须调用 cmd.exe 然后像这样开始:

returnval = Shell("cmd.exe /c start filepath")

【讨论】:

  • 这很好,但部分正确。它不会创建新的 explorer.exe 进程,但会在执行多次时创建同一文件夹的新实例。另一方面,如果我在 cmd 中使用“start c:\folderpath”,而文件夹路径已经打开,它会重新聚焦而不创建新窗口。
  • @MaheshUddama 我已经编辑了我的答案,所以它使用 start
  • 谢谢,第二个解决方案完成了这项工作,我不打算只使用 shell 命令。但我正在解释如何在 cmd 中获得启动命令的效果。这里它在后台闪烁 cmd 进程。您对此还有其他的 vba 方法吗?再次不需要使用 shell、start 或 cmd
  • @MaheshUddama 不幸的是,如果你想获得所有的functionality start,你必须通过 cmd 调用它,它会在短时间内闪现。所以它是在每次执行时打开一个新窗口或让 cmd 闪现之间的权衡。
【解决方案2】:

尝试 explorer.exe 的完整路径。例如,您应该使用 C:\WINDOWS\explorer.exe 而不是 explorer.exe。这对我有用。

【讨论】:

  • 对不起,和原码效果一样。如果您在 cmd 中键入“c:\windows\explorer.exe c:\path”,它会创建一个新的 explorer.exe 进程。但在 cmd 中,如果键入“start c:\path”不会创建新进程。不幸的是,如果我尝试在 vba 代码中用“start”替换“explorer.exe”,它就不起作用
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多