主体参考很多vbs、VB方面的程序。目前以下还未进行测试

方法一:调用shell

  1. '获得rar的安装路径
  2. Function GetSetupPath(AppName As String)
  3. Dim WSH As Object
  4. Set WSH = CreateObject("Wscript.Shell")
  5. GetSetupPath = WSH.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\" & AppName & "\Path")
  6. Set WSH = Nothing
  7. End Function
  8. Sub 测试()
  9. Debug.Print GetSetupPath("Winrar.exe")
  10. Debug.Print GetSetupPath("Excel.exe")
  11. End Sub
  12. 'Shell函数
  13. 'Shell执行一个可执行文件.返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
  14. '语法
  15. 'Shell("可执行程序的路径 文件名或命令行",窗口的显示方式)
  16. Sub 用绘图程序打开图片()
  17. Dim mysh
  18. mysh = Shell("mspaint.exe " & ThisWorkbook.path & "\pic.jpg", vbMaximizedFocus)
  19. End Sub
  20. 'WinRar命令的命令行表示方法
  21. ' WinRar程序路径 命令 开关1 开关2 开关3..开关N 压缩包路径 压缩的文件路径
  22. '命令是指要进行怎么样的操作,如A是压缩,X是解压缩
  23. '开关是具体操作时的细节,如压缩是是否把原文件删除,是否添加密码等
  24. Sub RarFile() '压缩单个文件
  25. Dim Rarexe As String
  26. Dim myRAR As String
  27. Dim Myfile As String
  28. Dim FileString As String
  29. Dim Result As Long
  30. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  31. myRAR = ThisWorkbook.path & "\A.rar" '压缩后的文件名
  32. Myfile = ThisWorkbook.path & "\B*.xls" ' 指定要压缩的文件
  33. FileString = Rarexe & " A " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串
  34. Result = Shell(FileString, vbHide) '执行压缩
  35. End Sub
  36. '如果文件名使用通配符,可以对同类的文件进行和压缩,
  37. '如果只有路径没有文件名,则会把这个文件夹进行压缩
  38. Sub RarFile2() '多个文件压在一起
  39. Dim Rarexe As String
  40. Dim myRAR As String
  41. Dim Myfile As String
  42. Dim FileString As String
  43. Dim Result As Long
  44. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  45. myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名
  46. ' Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件类型
  47. Myfile = ThisWorkbook.path & "\B\" ' 指定要压缩的文件夹路径
  48. FileString = Rarexe & " A " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串
  49. Result = Shell(FileString, vbHide) '执行压缩
  50. End Sub
  51. '-ep压缩时忽略路径,如果没有则会带上
  52. '-ep1压缩时忽略基准路径
  53. Sub RarFile2() '多个文件压在一起
  54. Dim Rarexe As String
  55. Dim myRAR As String
  56. Dim Myfile As String
  57. Dim FileString As String
  58. Dim Result As Long
  59. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  60. myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名
  61. Myfile = ThisWorkbook.path & "\B" ' 指定要压缩的文件
  62. FileString = Rarexe & " A -ep1 " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串
  63. Result = Shell(FileString, vbHide) '执行压缩
  64. End Sub
  65. '-p+密码 加密码后可以看到文件列表
  66. '-hp+密码 加密码后无法看到文件列表
  67. Sub RarFile9() '多个文件压在一起,并添加密码,可以看到文件列表
  68. Dim Rarexe As String
  69. Dim myRAR As String
  70. Dim Myfile As String
  71. Dim FileString As String
  72. Dim Result As Long
  73. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  74. myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名
  75. Myfile = ThisWorkbook.path & "\B\" ' 指定要压缩的文件
  76. FileString = Rarexe & " A -p123 " & myRAR & " " & Myfile
  77. Result = Shell(FileString, vbHide) '执行压缩
  78. End Sub
  79. Sub RarFile10() '多个文件压在一起,并添加密码,看不到文件列表
  80. Dim Rarexe As String
  81. Dim myRAR As String
  82. Dim Myfile As String
  83. Dim FileString As String
  84. Dim Result As Long
  85. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  86. myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名
  87. Myfile = ThisWorkbook.path & "\B\" ' 指定要压缩的文件
  88. FileString = Rarexe & " A -hp123 " & myRAR & " " & Myfile
  89. Result = Shell(FileString, vbHide) '执行压缩
  90. End Sub
  91. 'df压缩后删除原文件
  92. 'dr压缩后删除原文件到回收站
  93. Sub RarFile2() '多个文件压在一起,删除原文件
  94. Dim Rarexe As String
  95. Dim myRAR As String
  96. Dim Myfile As String
  97. Dim FileString As String
  98. Dim Result As Long
  99. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  100. myRAR = ThisWorkbook.path & "\B\B.rar" '压缩后的文件名
  101. Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件
  102. FileString = Rarexe & " A -df -p123 -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串
  103. Result = Shell(FileString, vbHide) '执行压缩
  104. End Sub
  105. Sub RarFile3() '多个文件压在一起,删除原文件到回收站
  106. Dim Rarexe As String
  107. Dim myRAR As String
  108. Dim Myfile As String
  109. Dim FileString As String
  110. Dim Result As Long
  111. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  112. myRAR = ThisWorkbook.path & "\B\B.rar" '压缩后的文件名
  113. Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件
  114. FileString = Rarexe & " A -dr -p123 -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串
  115. Result = Shell(FileString, vbHide) '执行压缩
  116. End Sub
  117. Sub RarFile2() '多个文件压在一起,排除某个文件
  118. Dim Rarexe As String
  119. Dim myRAR As String
  120. Dim Myfile As String
  121. Dim FileString As String
  122. Dim Result As Long
  123. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  124. myRAR = ThisWorkbook.path & "\B.rar" '压缩后的文件名
  125. Myfile = ThisWorkbook.path & "\B\*.xls" ' 指定要压缩的文件
  126. FileString = Rarexe & " A -x" & ThisWorkbook.path & "\B\dr.xls -x" & ThisWorkbook.path & "\B\1.xls -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串
  127. Result = Shell(FileString, vbHide) '执行压缩
  128. End Sub
  129. '借助dirdo循环,压缩指定文件夹中的所有文件
  130. Sub RarFile4() '每个文件单独压缩
  131. Dim Rarexe As String
  132. Dim myRAR As String
  133. Dim Myfile As String
  134. Dim FileString As String
  135. Dim Result As Long
  136. Dim p As String, f As String
  137. p = ThisWorkbook.path & "\B\"
  138. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  139. f = Dir(p & "*.xls")
  140. Do While f <> ""
  141. f = Split(f, ".")(0)
  142. Myfile = ThisWorkbook.path & "\B\" & f & ".xls" ' 指定要压缩的文件
  143. myRAR = ThisWorkbook.path & "\B\" & f & ".rar" '压缩后的文件名
  144. FileString = Rarexe & " A -ep " & myRAR & " " & Myfile 'rar程序的A命令压缩文件的字符串
  145. Result = Shell(FileString, vbHide) '执行压缩
  146. f = Dir
  147. Loop
  148. End Sub
  149. 'D可以删除指定的文件
  150. 'WinRAR d 文件夹 可以带通配符的文件名或同类文件
  151. Sub RarFile3() '
  152. Dim Rarexe As String
  153. Dim myRAR As String
  154. Dim Myfile As String
  155. Dim FileString As String
  156. Dim Result As Long
  157. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  158. myRAR = ThisWorkbook.path & "\B\B.rar" '在删除的压缩包名称
  159. Myfile = ThisWorkbook.path & "\B\说明.txt" ' 指定要删除的文件
  160. FileString = Rarexe & " D " & myRAR & " " & "说明.txt" 'rar程序的A命令压缩文件的字符串
  161. Result = Shell(FileString, vbHide) '执行程序
  162. End Sub
  163. Sub RarFile2() '解压缩
  164. Dim Rarexe As String
  165. Dim myRAR As String
  166. Dim Mypath As String
  167. Dim FileString As String
  168. Dim Result As Long
  169. Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
  170. myRAR = ThisWorkbook.path & "\B\B.rar" '压缩后的文件名
  171. Mypath = ThisWorkbook.path & "\B\" ' 指定要压缩的文件
  172. FileString = Rarexe & " x -ep -hp123 " & myRAR & " " & Mypath 'rar程序的A命令压缩文件的字符串
  173. Result = Shell(FileString, vbHide) '执行压缩
  174. End Sub
  175. 'x 表示解压缩
  176. '-ep解压到当前文件夹下
  177. '-hp123 解压含密码的压缩包
  178. ————————————————
  179. 版权声明:本文为CSDN博主「预见未来to50」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
  180. 原文链接: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