可以使用shell.application对象的NameSpace属性返回文件夹Folder对象,它的语法如下:
Shell.NameSpace( _ ByVal vDir As Variant _ ) As Folder
其中vDir参数为要返回的文件夹的对象的路径
这里特别注意vDir参数一定要以Variant类型传入,否则无法返回文件夹对象。
比如如下的代码:
Sub QQ1722187970() Dim sPath As String Dim oFolder As Object sPath = "c:\Users\Administrator\Desktop\" Dim oShell As Object Set oShell = VBA.CreateObject("shell.application") With oShell Set oFolder = .Namespace(sPath) End With End Sub
oFolder对象始终返回Nothing,因为Dim sPath As String,需要改为 Dim sPath As Variant。
正确的代码如下:
Sub QQ1722187970() Dim sPath As Variant Dim oFolder As Object sPath = "c:\Users\Administrator\Desktop\" Dim oShell As Object Set oShell = VBA.CreateObject("shell.application") With oShell Set oFolder = .Namespace(sPath) End With End Sub
当返回后,就可以开始访问文件夹的各种属性了,比如以下代码可以返回文件夹下有多少个文件:
Sub QQ1722187970() Dim sPath As Variant Dim oFolder As Object sPath = "c:\Users\Administrator\Desktop\扫描" Dim oShell As Object Set oShell = VBA.CreateObject("shell.application") With oShell Set oFolder = .Namespace(sPath) With oFolder MsgBox "该文件夹共有" & .items.Count & "文件" End With End With End Sub
Shell Folder对象具有以下常用的属性和方法:
ParentFolder属性:返回文件夹的上一级文件夹对象。
Title属性:返回文件夹的名称。
NewFolder方法:在当前文件夹下创建一个新的文件夹。
Items方法:返回当前文件夹下的所有项目集合对象FolderItems(含文件、快捷方式等等)。
CopyHere方法:把文件复制到当前文件夹下。
以下是一个解压缩zip文件的代码:
Sub QQ1722187970() Dim sPath Dim oFolder As Object Dim oFolderItem As Object Dim oFolderItems As Object Dim oFolderItemVerbs As Object sPath = GetFilePath If Len(sPath) Then Dim oShell As Object Set oShell = VBA.CreateObject("shell.application") With oShell '选中要解压缩的文件 Set oFolder = .Namespace(sPath) Set oFolderItems = oFolder.items With oFolder.ParentFolder .CopyHere oFolder.items, 4 '下面的语句将没有任何反应,因为oFolderItems 是object类型,不是Variant ' .CopyHere oFolderItems, 4 End With End With End If End Sub Function GetFilePath() As String '声明一个FileDialog对象变量 Dim oFD As FileDialog ' '创建一个选择文件对话框 Set oFD = Application.FileDialog(msoFileDialogFilePicker) '创建一个选择文件夹对话框 ' Set oFD = Application.FileDialog(msoFileDialogFolderPicker) '声明一个变量用来存储选择的文件名 Dim vrtSelectedItem As Variant With oFD '允许选择多个文件 .AllowMultiSelect = True '使用Show方法显示对话框,如果单击了确定按钮则返回-1。 If .Show = -1 Then '遍历所有选择的文件 For Each vrtSelectedItem In .SelectedItems '获取所有选择的文件的完整路径,用于各种操作 GetFilePath = vrtSelectedItem Next '如果单击了取消按钮则返回0 Else End If End With '释放对象变量 Set oFD = Nothing End Function
发表评论