如何使用VBA在Windows资源管理器中从Excel中的选定单元格中选择多个文件?
我有几个文件夹,每个文件夹包含1000多个子文件夹。根据每个子文件夹中的进度,我必须将其中一些(大约一半)移动到其他位置。进度记录在电子表格中,电子表格还提供了进度路径。我有以下代码:如何使用VBA在Windows资源管理器中从Excel中的选定单元格中选择多个文件?,excel,vba,Excel,Vba,我有几个文件夹,每个文件夹包含1000多个子文件夹。根据每个子文件夹中的进度,我必须将其中一些(大约一半)移动到其他位置。进度记录在电子表格中,电子表格还提供了进度路径。我有以下代码: Sub open_explorer() Shell "C:\Windows\explorer.exe /select, K:\user\folder\A\" & ActiveCell.Value, vbMaximizedFocus End Sub 因此,这段代码将打开一个窗口资源
Sub open_explorer()
Shell "C:\Windows\explorer.exe /select, K:\user\folder\A\" & ActiveCell.Value, vbMaximizedFocus
End Sub
因此,这段代码将打开一个窗口资源管理器,其中选择了一个文件(该文件是path+ActiveCell值后面的文件)。
有一种方法可以同时选择多个文件吗?假设我想选择200个单元格,这样窗口资源管理器将打开200个选定的文件
感谢您的帮助!不幸的是,
/select
选项只允许您选择单个文件。没有其他选项允许您选择多个文件。您可以通过选中此选项来确认
话虽如此,既然APISHOpenFolderAndSelectItems
不可用,那么在VBA中是否有可能实现这一点呢?答案是
是
遵循以下步骤
Microsoft Shell控件和自动化
和Microsoft Internet控件
的引用,如下所示
C:\Users\Siddharth Rout\Desktop\Test1
,其中包含5个编号为1到5的csv文件,如下所示
Sub-Sample()
Option Explicit
Sub Sample()
SelectMultipleFiles "C:\Users\Siddharth Rout\Desktop\Test1"
End Sub
Sub SelectMultipleFiles(sFolder As String)
Dim wb As WebBrowser
Dim objExp As Shell32.Shell
Set objExp = New Shell32.Shell
objExp.Open sFolder
'~~> Find our explorer window
Do While wb Is Nothing: Set wb = GetExplorer(sFolder): Loop
'~~> We are going to select files 1,3 and 5.csv
'~~> The 5& is used so that any previous selections are cleared off
Call wb.document.SelectItem(sFolder & "\1.csv", 5&)
Call wb.document.SelectItem(sFolder & "\3.csv", 1&)
Call wb.document.SelectItem(sFolder & "\5.csv", 1&)
End Sub
'~~> Function to find the releavnt explorer window
Function GetExplorer(sFolder As String) As WebBrowser
Dim objExp As New Shell32.Shell
Dim wb1 As WebBrowser
For Each wb1 In objExp.Windows
If wb1.Name = "Windows Explorer" And _
LCase(wb1.document.Folder.Self.Path) = LCase(sFolder) Then
Set GetExplorer = wb1
End If
Next
End Function
输出:
注意:如@ChrisB所述,在Windows 10中,WebBrowser.Name
属性返回文件资源管理器
,而不是Windows资源管理器
,以便使其兼容您可以使用的两个版本
If wb1.Name = "Windows Explorer" or wb1.Name = "File Explorer"....
或者,您可以使用WMI
查找Windows版本,然后在Windows/文件资源管理器之间进行选择。但是,它只适用于窗口标题为的Windows平台
要在Windows 8/8.1/10(不仅仅是英文版的Windows 7)上实现此功能,我们可以使用GetExplorer
的函数定义:
'~~> Function to find the relevant explorer window
Function GetExplorer(sFolder As String) As WebBrowser
Dim objExp As New Shell32.Shell
Dim wb1 As WebBrowser
For Each wb1 In objExp.Windows
If UCase(wb1.FullName) = "C:\WINDOWS\EXPLORER.EXE" Then
If LCase(wb1.Document.Folder.Self.Path) = LCase(sFolder) Then
Set GetExplorer = wb1
End If
End If
Next
End Function
类似的问题:-(虽然答案有些陈旧,但与vba无关)这有点复杂。让我发布一个答案并解释一下吧。Hanks@KekuSemau,我看到了那篇帖子,但不适用。对我来说,一个显而易见的问题是,一旦你选择了它们,你将如何处理它们。为什么不改为移动它们?+1一个非常好的问题!我发布了一个解决方案。你可能需要刷新页面才能看到它:)真有趣<但是,在我的例子中,Name
是Windows资源管理器
(Win7)。这是一个输入错误还是有所不同?以上内容在Win 7上进行了测试:)@KekuSemau我发布了Windows 10中最后一个函数的一个变体,WebBrowser.Name属性返回文件资源管理器
。将以下内容替换为:如果wb1.Name=“Windows资源管理器”
,如果wb1.Name=“文件资源管理器”
。