在如何在vba中调用winrar软件对文件进行解压缩?一文中我们介绍了调用winrar软件进行文件解压缩的方法。
本文介绍一种不需要调用压缩软件进行zip文件的解压缩的方法。
使用shell Folder 对象的CopyHere方法,它的语法如下:
Folder.CopyHere( vItem, [ vOptions ] )
其中vItem参数可以是一个文件的完整路径,也可以是一个FolderItem对象,或者FolderItems集合对象。
特别要注意的是vItem参数一定要以Variant 类型传入,否则会没有任何响应。
vOptions参数可以设置一些显示模式,比如设置为4,在解压缩zip文件时不会显示进度条。设置为16,如果弹出对话框将默认全选是。
以下是一个解压缩指定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+16 '下面的语句将没有任何反应,因为oFolderItems 是object类型,不是Variant ' .CopyHere oFolderItems, 4+16 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
发表评论