使所有文件和文件夹以及所有子文件夹只读

时间:2015-05-21 19:53:35

标签: excel excel-vba vba

我有一个包含多个文件夹的文件夹,其中包含多个文件。我想使用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

2 个答案:

答案 0 :(得分:3)

您需要一个递归过程以及另一个调用它来启动过程的过程。不应以递归方式使用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声明。

答案 1 :(得分:1)

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

np.exp(pd.expanding_sum(np.log(temp_col)))