Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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使用相同的explorer.exe实例打开文件夹_Excel_Vba_Explorer - Fatal编程技术网

Excel vba使用相同的explorer.exe实例打开文件夹

Excel vba使用相同的explorer.exe实例打开文件夹,excel,vba,explorer,Excel,Vba,Explorer,我在ExcelVBA中使用了以下代码 returnval = Shell("explorer.exe " & folderPath, vbNormalFocus) 要打开文件夹,这可以正常工作,但会启动windows资源管理器的新进程。现在在任务管理器中可以看到两个windows资源管理器进程。如果我对不同的folderPath继续使用此函数,它每次都会创建一个新的explorer进程实例 如何使用现有的explorer.exe实例从excel vba打开文件夹?尝试explorer.

我在ExcelVBA中使用了以下代码

returnval = Shell("explorer.exe " & folderPath, vbNormalFocus)
要打开文件夹,这可以正常工作,但会启动windows资源管理器的新进程。现在在任务管理器中可以看到两个windows资源管理器进程。如果我对不同的
folderPath
继续使用此函数,它每次都会创建一个新的explorer进程实例


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

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

这个工作簿没有shell,
有如下超链接,可以用默认应用打开任何文件/url。它不会为我打开另一个explorer.exe进程

ThisWorkbook.FollowHyperlink "C:\filepath"
如果确实需要使用shell,则必须调用cmd.exe,然后按如下方式启动:

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

当我运行代码时,它不会创建另一个explorer.exe实例。我不知道为什么它不会发生在您身上。但我已经在几个win10机器上进行了尝试,并在任务管理器中清楚地看到了windows资源管理器的几个进程。但是,如果我从excel vba外部打开多个文件夹,它们将在同一个explorer.exe进程内打开。此外,如果在cmd中键入“explorer.exe c:\path”,则创建新的explorer.exe进程也会执行相同的操作。但在cmd中,如果键入“start c:\path”,则不会生成新进程。不幸的是,如果我尝试在vba代码中将“explorer.exe”替换为“start”,它将无法正常工作,这与原始代码的效果相同。如果在cmd中键入“c:\windows\explorer.exe c:\path”,则创建explorer.exe的新进程时也会执行相同的操作。但在cmd中,如果键入“start c:\path”,则不会生成新进程。不幸的是,如果我尝试在vba代码中将“explorer.exe”替换为“start”,它将不起作用。这很好,但部分是正确的。它不会创建新的explorer.exe进程,但在多次执行时会创建同一文件夹的新实例。另一方面,如果我在cmd中使用“启动c:\folderpath”,而folderpath已经打开,它会在不创建新窗口的情况下重新聚焦。@MaheshUddama我编辑了我的答案,所以它使用StartHanks,第二个解决方案会完成这项工作,我不打算只使用shell命令。但是我在解释如何在cmd中获得start命令的效果。在这里,它在后台闪烁cmd进程。您是否知道有其他vba方法可用于此目的?同样,不需要使用shell、start或cmd@MaheshUddama不幸的是,如果你想获得start的所有
功能,你必须通过cmd调用它,它会在短时间内闪烁。因此,它是在每次执行时打开一个新窗口或让cmd刷新之间的一种折衷。