主体参考很多vbs、VB方面的程序。目前以下还未进行测试
方法一:调用shell
'获得rar的安装路径Function GetSetupPath(AppName As String)Dim WSH As ObjectSet WSH = CreateObject("Wscript.Shell")GetSetupPath = WSH.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\" & AppName & "\Path")Set WSH = NothingEnd FunctionSub 测试()Debug.Print GetSetupPath("Winrar.exe")Debug.Print GetSetupPath("Excel.exe")End Sub'Shell函数'Shell执行一个可执行文件.返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。'语法'Shell("可执行程序的路径 文件名或命令行",窗口的显示方式)Sub 用绘图程序打开图片()Dim myshmysh = Shell("mspaint.exe " & ThisWorkbook.path & "\pic.jpg", vbMaximizedFocus)End Sub'WinRar命令的命令行表示方法' WinRar程序路径 命令 开关1 开关2 开关3..开关N 压缩包路径 压缩的文件路径'命令是指要进行怎么样的操作,如A是压缩,X是解压缩'开关是具体操作时的细节,如压缩是是否把原文件删除,是否添加密码等Sub RarFile() '压缩单个文件Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\A.rar" '压缩后的文件名Myfile = ThisWorkbook.path & "\B*.xls" ' 指定要压缩的文件FileString = Rarexe & " A " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩End Sub'如果文件名使用通配符,可以对同类的文件进行和压缩,'如果只有路径没有文件名,则会把这个文件夹进行压缩Sub RarFile2() '多个文件压在一起Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名' Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件类型Myfile = ThisWorkbook.path & "\B\" ' 指定要压缩的文件夹路径FileString = Rarexe & " A " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩End Sub'-ep压缩时忽略路径,如果没有则会带上'-ep1压缩时忽略基准路径Sub RarFile2() '多个文件压在一起Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名Myfile = ThisWorkbook.path & "\B" ' 指定要压缩的文件FileString = Rarexe & " A -ep1 " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩End Sub'-p+密码 加密码后可以看到文件列表'-hp+密码 加密码后无法看到文件列表Sub RarFile9() '多个文件压在一起,并添加密码,可以看到文件列表Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名Myfile = ThisWorkbook.path & "\B\" ' 指定要压缩的文件FileString = Rarexe & " A -p123 " & myRAR & " " & MyfileResult = Shell(FileString, vbHide) '执行压缩End SubSub RarFile10() '多个文件压在一起,并添加密码,看不到文件列表Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名Myfile = ThisWorkbook.path & "\B\" ' 指定要压缩的文件FileString = Rarexe & " A -hp123 " & myRAR & " " & MyfileResult = Shell(FileString, vbHide) '执行压缩End Sub'df压缩后删除原文件'dr压缩后删除原文件到回收站Sub RarFile2() '多个文件压在一起,删除原文件Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B\B.rar" '压缩后的文件名Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件FileString = Rarexe & " A -df -p123 -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩End SubSub RarFile3() '多个文件压在一起,删除原文件到回收站Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B\B.rar" '压缩后的文件名Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件FileString = Rarexe & " A -dr -p123 -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩End SubSub RarFile2() '多个文件压在一起,排除某个文件Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件FileString = Rarexe & " A -x" & ThisWorkbook.path & "\B\dr.xls -x" & ThisWorkbook.path & "\B\1.xls -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩End Sub'借助dir和do循环,压缩指定文件夹中的所有文件Sub RarFile4() '每个文件单独压缩Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongDim p As String, f As Stringp = ThisWorkbook.path & "\B\"Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径f = Dir(p & "*.xls")Do While f <> ""f = Split(f, ".")(0)Myfile = ThisWorkbook.path & "\B\" & f & ".xls" ' 指定要压缩的文件myRAR = ThisWorkbook.path & "\B\" & f & ".rar" '压缩后的文件名FileString = Rarexe & " A -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩f = DirLoopEnd Sub'D可以删除指定的文件'WinRAR d 文件夹 可以带通配符的文件名或同类文件Sub RarFile3() 'Dim Rarexe As StringDim myRAR As StringDim Myfile As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B\B.rar" '在删除的压缩包名称Myfile = ThisWorkbook.path & "\B\说明.txt" ' 指定要删除的文件FileString = Rarexe & " D " & myRAR & " " & "说明.txt" 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行程序End SubSub RarFile2() '解压缩Dim Rarexe As StringDim myRAR As StringDim Mypath As StringDim FileString As StringDim Result As LongRarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径myRAR = ThisWorkbook.path & "\B\B.rar" '压缩后的文件名Mypath = ThisWorkbook.path & "\B\" ' 指定要压缩的文件FileString = Rarexe & " x -ep -hp123 " & myRAR & " " & Mypath 'rar程序的A命令压缩文件的字符串Result = Shell(FileString, vbHide) '执行压缩End Sub'x 表示解压缩'-ep解压到当前文件夹下'-hp123 解压含密码的压缩包————————————————版权声明:本文为CSDN博主「预见未来to50」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/hpdlzu80100/article/details/80835784
方法二:使用FileSystemObject,手动构建
' VB Script Document
option explicit
createZip "d:\test", "d:\testZip.zip"
sub createZip(sfolder, tfolder)
dim fso, zipfile
dim shell, WshShell, destfolder, srcfolder
' create a blank zip compress file
set fso = CreateObject("Scripting.FileSystemObject")
set zipfile = fso.OpenTextFile(tfolder, 8, vbtrue)
zipfile.Write "PK" & Chr(5) & Chr(6) & string(18, 0)
zipfile.close
' copy you file into blank zip file
set shell = CreateObject("Shell.Application")
set WshShell = WScript.CreateObject("WScript.Shell")
set destfolder = shell.NameSpace(tfolder)
set srcfolder = shell.NameSpace(sfolder)
destfolder.CopyHere srcfolder.items, &H214
end sub
Zip "D:\test.xls", "D:\test.zip"
Sub Zip(ByVal mySourceDir, ByVal myZipFile)
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.GetExtensionName(myZipFile) <> "zip" Then
Exit Sub
ElseIf fso.FolderExists(mySourceDir) Then
FType = "Folder"
ElseIf fso.FileExists(mySourceDir) Then
FType = "File"
FileName = fso.GetFileName(mySourceDir)
FolderPath = Left(mySourceDir, Len(mySourceDir) - Len(FileName))
Else
Exit Sub
End If
Set f = fso.CreateTextFile(myZipFile, True)
f.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
f.Close
Set objShell = CreateObject("Shell.Application")
Select Case Ftype
Case "Folder"
Set objSource = objShell.NameSpace(mySourceDir)
Set objFolderItem = objSource.Items()
Case "File"
Set objSource = objShell.NameSpace(FolderPath)
Set objFolderItem = objSource.ParseName(FileName)
End Select
Set objTarget = objShell.NameSpace(myZipFile)
intOptions = 256
objTarget.CopyHere objFolderItem, intOptions
Do
WScript.Sleep 1000
Loop Until objTarget.Items.Count > 0
End Sub
Sub UnzipAFile()
'==================================
'==*****功能:文件解压***********====
'==*****作者:雪山飞狐***********====
'==*****QQ:335081548***********====
'==****QQ交流群:13877563*******====
'==================================
Dim ShellApp As Object
Dim TargetFile, ZipFolder
TargetFile = Application.GetOpenFilename _
(FileFilter:="Zip Files (*.zip), *.zip")
If TargetFile = False Then Exit Sub
ZipFolder = Application.DefaultFilePath & "\解压文件临时存放\"
On Error Resume Next
RmDir ZipFolder
MkDir ZipFolder
On Error GoTo 0
Set ShellApp = CreateObject("Shell.Application")
ShellApp.Namespace(ZipFolder).CopyHere ShellApp.Namespace(TargetFile).items
If MsgBox("文件解压到:" & vbNewLine & ZipFolder & vbNewLine & vbNewLine & "是否显示文件夹?", vbQuestion + vbYesNo) = vbYes Then
Shell "Explorer.exe /e," & ZipFolder, vbNormalFocus
End If
End Sub
