Đặt mật khẩu bảo vệ nhiều tệp Excel trong một thư mục và thư mục con để chỉ cho phép mở ở chế độ đọc.
Trả lời:
Một giải pháp như thế này có thể hiệu quả.
Bạn cần thay đổi hai hằng số ở đầu.
Const cstPass As String = "My 5ecret"
Const cstRoot As String = "D:\Temp"
Dim aFiles() As String, iFile As Integer
Sub ListAllFilesInDirectoryStructure()
iFile = 0
Liệt kê các tệp trong thư mục cstRoot và "\"
Xử lý tệp
End Sub
Sub ListFilesInDirectory(Directory As String)
Dim aDirs() As String, iDir As Integer, stFile As String
'Sử dụng hàm Dir để tìm các tệp và thư mục trong thư mục
' Tìm kiếm các thư mục và xây dựng một mảng riêng biệt cho chúng
Lưu ý rằng hàm Dir trả về cả tập tin lẫn thư mục khi chỉ định vbDirectory.
iDir = 0
stFile = Directory & Dir(Directory & "*.*", vbDirectory)
Thực hiện vòng lặp while stFile <> Directory
Nếu Right(stFile, 2) = "\." Hoặc Right(stFile, 3) = "\.." Thì
' Không làm gì cả - GetAttr không thích các thư mục này
ElseIf (GetAttr(stFile) And vbDirectory) = vbDirectory Then
' thêm vào mảng thư mục cục bộ
iDir = iDir + 1
ReDim Bảo toàn aDirs(1 tới iDir)
aDirs(iDir) = stFile
ElseIf InStr(LCase(stFile), ".xl")>0 Then ' bất kỳ tệp excel nào
' thêm vào mảng tệp toàn cục
iFile = iFile + 1
ReDim Preserve aFiles(1 To iFile)
aFiles(iFile) = stFile
Kết thúc nếu
stFile = Directory & Dir()
Vòng lặp
' Bây giờ, đối với bất kỳ thư mục nào trong aDirs, hãy gọi hàm self một cách đệ quy
Nếu iDir > 0 thì
Đối với iDir = 1 đến UBound(aDirs)
ListFilesInDirectory aDirs(iDir) & Application.PathSeparator
Thư mục tiếp theo
Kết thúc nếu
End Sub
Sub ProcessFiles()
Dim WB As Workbook
For iFile = 1 To UBound(aFiles)
Đặt WB = Workbooks.Open(aFiles(iFile))
WB.ReadOnlyRecommended = True
Application.DisplayAlerts = False ' Ngăn chặn hộp thoại ghi đè?
WB.SaveAs aFiles(iFile), WriteResPassword:=cstPass
Application.DisplayAlerts = True
WB.Close False
Kế tiếp
End Sub
Comments
Post a Comment