使所有文件和一个文件夹和所有子文件夹只读

我有一个文件夹包含多个文件夹,其中包含多个文件。 我想使用Excel 2010中的macros来使所有文件夹中的所有文件都是只读的。 我试过下面的代码,但当我一步一步通过它,我发现sFile永远不会填充string和实习生无法正常工作。

 Sub setFileReadOnly() Dim sPath As String Dim sFile As String sPath = "c:\temp\" sFile = Dir(sPath & "*.*") Do Until sFile = "" SetAttr sPath & sFile, vbReadOnly sFile = Dir Loop End Sub 

你需要一个recursion过程来调用它来启动这个过程。 Dir函数不应该recursion使用。 在向Microsoft脚本运行时添加引用(工具 – >引用)之后,请尝试此代码。

 Sub Main() Dim sPath As String sPath = "c:\temp\" Call setFileReadOnly(sPath) End Sub Sub setFileReadOnly(sPath As String) Dim sFile As String Dim sSubFolder As String Dim fsoObject As Scripting.FileSystemObject Dim folderObject As Scripting.Folder Dim fileObject As Scripting.File Set fsoObject = New Scripting.FileSystemObject For Each folderObject In fsoObject.GetFolder(sPath).SubFolders Debug.Print folderObject.Path Call setFileReadOnly(folderObject.Path & "\") Next folderObject For Each fileObject In fsoObject.GetFolder(sPath).Files Debug.Print sPath & fileObject.Name SetAttr sPath & fileObject.Name, vbReadOnly Next fileObject End Sub 

我留在了Debug.Print语句中。

最简单的方法是在脚本运行时使用FileSystemObject。 您需要添加对Microsoft脚本运行时的引用,或更改代码以使用后期绑定。 设置开始文件夹后,可以轻松recursion所有子文件夹:

 Sub SetFilesReadOnly(Optional location As Folder) Dim fso As Scripting.FileSystemObject Set fso = New Scripting.FileSystemObject If location Is Nothing Then Set location = fso.GetFolder("C:\Temp") End If Dim target As File For Each target In location.Files target.Attributes = target.Attributes + ReadOnly Next target Dim directory As Folder For Each directory In location.SubFolders SetFilesReadOnly directory Next directory End Sub