他山之石——VBA压缩文件和解压缩 (Compression/Decompression with VBA)

文件压缩和解压缩,目前在实际工作中用的不多,先留着吧,需要时再来看看。

'获得rar的安装路径
Function GetSetupPath(AppName As String)
    Dim WSH As Object
    Set WSH = CreateObject("Wscript.Shell")
    GetSetupPath = WSH.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\" & AppName & "\Path")
    Set WSH = Nothing
End Function
Sub 测试()
Debug.Print GetSetupPath("Winrar.exe")
Debug.Print GetSetupPath("Excel.exe")
End Sub


'Shell函数
  'Shell执行一个可执行文件.返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
  '语法
   'Shell("可执行程序的路径 文件名或命令行",窗口的显示方式)

  Sub 用绘图程序打开图片()
  Dim mysh
     mysh = Shell("mspaint.exe " & ThisWorkbook.path & "\pic.jpg", vbMaximizedFocus)
  End Sub
  
  'WinRar命令的命令行表示方法
  
   ' WinRar程序路径  命令 开关1 开关2 开关3..开关N  压缩包路径 压缩的文件路径
      '命令是指要进行怎么样的操作,如A是压缩,X是解压缩
      '开关是具体操作时的细节,如压缩是是否把原文件删除,是否添加密码等
      
Sub RarFile()   '压缩单个文件
  Dim Rarexe As String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
    myRAR = ThisWorkbook.path & "\B.rar"  '压缩后的文件名
    Myfile = ThisWorkbook.path & "\B\"     ' 指定要压缩的文件
    FileString = Rarexe & " A -p123 " & myRAR & " " & Myfile
    Result = Shell(FileString, vbHide) '执行压缩
End Sub

Sub RarFile10()   '多个文件压在一起,并添加密码,看不到文件列表
  Dim Rarexe As String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "C:\program files\winrar\winrar.exe" 'rar程序路径
    myRAR = ThisWorkbook.path & "\B.rar"  '压缩后的文件名
    Myfile = ThisWorkbook.path & "\B\"     ' 指定要压缩的文件
    FileString = Rarexe & " A -hp123 " & myRAR & " " & Myfile
    Result = Shell(FileString, vbHide) '执行压缩
End Sub

'df压缩后删除原文件
'dr压缩后删除原文件到回收站

Sub RarFile2()   '多个文件压在一起,删除原文件
  Dim Rarexe As String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 Sub

Sub RarFile3()   '多个文件压在一起,删除原文件到回收站
  Dim Rarexe As String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 Sub


Sub RarFile2()   '多个文件压在一起,排除某个文件
  Dim Rarexe As String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
  Dim p As String, f As String
   p = 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 = Dir
  Loop
End Sub

'D可以删除指定的文件
'WinRAR d 文件夹 可以带通配符的文件名或同类文件

Sub RarFile3()   '
  Dim Rarexe As String
  Dim myRAR As String
  Dim Myfile As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 Sub


Sub RarFile2()   '解压缩
  Dim Rarexe As String
  Dim myRAR As String
  Dim Mypath As String
  Dim FileString As String
  Dim Result As Long
    Rarexe = "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 解压含密码的压缩包

VB Decompiler Pro Visual Basic能编译程序为p-code或native code形式的EXE, DLL或OCX文件. VB Decompiler Pro 能反编译Visual Basic 5.0/6.0的p-code形式的EXE, DLL 或 OCX文件。 对native code形式的EXE, DLL或OCX文件,VB Decompiler Pro 也能给出反编译线索。 如果一个程序被编译成native code, 从机器码恢复源代码是几乎不可能的. 但即便是这种情形下VB Decompiler还是可以帮助你分析程序. VB Decompiler包含了一个强大的支持包含MMX和SSE的Pentium Pro指令集的反编译器. 它还包含一个代码分析器, 用于搜索所有API调用,汇编代码中的字符串引用并将结果修改为相应的注释. 标准版及专业版VB Decompiler的功能介绍LitePro通用脱壳(支持UPX, NSPack以及一些其他常见的可执行文件压缩壳)反编译窗体(frm和frx)以及用户控制(ctl)对象文件完整的伪代码p-code反编译(解析操作码并转换为标准vb指令,反编译GUID对象)两种伪代码反编译模式(包含堆栈解析或不包含堆栈解析)反汇编native code过程(使用强大的Pentium Pro反汇编器,支持MMX及FPU指令集)反汇编native code过程中的字符串引用以及API调用(使用强大的Pentium Pro反汇编器,支持MMX及FPU指令集)部分反编译native code(使用代码仿真引擎)在反编译的代码中根据语法显示不同的颜色字符串引用列表以及搜索引擎快速反编译VB5/6程序的混淆工具VB5/6程序的修补工具将反编译的数据保存入单个DB文件反编译.Net程序将所有的过程列表保存入map文件, IDC脚本或是HIEW的Names文件价格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值