Không hiển thị thư mục sau khi Unzip file bằng dòng lệnh Windows

Liên hệ QC

ppc0312

whom?
Tham gia
2/4/08
Bài viết
623
Được thích
318
Mình đang tìm hiểu về cách Unzip file bằng VBA.
Tuy nhiên, mỗi lần mình Unzip file xong thì cửa sổ chứa file vừa unzip thì nó tự mở lên.
Dưới đây là đoạn code của nó.
Mong mọi người hướng dẫn cách không cho nó tự mở thư mục đó.
Sub UnZipFile(FileName As String)
Dim CmdLine As String
Dim Ext As Long
Dim FilePath As String
Dim RetVal As Long
Dim Path As Long
Dim ZipName As String
Dim FolderPath As String
Path = InStrRev(FileName, "")
FilePath = "C:\MyDownloads"
FolderPath = "C:\MyDownloads"
If Dir(FilePath & FileName) = "" Then
MsgBox "File Not Found" & vbCrLf & " " & FilePath & FileName
Exit Sub
End If
Ext = InStrRev(FileName, ".")
ZipName = FilePath & IIf(Ext = 0, FileName & ".zip", Left(FileName, Ext) & "zip")

If ZipName <> "" Then
CmdLine = "-min -e " & " " & Chr$(34) & ZipName & Chr$(34) & " " _
& FolderPath
RetVal = ShellExecute(0&, "", "WinZip32.exe", CmdLine, FilePath, 1&)
Msg = "Thanh Cong " & RetVal
MsgBox Msg, vbExclamation + vbOKOnly
End If

End Sub
 
Mình đang tìm hiểu về cách Unzip file bằng VBA.
Tuy nhiên, mỗi lần mình Unzip file xong thì cửa sổ chứa file vừa unzip thì nó tự mở lên.
Dưới đây là đoạn code của nó.
Mong mọi người hướng dẫn cách không cho nó tự mở thư mục đó.

Bạn cũng nên đưa "bộ đồ chơi" (file chứa code + file cần unzip) lên đây để người ta còn thử nghiệm nữa chứ
 
Upvote 0
Cảm ơn bạn đã giúp đỡ.
Mình đã tải lên, bạn xem giúp mình nhé.

Đáng tiếc, thử nghiệm trên máy tôi chẳng có kết quả gì cả
Thậm chỉ, gõ vào cửa số Command Prompt dòng lệnh:
Mã:
-min -e  "D:\MyDownloads\Unzip.zip" D:\MyDownloads
Báo lỗi ngay lập tức! Nó không hiểu lệnh -min nghĩa là gì cả
 
Upvote 0
Mã:
-min -e  "D:\MyDownloads\Unzip.zip" D:\MyDownloads
Cái này không phải lệnh mà là thông số cho winzip chứ.

Mình đang tìm hiểu về cách Unzip file bằng VBA. Tuy nhiên, mỗi lần mình Unzip file xong thì cửa sổ chứa file vừa unzip thì nó tự mở lên.
Tôi nghĩ là winzip tích hợp luôn việc mở folder chứa kết quả. Tôi xem qua tham số của winzip không có tham số nào bỏ qua việc mở folder kết quả. Thông số "-min" chỉ là ẩn form thể hiện tiến trình giải nén thôi. Bạn có thể tìm cách đóng cái folder kết quả đó lại. Cái này tôi không biết, nhưng chắc chắn bạn tham khảo các bài trên GPE là có.
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
-min -e  "D:\MyDownloads\Unzip.zip" D:\MyDownloads
Cái này không phải lệnh mà là thông số cho winzip chứ.

Tôi nghĩ là winzip tích hợp luôn việc mở folder chứa kết quả. Tôi xem qua tham số của winzip không có tham số nào bỏ qua việc mở folder kết quả. Thông số "-min" chỉ là ẩn form thể hiện tiến trình giải nén thôi. Bạn có thể tìm cách đóng cái folder kết quả đó lại. Cái này tôi không biết, nhưng chắc chắn bạn tham khảo các bài trên GPE là có.

Mình cũng đã nghĩ giống bạn, chắc là do winzip nó mở, nhưng vẫn không có cách nào để tắt cái folder do nó mở ra. Mình đã thử dùng đoạn code để đóng folder đó lại. Nhưng khi chạy thì lệnh đã chạy hết thì cái folder đó nó mỡi mở ra. Thành ra nó cũng không có tác dụng. Hi vọng được mọi người giúp đỡ.
 
Upvote 0
Mình cũng đã nghĩ giống bạn, chắc là do winzip nó mở, nhưng vẫn không có cách nào để tắt cái folder do nó mở ra. Mình đã thử dùng đoạn code để đóng folder đó lại. Nhưng khi chạy thì lệnh đã chạy hết thì cái folder đó nó mỡi mở ra. Thành ra nó cũng không có tác dụng. Hi vọng được mọi người giúp đỡ.

Tôi không dùng WinZip, chỉ dùng cái có sẵn trong VBA:
Mã:
Private Sub UnzipFile(ByVal ZipFilePath, Optional ByVal TargetFolder)
  Dim fso As Object, oShl As Object, FolderItems
  'On Error Resume Next
  Set fso = CreateObject("Scripting.FileSystemObject")
  If Not fso.FileExists(ZipFilePath) Then
    MsgBox "File Not Found!"
    Exit Sub
  End If
  If IsMissing(TargetFolder) Then
    TargetFolder = fso.GetFile(ZipFilePath).ParentFolder.Path
  ElseIf Not fso.FolderExists(TargetFolder) Then
    fso.CreateFolder TargetFolder
  End If
  If Right(TargetFolder, 1) <> "\" Then TargetFolder = TargetFolder & "\"
  Set oShl = CreateObject("Shell.Application")
  Set FolderItems = oShl.Namespace(ZipFilePath).Items
  oShl.Namespace(TargetFolder).CopyHere FolderItems
  MsgBox "Done!"
  Set fso = Nothing: Set oShl = Nothing
End Sub
Sub Main()
  Dim zipFile As String, TargetFolder As String
  [COLOR=#ff0000]TargetFolder = ThisWorkbook.Path[/COLOR]
  [COLOR=#ff0000]zipFile = TargetFolder & "\Unzip.zip"[/COLOR]
  UnzipFile zipFile, TargetFolder
End Sub
Chỗ màu đỏ là:
- Khai báo thư mục chứa file sau khi giải nén
- Khai báo đường dẫn của file zip
- Nếu giải nén ra cùng thư mục thì chỉ cần UnzipFile zipFile là đủ (bỏ qua đối số TargetFolder)
 

File đính kèm

  • UnzipFile.rar
    12.8 KB · Đọc: 2
Upvote 0
Tôi không dùng WinZip, chỉ dùng cái có sẵn trong VBA:
Mã:
Private Sub UnzipFile(ByVal ZipFilePath, Optional ByVal TargetFolder)
  Dim fso As Object, oShl As Object, FolderItems
  'On Error Resume Next
  Set fso = CreateObject("Scripting.FileSystemObject")
  If Not fso.FileExists(ZipFilePath) Then
    MsgBox "File Not Found!"
    Exit Sub
  End If
  If IsMissing(TargetFolder) Then
    TargetFolder = fso.GetFile(ZipFilePath).ParentFolder.Path
  ElseIf Not fso.FolderExists(TargetFolder) Then
    fso.CreateFolder TargetFolder
  End If
  If Right(TargetFolder, 1) <> "\" Then TargetFolder = TargetFolder & "\"
  Set oShl = CreateObject("Shell.Application")
  Set FolderItems = oShl.Namespace(ZipFilePath).Items
  oShl.Namespace(TargetFolder).CopyHere FolderItems
  MsgBox "Done!"
  Set fso = Nothing: Set oShl = Nothing
End Sub
Sub Main()
  Dim zipFile As String, TargetFolder As String
  [COLOR=#ff0000]TargetFolder = ThisWorkbook.Path[/COLOR]
  [COLOR=#ff0000]zipFile = TargetFolder & "\Unzip.zip"[/COLOR]
  UnzipFile zipFile, TargetFolder
End Sub
Chỗ màu đỏ là:
- Khai báo thư mục chứa file sau khi giải nén
- Khai báo đường dẫn của file zip
- Nếu giải nén ra cùng thư mục thì chỉ cần UnzipFile zipFile là đủ (bỏ qua đối số TargetFolder)
Cảm ơn sự giúp đỡ nhiệt tình của bạn. Nếu dùng code này mình có thể khai báo như thế nào để mà nó unzip file chứa password.
 
Upvote 0
Cảm ơn sự giúp đỡ nhiệt tình của bạn. Nếu dùng code này mình có thể khai báo như thế nào để mà nó unzip file chứa password.

Hình như là Shell32 không hỗ trợ nén và giải nén file có password
Tuy nhiên, nếu bạn dùng WinZip thì tham khảo chỗ này:
http://www.mrexcel.com/forum/excel-...g-zip-file-via-visual-basic-applications.html
(Tôi không xài WinZip nên không test được)
 
Upvote 0
Hình như là Shell32 không hỗ trợ nén và giải nén file có password
Tuy nhiên, nếu bạn dùng WinZip thì tham khảo chỗ này:
http://www.mrexcel.com/forum/excel-...g-zip-file-via-visual-basic-applications.html
(Tôi không xài WinZip nên không test được)

Cảm ơn bạn, nhưng khi mình chạy dòng lệnh bên dưới là nó đều mở thư mục giải nén lên. Giống như cái mình muốn hỏi ban đầu.
RetVal = ShellExecute(0&, "", "WinZip32.exe", CmdLine, FilePath, 1&)
Cảm ơn bạn rất nhiều.
 
Upvote 0
Web KT
Back
Top Bottom