I have the below code for vbabut I don't know how to search subfolders?
Option Explicit
Sub massprotect()
' ' massprotect Macro '
' Dim oWbk As Workbook Dim sFile As String Dim sPath As String
ChDrive sPath
Application.DisplayAlerts = False sPath = "I:\GEN_ACCT\Levi Only Stores (LOS)\2009\LOS Journals\cost center reporting\" 'location of files
.LookIn = sPath
.SearchSubFolders = False
ChDrive sPath ChDir sPath
sFile = "" sFile = Dir("*.xls*") 'change or add formats Do While sFile <> "" 'will start LOOP until all files in folder sPath have been looped through
Set oWbk = Workbooks.Open(sPath & "\" & sFile) 'opens the file
ActiveWorkbook.SaveAs Filename:= _
sPath & sFile _
, FileFormat:=xlExcel8, Password:="", WriteResPassword:="SAPFICO", _
ReadOnlyRecommended:=True, CreateBackup:=False
oWbk.Close True 'close the workbook, saving changes
sFile = Dir Loop ' End of LOOP End Sub
this should do what you want. put this code in a new module. Watch the wordwrap.
Option Base 1 Dim aFiles() As String, iFile As Integer
Sub MassProtect()
Dim Counter As Integer iFile = 0 ListFilesInDirectory "I:\GEN_ACCT\Levi Only Stores (LOS)\2009\LOS Journals\cost center reporting\"
For Counter = 1 To iFile
sName = aFiles(Counter)
on Error Resume Next
Set bk = Workbooks.Open(sName)
if err.Number <> 0 then
msgbox "Problems with " & sName
Else
Application.DisplayAlerts = False
bk.SaveAs Filename:=sName, _
FileFormat:=xlExcel8, _
Password:="", _
WriteResPassword:="SAPFICO", _
ReadOnlyRecommended:=True, _
CreateBackup:=False
Application.DisplayAlerts = True
bk.Close SaveChanges:=False ' the book has already been
'saved, no use doing it again
end if
On Error goto 0
Next End Sub
Sub ListFilesInDirectory(Directory As String)
Dim aDirs() As String, iDir As Integer, stFile As String
' use Dir function to find files and directories in Directory
' look for directories and build a separate array of them
' note that Dir returns files as well as directories when vbDirectory
' specified
iDir = 0
stFile = Directory & Dir(Directory & "*.*", vbDirectory)
Do While stFile <> Directory
If Right(stFile, 2) = "\." Or Right(stFile, 3) = "\.." Then
' do nothing - GetAttr doesn't like these directories
ElseIf GetAttr(stFile) = vbDirectory Then
' add to local array of directories
iDir = iDir + 1
ReDim Preserve aDirs(iDir)
aDirs(iDir) = stFile
Else
' add to global array of files if it is anworkbook
if instr(1,stFile,".xls",vbTextcompare) > 0 then
iFile = iFile + 1
ReDim Preserve aFiles(iFile)
aFiles(iFile) = stFile
End if
End If
stFile = Directory & Dir()
Loop
' now, for any directories in aDirs call self recursively
If iDir > 0 Then
For iDir = 1 To UBound(aDirs)
ListFilesInDirectory aDirs(iDir) & Application.PathSeparator
Next iDir
End If
End Sub
I would suggest creating a dummy directory with some subdirectories and some typical files in each and testing it first to make sure there is nothing unexpected happening.
Advertisement