【问题标题】:Make all files and a folder and all subfolders read only将所有文件和文件夹以及所有子文件夹设为只读
【发布时间】:2015-05-22 06:49:13
【问题描述】:

我有一个包含多个文件夹的文件夹,其中包含多个文件。我想使用 excel 2010 中的宏将所有文件夹中的所有文件设为只读。我尝试了下面的代码,但是当我逐步执行时,我发现sFile 永远不会填充字符串并且实习生不起作用。

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

【问题讨论】:

标签: excel vba


【解决方案1】:

为此,您需要一个递归过程和另一个调用它的过程来启动该过程。 Dir 函数不应递归使用。在向 Microsoft Scripting Runtime 添加引用(工具 -> 引用)之后,试试这个代码。

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 声明。

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多