Nén File bằng VBA

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,440
Nghề nghiệp
Bác sĩ
Hỏi (Workman) : Tôi đã làm lệnh trong VBA để Save As một file ra xls. Tuy nhiên do file quá lớn, rất bất tiện trong việc lưu trữ và gửi email, tôi muốn nén lại (giống như winzip vậy đó). Tất nhiên có thể nén thủ công bằng Winzip hoặc Winrar, nhưng để VBA làm luôn thì tiện hơn. Bạn có cách nào không chỉ cho mình với.

Trả lời : (ThanhVo31)

Try this link http://www.rondebruin.nl/zip.htm
or here you are:
Zip Activeworkbook, File or Files with WinZip (VBA)
Ron de Bruin (last update 20 Juny 2004)
Go to the Excel tips page

Many thanks to Dave Peterson for his help to create this page.
The examples are only working If you use WinZip as your Zip program.
(Note: you must have a registered copy of WinZip)

Don't forget to copy the Functions in a normal module.
Check out also the Unzip web page if you need examples for unzip a zip file
Note : If you want to add a Password use this –sPassword then in the ShellStr.

Zip the ActiveWorkbook
Zip and Mail the ActiveWorkbook (with Outlook)
Choose one file with GetOpenFilename and zip it
Choose more files with GetOpenFilename and zip them
Functions


Zip the ActiveWorkbook


This example will zip the active workbook.
The zip file will be saved in the same folder.


PHP:
Sub Zip_ActiveWorkbook()
 Dim PathWinZip As String, FileNameZip As String, FileNameXls As String
 Dim ShellStr As String, strDate As String

 PathWinZip = "C:\program files\winzip\"
''This will check if this is the path where WinZip is installed.''
 If Dir(PathWinZip & "winzip32.exe") = "" Then
      MsgBox "Please find your copy of winzip32.exe and try again"
      Exit Sub
  End If

' Build the date/Time string'
  strDate = Format(Now, "dd-mm-yy h-mm-ss")

' Build the path and name for the zip file'
  FileNameZip = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, _
       Len(ActiveWorkbook.Name) - 4) & " " & strDate & ".zip"

' Build the path and name for the xls file'
  FileNameXls = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, _
       Len(ActiveWorkbook.Name) - 4) & " " & strDate & ".xls"

' Use SaveCopyAs to save the file with a Date/Time stamp'
  ActiveWorkbook.SaveCopyAs FileName:=FileNameXls

'Zip the file'
  ShellStr = PathWinZip & "Winzip32 -min -a" _
        & " " & Chr(34) & FileNameZip & Chr(34) _
        & " " & Chr(34) & FileNameXls & Chr(34)
  ShellAndWait ShellStr, vbHide

'Delete the file that you saved with SaveCopyAs'
  Kill FileNameXls

  MsgBox "The macro is ready"
End Sub


Zip and mail the ActiveWorkbook

This will only work if you use Outlook as your mail program

PHP:
Sub ActiveWorkbook_Zip_Mail()
'This sub will send a newly created workbook (copy of the Activeworkbook).'
'It zip and save the workbook before mailing it with a date/time stamp.'
'After the zip file is sent the zip file and the workbook will be deleted from your hard disk.'
 Dim PathWinZip As String, FileNameZip As String, FileNameXls As String
 Dim ShellStr As String, strDate As String
 Dim OutApp As Object:                            Dim OutMail As Object

 PathWinZip = "C:\program files\winzip\"
'This will check if this is the path where WinZip is installed.'
 If Dir(PathWinZip & "winzip32.exe") = "" Then
      MsgBox "Please find your copy of winzip32.exe and try again"
      Exit Sub
 End If

' Build the date/Time string'
 strDate = Format(Now, "dd-mm-yy h-mm-ss")

' Build the path and name for the zip file'
 FileNameZip = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, _
       Len(ActiveWorkbook.Name) - 4) & " " & strDate & ".zip"

' Build the path and name for the xls file'
 FileNameXls = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, _
       Len(ActiveWorkbook.Name) - 4) & " " & strDate & ".xls"

' Use SaveCopyAs to save the file with a Date/Time stamp'
 ActiveWorkbook.SaveCopyAs FileName:=FileNameXls

'Zip the file'
 ShellStr = PathWinZip & "Winzip32 -min -a" _
     & " " & Chr(34) & FileNameZip & Chr(34) _
     & " " & Chr(34) & FileNameXls & Chr(34)
  ShellAndWait ShellStr, vbHide

'Send the File'
 Set OutApp = CreateObject("Outlook.Application")
 Set OutMail = OutApp.CreateItem(0)
 With OutMail
      .To = "ron@debruin.nl":               .CC = ""
      .BCC = "":                                 .Subject = "ZipMailTest"
      .Body = "Here is the File":            .Attachments.Add FileNameZip
      .send
 End With
 Set OutMail = Nothing:                     Set OutApp = Nothing

'Delete the file that you saved with SaveCopyAs and the Zip file'
 Kill FileNameZip:                              Kill FileNameXls
End Sub



Choose one file with GetOpenFilename and zip it

This example use GetOpenFilename to select a file and zip it.
The zip file will be saved in the same folder.

PHP:
Sub Zip_Selected_File()
 Dim PathWinZip As String, FileNameZip As String, FileName As String
 Dim ShellStr As String, strDate As String, sFileNameXls As String
 Dim vArr As Variant, FileNameXls As Variant

 PathWinZip = "C:\program files\winzip\"
 If Dir(PathWinZip & "winzip32.exe") = "" Then
      MsgBox "Please find your copy of winzip32.exe and try again"
      Exit Sub
 End If
 strDate = Format(Now, " dd-mm-yy h-mm-ss")

 FileNameXls = Application.GetOpenFilename(filefilter:="Excel Files, *.xls")

 If FileNameXls = False Then
    'do nothing'
 Else
          vArr = Split97(FileNameXls, "\")
          sFileNameXls = vArr(UBound(vArr))

          If bIsBookOpen(sFileNameXls) Then
               MsgBox "You can't zip a file that is open!" & vbLf & _
                      "Please close : " & FileNameXls
               Exit Sub
          End If

          FileNameZip = Left(FileNameXls, Len(FileNameXls) - 4) & strDate & ".zip"
          ShellStr = PathWinZip & "Winzip32 -min -a" _
                & " " & Chr(34) & FileNameZip & Chr(34) _
                & " " & Chr(34) & FileNameXls & Chr(34)

          ShellAndWait ShellStr, vbHide
           MsgBox "The macro is ready"
      End If
End Sub

Choose more files with GetOpenFilename and zip them


This example use GetOpenFilename to select a file or files and zip it.
The zip file will be saved in C:\.
Hold the CTRL key when You select the files you want.

PHP:
Sub Zip_Selected_Files()
 Dim PathWinZip As String, FileNameZip As String, NameList As String
 Dim ShellStr As String, strDate As String, sFileNameXls As String
 Dim vArr As Variant, FileNameXls As Variant, iCtr As Long

 PathWinZip = "C:\program files\winzip\"
 If Dir(PathWinZip & "winzip32.exe") = "" Then
     MsgBox "Please find your copy of winzip32.exe and try again"
     Exit Sub
 End If

 FileNameXls = Application.GetOpenFilename(filefilter:="Excel Files, *.xls", _
       MultiSelect:=True)

 If IsArray(FileNameXls) = False Then
        'do nothing'
 Else
      NameList = ""
      For iCtr = LBound(FileNameXls) To UBound(FileNameXls)
            NameList = NameList & " " & Chr(34) & FileNameXls(iCtr) & Chr(34)
            vArr = Split97(FileNameXls(iCtr), "\")
            sFileNameXls = vArr(UBound(vArr))

            If bIsBookOpen(sFileNameXls) Then
                   MsgBox "You can't zip a file that is open!" & vbLf & _
                         "Please close: " & FileNameXls(iCtr)
                   Exit Sub
            End If
      Next iCtr

      strDate = Format(Now, " dd-mm-yy h-mm-ss")
      FileNameZip = "C:\MyFilesZip " & strDate & ".zip "
      ShellStr = PathWinZip & "Winzip32 -min -a " _
             & " " & Chr(34) & FileNameZip & Chr(34) _
             & " " & NameList
       ShellAndWait ShellStr, vbHide
       MsgBox "The macro is ready"
 End If
End Sub



Functions

The examples use shell to run the winzip32.exe file.
You need the ShellAndWait function to wait until it the zip code is finished and run your other code.
The last two examples on this page use also the functions bIsBookOpen and Split97.

Where do I copy the code/functions?

1. Alt-F11
2. Insert>Module from the Menu bar
3. Paste the Code below
4. Alt-Q to go back to Excel

Copy this code below in the module

You can use a separate module for the macro examples.

Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, _
lpExitCode As Long) As Long

Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STILL_ACTIVE = &H103



Public Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
Dim hProg As Long
Dim hProcess As Long, ExitCode As Long
'fill in the missing parameter and execute the program
If IsMissing(WindowState) Then WindowState = 1
hProg = Shell(PathName, WindowState)
'hProg is a "process ID under Win32. To get the process handle:
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
Do
'populate Exitcode variable
GetExitCodeProcess hProcess, ExitCode
DoEvents
Loop While ExitCode = STILL_ACTIVE
End Sub


Function bIsBookOpen(ByRef szBookName As String) As Boolean
' Rob Bovey
On Error Resume Next
bIsBookOpen = Not (Application.Workbooks(szBookName) Is Nothing)
End Function


Function Split97(sStr As Variant, sdelim As String) As Variant
'Tom Ogilvy
Split97 = Evaluate("{""" & _
Application.Substitute(sStr, sdelim, """,""") & """}")
End Function

Lưu ý ở đây là các hàm dưới đáy phải chuyển qua 1 module khác
Từ đoạn nay nhé:
Declare Function OpenProcess Lib "kernel32"...
Hơn nữa bạn phải nắm được cú pháp của command line winzip hay winrar thì nén hay giải nén hay làm sao nén cũng được

Tôi đã chạy thử sub nén activeworkbook chạy tốt!
 
Zip và Unzip

Đề tài Zip và Unzip chắc chúng ta cũng đã thảo luận rồi. Tôi xin giới thiệu các bạn một ví dụ tại trang CodeGuru về Zip và Unzip.

http://www.codeguru.com/vb/gen/vb_gr...hp/c6743/#more

Ngòai ra còn một số OpenSource về vấn đề này tại
http://www.7-zip.org/

Như vậy nếu trong một ứng dụng tôi có thể dùng hai class module để nhằm thao tác Zip và Unzip tôi đưa đường dẫn đầu
Để zip thì các bạn có thể dùng đọan code sau trong thủ tục của bạn:
-------
Dim oZip as CGZipFiles
set oZip = new CGZipFiles
oZip.ZipFileName = "\MyZip.Zip"
oZip.AddFile "c:\mystuff\myfiles\*.*"
oZip.AddFile "c:\mystuff\mymedia\*.wav"
If oZip.MakeZipFile <> 0 then
MsgBox oZip.GetLastMessage
End If
set oZip = nothing
-------
Và để Unzip các bạn dùng đọan code sau trong thủ tục của mình:
-------
Dim oUnZip as CGUnZipFiles
set oUnZip = new CGUnZipFiles
oUnZip.ZipFileName = "\MyZip.Zip"
oUnZip.ExtractDir = App.Path ' or whatever you like !
oUnZip.HonourDirectories = true ' keep dir structure
If oUnZip.UnZip <> 0 then
MsgBox oUnZip.GetLastMessage
End If
set oUnZip = nothing
--------

Chú ý để dùng hai đọan code trên bạn phải import hai class module CGUnzipFiles và CGZipFiles trong Workbook của bạn.
Vậy đấy. Bạn hãy tha hồ mà làm nhé.

Chúc các bạn thành công.

Thân,

Lê Văn Duyệt
 
Upvote 0
Nhờ xem giúp lỗi ZipFile !

Chào bác HanDung107!
Em dùng đoạn Code " Sub Zip_ActiveWorkbook()" của bác ở trển (cả với máy cài WinZip hoặc WinRar), thì bị lỗi ở dòng:
..........
ShellAndWait
ShellStr, vbHide
...........
Em gửi file (.Xls và Err.doc) đính kèm nhờ các bác xem và giúp đỡ nhé!
Cám ơn các bác!
LTMCustoms!
 

File đính kèm

Upvote 0
Ái da... e rằng ko phải ai mang code này về chạy cũng ổn đâu nha! Tôi để ý trong code có đoạn: C:\program files\winzip như vậy thì ko mang tính tỗng quát rồi... Giả sử như trên máy tôi ko cài WinZIP hay WinRAR vào ổ C:\ thì sao nào?...
Xin hướng dẩn chi tiết thêm... Và liệu có cách nào tổng quát nhất cho mọi trường hợp ko? (chẳng hạn chương trình cài đặt nằm ở ổ đỉa nào cũng chạy dc)
ANH TUẤN
 
Upvote 0
Tôi để ý thấy khi vào hộp thoại Run và gõ WinRAR.exe hoặc winzip32.exe thì Win tự mở trình nén này ra. Trong đoạn code nói trên có thể thay đường dẫn C:\program files\winzip bằng cách gọi hộp thoại Run và nhận giá trị "WinRAR.exe" hoặc "winzip32.exe" rồi OK??? Không biết có làm như vậy được không anh Tuấn ơi!!
 
Upvote 0
Thường những chương trình nằm trong thư mục C:\Windows hay C:\WinNT (đối với Win2000) đều có thể gọi bằng câu lệnh sau: %Windir%\đương dẩn tới file...
Cho dù Windows dc cài đặt trên trên đĩa nào và thư mục chứa OS là Windows hay WinNT gì cũng mặc kệ, nó hiểu tuốt vì đã dc định nghĩa trong Environment Variables... Còn Program Files Dir thì.. tôi chẳng biết gọi nó như thế nào cho tổng quát...
Nếu là tôi thì trước tiên tôi sẽ đăng ký Program Files trước: Right click trên My Computer, chọn Propreties.. trong tab Advanced click chọn Environment Variables.. trong mục System Variable, click chọn New.. rồi gõ vào khung Variables Name là: Program (chẳng hạn).. gõ vào mục Variables Value: C:\Program Files
Từ đây về sau, chỉ cần gõ %Program%\ là nó hiểu đây chính là thư mục cài đặt chương trình...
Tuy vậy, đây cũng ko phải là 1 pp tổng quát nhất, vì cũng có khi thư mục cài đặt là C:\Program Files theo mặc định, nhưng người dùng vẫn có thể tùy biến khi setup mà... Tôi cắc cớ lại thích cài WinRAR vào thư mục E:\WinRAR thì sao nào?
ANH TUẤN
 
Lần chỉnh sửa cuối:
Upvote 0
anhtuan1066 đã viết:
Ái da... e rằng ko phải ai mang code này về chạy cũng ổn đâu nha! Tôi để ý trong code có đoạn: C:\program files\winzip như vậy thì ko mang tính tỗng quát rồi... Giả sử như trên máy tôi ko cài WinZIP hay WinRAR vào ổ C:\ thì sao nào?...
Xin hướng dẩn chi tiết thêm... Và liệu có cách nào tổng quát nhất cho mọi trường hợp ko? (chẳng hạn chương trình cài đặt nằm ở ổ đỉa nào cũng chạy dc)
ANH TUẤN

Tổng quát thì khó nhỉ ?? VD như em lại dùng Portable, không cố định ở 1 thư mục nào, vậy gọi nó làm sao nhỉ ???

Vì vậy có lẽ tích hợp luôn nó (rar portable or zip portable) vào thư mục của file excel luôn. Gọi ra cũng dễ.--=0

Thân!
 
Upvote 0
anhtuan1066 đã viết:
như vậy thì ko mang tính tỗng quát rồi... Giả sử như trên máy tôi ko cài WinZIP hay WinRAR vào ổ C:\ thì sao nào?...
ANH TUẤN

Trước hết, đọan code này không thể mang tính tổng quát. Quan trọng nhất ở đây là hàm ShellAndWait(ByVal PathName As String, Optional WindowState)

Hàm này rất lợi hại, nghĩa là qua nó có thể khai thác các CT hỗ trợ bất kỳ ( chứ không chỉ có nén, giải nén đâu) command line tool. (Hic, nhớ lại hàm Sendkey mà rớt nước mắt :.,)

Còn lại thì cần phải biết chính xác CT nén của mình là gì, cú pháp của nó ra sao, hì, đường dẫn thì khai 1 hằng CONST ở đầu là sửa dễ dàng mà, chắc dễ hơn nhiều so với học cú pháp chứ!

Tôi cắc cớ lại thích cài WinRAR vào thư mục E:\WinRAR thì sao nào?

Bác thử coi tại sao ShellandWait("calc.exe") chạy tốt đấy. Chắc anh này bà con của MS, có hộ khẩu, địa chỉ sẵn trong PATH rồi nên chạy ngay! Hay mình cũng "chạy" một cái hộ khẩu cho ct của bác trong PATH xem?

Phải không ạ?/-*+/ /-*+/ /-*+/
 
Upvote 0
Chào các bác !
Em đang cần cái Code Sub Rar_ActiveWorkbook()" ở trển với máy Client cài WinXP, ổ C:\Program Files\WinRAR ! Em đã mò mẫm mãi với các gợi ý của các bác rồi mà chưa được! hu hu... vẫn lỗi ở đoạn:

ShellAndWait ShellStr, vbHide

Các bác xem giúp file em gởi ở trên, tháo gỡ giùp! em chắc lại bó tay thui !hi hi

Nhân đây, nếu thêm được "If you want to add a Password use this –sPassword then in the ShellStr'' nữa thì tốt quá!

Cám ơn các bác đã chỉ giáo!
LTMCustoms!
 
Upvote 0
ltmcustoms đã viết:
Chào các bác !
Em đang cần cái Code Sub Rar_ActiveWorkbook()" ở trển với máy Client cài WinXP, ổ C:\Program Files\WinRAR ! Em đã mò mẫm mãi với các gợi ý của các bác rồi mà chưa được! hu hu... vẫn lỗi ở đoạn:

ShellAndWait ShellStr, vbHide

Các bác xem giúp file em gởi ở trên, tháo gỡ giùp! em chắc lại bó tay thui !hi hi

Nhân đây, nếu thêm được "If you want to add a Password use this –sPassword then in the ShellStr'' nữa thì tốt quá!

Cám ơn các bác đã chỉ giáo!
LTMCustoms!

Bạn ơi,không chỉ có có thuốc chữa bệnh đâu, cái gì cũng nên ĐỌC KỸ HƯỚNG DẪN SỬ DỤNG TRƯỚC KHI DÙNG , bạn nhé.

Trong file bạn gửi có 1 lỗi nghiêm trọng sau đây: không thấy có modul chứa ShellAndWait, vì vậy nó báo lỗi Sub or Function...!

Copy đọan code sau vào 1 modul khac
Mã:
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, _
lpExitCode As Long) As Long

Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STILL_ACTIVE = &H103



Public Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
Dim hProg As Long
Dim hProcess As Long, ExitCode As Long
'fill in the missing parameter and execute the program
If IsMissing(WindowState) Then WindowState = 1
hProg = Shell(PathName, WindowState)
'hProg is a "process ID under Win32. To get the process handle:
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
Do
'populate Exitcode variable
GetExitCodeProcess hProcess, ExitCode
DoEvents
Loop While ExitCode = STILL_ACTIVE
End Sub


Function bIsBookOpen(ByRef szBookName As String) As Boolean
' Rob Bovey
On Error Resume Next
bIsBookOpen = Not (Application.Workbooks(szBookName) Is Nothing)
End Function


Function Split97(sStr As Variant, sdelim As String) As Variant
'Tom Ogilvy
Split97 = Evaluate("{""" & _
Application.Substitute(sStr, sdelim, """,""") & """}")
End Function

Thứ hai

Mã:
ShellStr = PathWinRar & "WinRAR -min -a" _
& " " & Chr(34) & FileNameRar & Chr(34) _
& " " & Chr(34) & FileNameXls & Chr(34)

-min -a không có ý nghĩa trong WinRAR.

sửa lại

Mã:
ShellStr = PathWinRar & "WinRAR a" _
& " " & Chr(34) & FileNameRar & Chr(34) _
& " " & Chr(34) & FileNameXls & Chr(34)

Là chạy tốt.

Nếu gài mật khẩu là : "xinchao" thì

Mã:
ShellStr = PathWinRar & "WinRAR a [COLOR="Red"]-p[/COLOR][COLOR="Magenta"]xinchao[/COLOR]" _
& " " & Chr(34) & FileNameRar & Chr(34) _
& " " & Chr(34) & FileNameXls & Chr(34)

Xin đọc kỹ WinRAR HELP để khai thác các lệnh của nó


ĐÍNH kèm là file của bạn đã sửa lại và chạy tốt

Chúc bạn thành công.
 

File đính kèm

Upvote 0
Cám ơn bác đã chỉ bảo chi tiết! Hi hi
LTMCustoms.
 
Upvote 0
Bạn ơi,không chỉ có có thuốc chữa bệnh đâu, cái gì cũng nên ĐỌC KỸ HƯỚNG DẪN SỬ DỤNG TRƯỚC KHI DÙNG , bạn nhé.

Trong file bạn gửi có 1 lỗi nghiêm trọng sau đây: không thấy có modul chứa ShellAndWait, vì vậy nó báo lỗi Sub or Function...!

Copy đọan code sau vào 1 modul khac
Mã:
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
 
Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, _
lpExitCode As Long) As Long
 
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STILL_ACTIVE = &H103
 
 
 
Public Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
Dim hProg As Long
Dim hProcess As Long, ExitCode As Long
'fill in the missing parameter and execute the program
If IsMissing(WindowState) Then WindowState = 1
hProg = Shell(PathName, WindowState)
'hProg is a "process ID under Win32. To get the process handle:
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
Do
'populate Exitcode variable
GetExitCodeProcess hProcess, ExitCode
DoEvents
Loop While ExitCode = STILL_ACTIVE
End Sub
 
 
Function bIsBookOpen(ByRef szBookName As String) As Boolean
' Rob Bovey
On Error Resume Next
bIsBookOpen = Not (Application.Workbooks(szBookName) Is Nothing)
End Function
 
 
Function Split97(sStr As Variant, sdelim As String) As Variant
'Tom Ogilvy
Split97 = Evaluate("{""" & _
Application.Substitute(sStr, sdelim, """,""") & """}")
End Function

Thứ hai

Mã:
ShellStr = PathWinRar & "WinRAR -min -a" _
& " " & Chr(34) & FileNameRar & Chr(34) _
& " " & Chr(34) & FileNameXls & Chr(34)

-min -a không có ý nghĩa trong WinRAR.

sửa lại

Mã:
ShellStr = PathWinRar & "WinRAR a" _
& " " & Chr(34) & FileNameRar & Chr(34) _
& " " & Chr(34) & FileNameXls & Chr(34)

Là chạy tốt.

Nếu gài mật khẩu là : "xinchao" thì

Mã:
ShellStr = PathWinRar & "WinRAR a [COLOR=red]-p[/COLOR][COLOR=magenta]xinchao[/COLOR]" _
& " " & Chr(34) & FileNameRar & Chr(34) _
& " " & Chr(34) & FileNameXls & Chr(34)

Xin đọc kỹ WinRAR HELP để khai thác các lệnh của nó


ĐÍNH kèm là file của bạn đã sửa lại và chạy tốt

Chúc bạn thành công.

đọc kỹ rồi cũng không biết cách nén ra sao , không biết làm thế nào để nén trong excel đó chỉ rõ hơn đi bạn."botay.com"
 
Upvote 0
đọc kỹ rồi cũng không biết cách nén ra sao , không biết làm thế nào để nén trong excel đó chỉ rõ hơn đi bạn."botay.com"

Trước hết, bạn cần biết cách sử dụng thuần thục Winrar hay Zip bằng giao diện (nén, giải nén, thêm file, xóa bớt), sau đó bạn học cách sử dụng các lệnh này bằng command line tool (giao diện dòng lệnh).

Sau đấy là chép modul hàm
ShellAndWait

Sử dụng gọi hàm này để chạy dòng lệnh thực hiện việc nén/giải nén file từ VBA.

Bạn tải file ví dụ đính kèm rồi nhấn F8 xem nó chạy từng dòng xem. Chắc chắn thành công.
 
Upvote 0
Vậy là WinRAR vẫn phải cài lên máy hả mấy bác? Thế mà tưởng rằng code có thể chạy như phần mềm WinRAR mà không cần WinRAR nữa chứ! Tiết thật.
 
Lần chỉnh sửa cuối:
Upvote 0
vâng chính xác tiêu đề là Zip Activeworkbook, File or Files with WinZip (mở rộng với winRar) bằng (VBA)
 
Upvote 0
Trước hết, bạn cần biết cách sử dụng thuần thục Winrar hay Zip bằng giao diện (nén, giải nén, thêm file, xóa bớt), sau đó bạn học cách sử dụng các lệnh này bằng command line tool (giao diện dòng lệnh).

Sau đấy là chép modul hàm ShellAndWait

Sử dụng gọi hàm này để chạy dòng lệnh thực hiện việc nén/giải nén file từ VBA.

Bạn tải file ví dụ đính kèm rồi nhấn F8 xem nó chạy từng dòng xem. Chắc chắn thành công.

em làm thành công rồi có phải chọn alt+F8 mới chạy không biết sao nữa chắc máy ẹm lỗi gì nhỉ!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom