Vba ẩn file trong foder?
Xin chào GPE!
Em có 1 foder file (đính kèm)
Và trong file tổng hợp E tạo 2 nút ẩn file và hiện file!
Nghĩa là ẩn toàn bộ các file trong forder đó và hiện toàn bộ các file trong forder.
Trừ file tổng hợp! File này luôn hiện!
Xin hỏi GPE có code nào thực hiện được vấn đề này không ạ?
Tks!
Gửi bạn file dùng để Set Attribute cho file và folder
Bạn theo code trong file mà phát triển riêng cho mình nhé
Em xem cũng chẳng hiểu gì cả…@@! Cứ như Ma trận ý!
Thầy có thể thực hiện trên file Tổng hợp của anh GàKon đưa lên được không ạ?
Em thấy bài này cũng tiện cho khi mà 1 foder chứa quá nhiều file mà mình khi mình cần tìm nhanh 1 file tổng hợp đó mở foder ra là có thể thấy ngay. Nếu cần thiết thì có thể cho nó hiện lên.
Việc ẩn các file con cũng hay nhằm tránh việc thay đổi dữ liệu liên quan đến file tổng hợp!
Tks!Cái này là "dấu cho khuất mắt" chứ có phải "dấu không moi được" đâu.
Bạn vào Tools (mở forder lên) –> Folder options –> thẻ View –> chọn show hide files
Code thay đổi attribus để thành hide + system (nhìn tên tập tin Excel thì biết). Ở đường dẫn trên thì nó nằm liền với show hide files, tên là Not show hide files (đại loại thế vì tôi không có IE tiếng Anh nên không rõ tên thế nào)
Gì chứ
Bạn cứ mở file ChangeFolderAttiribule.xlsm lên, duyệt đến thư mục cần thay đổi Attribute, rồi bấm Apply là được rồi
Trên form ấy, tôi để mặc định dấu check tại Archive. Vậy bạn không cần check gì cả, chỉ Apply là mọi file, folder sẽ trở lại như trước thôi
Code trên là viết tổng quát, giờ viết riêng cho bài này thì.. quá dễ chứ sao nữa
1> Code trong module
Private Declare Sub SHChangeNotify Lib "shell32.dll" _
(ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)
Sub ShowHideFiles(ByVal Hidden As Boolean)
Dim fleItem As Object, lAtt As Long
Dim sFilePath As String, sFolder As String
sFilePath = ThisWorkbook.FullName
sFolder = ThisWorkbook.Path
On Error Resume Next
lAtt = IIf(Hidden, vbHidden + vbSystem, vbNormal)
With CreateObject("Scripting.FileSystemObject")
For Each fleItem In .GetFolder(sFolder).Files
If fleItem.Path <> sFilePath Then
fleItem.Attributes = lAtt
End If
Next
End With
SHChangeNotify &H8000000, &H0&, 0, 0
End Sub
Lưu ý SHChangeNotify để Refresh (không có cũng được nhưng có nó thì "nhìn" sẽ "sướng" hơn)
2> Code trong sheet1
Private Sub cmd_Click()
With cmd
ShowHideFiles (cmd.Caption = "Hide Files")
.Caption = IIf(.Caption = "Show Files", "Hide Files", "Show Files")
End With
End Sub
Lưu ý: CommandButton tôi đặt tên là cmd nhé
Rất tuyệt vời Thầy ạ!
có thể ẩn hết các file trừ file tổng hợp và foder!
Thầy có thẻ chỉ cho em hay sửa lại code (đơn giản lại từng bước) để em dẽ hình dung và áp dụng hơn không ạ?
Ví dụ Em muốn hiện thêm 1 file nào đó cùng với file tổng hợp có được không ạ? File đó tên là "data.xls" chẳng hạn.
Tks Thầy!Tôi cũng chưa test, nhưng với code đó, bạn thử thêm vào chỗ này xem:
Sub ShowHideFiles(ByVal Hidden As Boolean) Dim fleItem As Object, lAtt As Long Dim sFilePath As String, sFolder As String [B][COLOR=#ff0000]Dim sDataFilePath As String[/COLOR][/B] sFilePath = ThisWorkbook.FullName sFolder = ThisWorkbook.Path [B][COLOR=#ff0000] sDataFilePath = sFolder & "data.xls"[/COLOR][/B] On Error Resume Next lAtt = IIf(Hidden, vbHidden + vbSystem, vbNormal) With CreateObject("Scripting.FileSystemObject") For Each fleItem In .GetFolder(sFolder).Files If fleItem.Path <> sFilePath [B][COLOR=#ff0000]Or fleItem.Path <> sDataFilePath [/COLOR][/B]Then fleItem.Attributes = lAtt End If Next End With SHChangeNotify &H8000000, &H0&, 0, 0 End Sub
Cái chổ Or màu xanh ấy lý ra phải là And mới đúng chứ nhỉ
Ngoài ra phải lưu ý rằng
sDataFilePath = sFolder & "data.xls"
khác với
sDataFilePath = sFolder & "Data.xls"
và cũng khác với
sDataFilePath = sFolder & "DATA.xls"
Ồh! Vấn đề hiện thêm file Em đã hiểu rồi!
Nhưng ý Em nói Thầy có thể tách code trên ra làm 2 được không?
Code nào là ẩn code là hiện.(để em nhìn nhận dễ hơn).Kiểu như là bài của Anh GàKon đưa ra 2 nút và Thầy ndu đã gộp vào 1 nút!
Đúng là rất ngắn gọn. Nhưng với nhưng code cao cấp kiểu này… Em không thể nào mà lĩnh hội được.-+*/
Thì chổ này nè:
fleItem.Attributes = lAtt
Mà ta có:
vbNormal = 0 <==> Bình thường
vbReadOnly = 1 <==> Chỉ đọc
vbHidden = 2 <===> Ẩn
vbSystem =4 <===> Hệ thống
vbArchive =32 <===> Lưu trử
Vậy muốn ẩn hiện thế nào thì cứ gán vào biến lAtt là xong!
Ví dụ:
– Set thuộc tính ẩn + system, ta dùng:
lAtt = [COLOR=#0000cd][I]vbHidden[/I][/COLOR] + [I][COLOR=#0000cd]vbSystem[/COLOR][/I]
fleItem.Attributes = lAtt
– Set thuộc tính ReadOnly cho file:
lAtt = [COLOR=#0000cd][I]vbReadOnly[/I][/COLOR]
fleItem.Attributes = lAtt
– Cho file trở lại bình thường
lAtt = [COLOR=#0000cd][I]vbNormal[/I][/COLOR]
fleItem.Attributes = lAtt
vân vân
———–
Bạn để ý phía trên tôi viết thế này:
lAtt = IIf(Hidden, vbHidden + vbSystem, vbNormal)
Tức nếu biến Hidden =TRUE thì biến lAtt sẽ = vbHidden + vbSystem, ngược lại thì lAtt sẽ = vbNormal
Nói chung: ẩn hay hiện sẽ tùy thuộc vào việc ta truyền vào biến Hidden này là TRUE hay FALSE
Cách viết code như trên là thuộc dạng Sub có tham số truyền (cũng như viết Function)
Bay giờ, từ Sub tổng quát trên, ta viết code cho CommandButton để nó vừa có tác dụng ẩn, vừa có tác dụng hiện là chổ này đây:
Private Sub cmd_Click()
With cmd
ShowHideFiles (cmd.Caption = "Hide Files")
.Caption = IIf(.Caption = "Show Files", "Hide Files", "Show Files")
End With
End Sub
Cái này là dựa vào Caption của cmd để truyền TRUE, FALSE cho biến Hidden —> là chổ này ShowHideFiles (cmd.Caption = "Hide Files")
Nghĩa là:
– Nếu cmd.Caption = "Hide Files" là ĐÚNG thì dòng lệnh sẽ tương đương ShowHideFiles TRUE —> Ẩn file
– Nếu cmd.Caption = "Hide Files" là SAI thì dòng lệnh sẽ tương đương ShowHideFiles FALSE —> Hiện file
————————
Nếu tách thành 2 Sub riêng thì càng dễ
ẨN:
Private Sub An_Click()
ShowHideFiles TRUE
End Sub
và HIỆN:
Private Sub HIEN_Click()
ShowHideFiles FALSE
End Sub
Vậy thôi
www.giaiphapexcel.com/diendan/threads/vba-%E1%BA%A9n-file-trong-foder.72828/
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học
Vậy nhờ Anh chia sẽ cho mọi người biết cách nào để cho cái folder/file là "khó lôi" ra đi ạ.
Trân trọng cám ơn Anh.
Thử "quái chiêu" này xem
Bạn tại file Tuan.rar về, giải nén rồi mở file TongHop.xls lên
Xong, bạn bấm nút Ẩn Files rồi thử tìm cách "moi" mấy file đã ẩn ra xem có được không nha
—————
Code chỉ có vầy:
Thì cứ tìm cách đi
Nói chung đã thấy code rồi thì sẽ có cách lấy ra thôi (cũng bằng code)
Code này chủ yếu "giấu" để tránh người không biết xài thôi —> Muốn dùng "tay" để "moi" ra chưa chắc ai cũng biết
Ẹc… Ẹc…
Trong file đã có sẵn 1 code, giờ cho thêm code này vào:
Chạy nó và kiểm tra kết quả
———————-
Show bằng tay thì cũng không có gì —> Dùng lệnh DOS
– StartRun gõ lệnh CMD
– Trong cửa sổ DOS, bạn gõ lệnh RENAME rồi cách 1 khoảng trắng
– Xong dùng chuột nắm lấy thằng thư mục có biểu tượng Computer rồi kéo thả vào cửa sổ DOS (ngay sau dòng lệnh RENAME ) —> Tiếp theo cách 1 khoảng trắng và gõ tên thư mục mới tùy ý rồi Enter
—————————-
Bài trước tôi dùng cell IV1 để lưu tên folder. Cũng hơi nguy hiểm chút, thôi thì sửa thành vầy cho chắc:
Tức là dò tìm tên thư mục, thấy thằng em nào mà trong tên của nó có chứa chuổi {20D04FE0-3AEA-1069-A2D8-08002B30309D} thì.. "mần"
Đó không phải là tmp file, đó là 1 folder bạn à. Vì thế mà Clear file rác sẽ không có tác dụng với nó đâu
Chuyện táy máy di dời hay xóa gì gì đó thì… ráng chịu thôi —> Các file trong thư mục Windows, System32 là thuộc dạng CẤM nhưng nếu bạn táy máy cũng có thể xóa được và hậu quả thì.. ráng chịu chứ trách ai
Muốn "biệt tích" luôn cũng được… Dù nó có đổi tên liên tục cũng vẫn có cách để tìm
Thí nghiệm xem
Ẹc… Ẹc…
Trong Windows Explorer, anh có thể rename 1 folder giả dạng 1 folder hệ thống nhưng làm ngược lại thì không được à nghen
Anh phải gõ lệnh DOS mới xong
Ở đây em muốn tự động hóa bằng code chứ làm bằng tay thì nhiều cách lắm
Ý em nói ngược lại làm không được nghĩa là Rename ngược lại trong môi trường Windows Explorer đó anh
Anh rename từ 1 folder bình thường thành folder hệ thống thì anh dùng cái gì cũng được (bằng DOS hoặc F2 ngay trong cửa sổ Explorer). nhưng nếu folder ấy đã thành folder hệ thống rồi thì anh không thể đổi ngược lại trong explorer (có thể rename trong DOS hoặc WinRAR cũng được)
Ẹc… Ẹc…
Không biết máy anh thế nào chứ từ hồi đó đến giờ em thử rất nhiều máy, chả có máy nào cho phép Rename ngược lại theo kiểu bấm F2 cả.
Không biết các bạn khác thì sao?
Đây, nói có bằng chứng:
1> Thử nghiệm trên Win XP SP3:
0bjbHtIhTKA
2> Thử nghiệm trên Win 7:
8C_T1zQqpTE
Vậy có thể là còn 1 setting nào đó ta chưa để ý đến
Em biết chiêu này từ rất lâu nhưng chưa lần nào thử nghiệm giống được như anh cả
——————-
Bạn thử vào Folder Options, check mục "Hide protected operating system files" rồi khởi động lại máy tính. Xong thử nghiệm lại xem
Em thì cho rằng.. tuỳ máy (hoặc tuỳ 1 setting nào đó ta chưa biết)
Vì sáng giờ em đã thử trên 3 máy tính dùng Win XP… chẳng có trường hợp nào giống như anh đã mô tả cả —> Anh xem video clip thứ nhất của em đó thì biết
Ôi mà thôi.. kệ đi, tạm cho qua trường hợp này. Giờ anh có cách nào ẩn file hay hay gửi lên cho mọi người tham khảo với
Ẹc… Ẹc…
Cho em hỏi, nếu mình không access được, vậy virus nó có thể xâm nhập được vào thư mục này không ạ?
Bạn ơi, thủ thuật không cho truy nhập này chỉ là việc thiết lập quyền thao tác của người dùng với thư mục trong Windows thôi mà. Những thiết lập này có thể điều chỉnh lại nếu bạn chính là người đã thực hiện hoặc người có quyền Admin. Trừ trường hợp bạn để chế độ mã hóa file (trong code của bác Siwtom không thấy làm điều này) thì có vấn đề. Nếu chỉ điều chỉnh quyền truy cập thì bạn có thể cấp lại quyền một cách đơn giản! Bác Siwtom cũng nói rõ điều này rồi mà, thậm chí bạn có thể dùng dòng lệnh để khôi phục quyền truy cập.
Lưu ý: những thiết lập này không có tác dụng với các ổ cứng vẫn dùng file hệ thống dạng FAT (chỉ có hiệu quả đối với NTFS).
Cách 1: Dùng lệnh trong màn hình CMD
(Ví dụ với trường hợp của tôi, trong Windows 7 tôi chỉ cần lệnh này trong màn hình CMD)
CACLS e:dhcp /t /e /g paulsteigel:F
Cú pháp mẫu như sau:
CACLS [File hoặc thư mục] /e /p [Tên người dùng trong windows cần cấp quyền]:[F: quản lý toàn quyền, R: chỉ đọc…]
Cách 2: thao tác trong Windows
Chạy chương trình của bác Tôm
1995
Bắt đầu chỉnh lại
Nhấn phải chuột thư mục bị khóa, chọn Properties, chọn tiếp Security
1994
Bước 2
Nhấn Advanced
1993
Bước 3
Chọn Change Permission
1992
Bước 4
Chọn người dùng có chữ Deny và nhấn Edit
1991
Bước 5
Chọn Full Control trong cột Allow. Nhấn OK, OK …. và xong!
1990