如何用shell.application对象访问操作文件夹?

可以使用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
       

发表评论