为什么我不能删除此文件夹(VBA)?

时间:2014-03-11 11:40:37

标签: vba file-io

我创建了一个临时文件夹,稍后会在程序中使用以下代码删除:

    'Creates a new temporary      directory path for a folder copy
    If dir("C:\\InventorTempFolder\\\", vbDirectory) = "" Then       
MkDir "C:\\InventorTempFolder\\\"
SetAttr "C:\InventorTempFolder", vbNormal
    Else: MsgBox "This folder already exists."
    End If


(我不知道SetAttr是否正确......这是我提问的一部分!)

然后我将此代码拉到离线状态,应使用以下代码删除此文件夹中的所有文件和目录:

Sub DeleteDirectory()


Dim dir_name As String
Dim file_name As String
Dim files As Collection
Dim i As Integer
dir_name = "C:\\InventorTempFolder"

' Get a list of files it contains.
Set files = New Collection
file_name = dir$(dir_name & "\*.*", vbReadOnly + _
    vbHidden + vbSystem + vbDirectory)
Do While Len(file_name) > 0
    If (file_name <> "..") And (file_name <> ".") Then
        files.Add dir_name & "\" & file_name
    End If
    file_name = dir$()
Loop

' Delete the files.
For i = 1 To files.Count
    file_name = files(i)
    ' See if it is a directory.
If GetAttr(file_name) = vbDirectory Then
        Kill file_name
Else: Kill file_name
End If

Next i

' The directory is now empty. Delete it.
RmDir dir_name

' Remove the read-only flag if set.
' (Thanks to Ralf Wolter.)

End Sub


但是,目录不会删除。我的理论是,这是因为该目录是一个只读文件夹。这就是为什么我试图将属性更改为vbNormal,但它不会改变。所以我想知道的问题是:

  1. 为什么不删除?我的理论是正确的,因为它是只读的吗?

  2. 如果是这样,我该如何解决?

  3. 如果没有,还有什么问题......?


  4. 提前致谢!

1 个答案:

答案 0 :(得分:2)

脚本的结尾是:

RmDir dir_name

' Remove the read-only flag if set.
' (Thanks to Ralf Wolter.)

RmDir dir_name

所以你试图两次删除同一个目录。此时dir_name设置为“SillyVBA”目录 - 当我测试时,确实会被删除。我假设第二个RmDir意味着删除“C:\ InventorTempFolder”;当我测试它时,这对我也有用。

更新以回复评论

问题可能是由于您尝试在文件类型为目录时使用Kill。要进行完全递归删除,您需要从树的底部开始,删除所有文件和空目录。但是更简单的方法是使用FileSystemObject:

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.deletefolder dir_name

这将一次性删除目录及其中的所有内容。