如何根据单元格值删除文件?

时间:2018-07-23 14:50:32

标签: excel vba excel-vba

我无法根据单元格值删除文件。 我在下面的Kill命令中收到一条错误消息:

Kill path & r.Offset(1, -4) & "\" & r.Offset(1, -3)

有什么想法吗?

Sub INACTIVE_files()

    Const path = "C:\Users\NikolouzosD\AppData\Local\Temp\vbakillfunction\"

    Dim r As Range
    Dim x As Integer

    Set r = Cells(1, 5)
    Do Until r = ""
        If UCase(r.value) = "INACTIVE" Then

            Kill path & r.Offset(1, -4) & "\" & r.Offset(1, -3)
          End If
          Set r = r.Offset(1, 0)
    Loop

End Sub

代码从单元格E1开始,并在同一列中查找INACTIVE文件,直到没有其他文件可查找为止。 然后,它检查文件夹名称(列A),并将其与多维数据集(列B)组合 并将它们都放在一个路径中:

path = "C:\Users\NikolouzosD\AppData\Local\Temp\vbakillfunction\"

例如: 对于无效的单元格E2,路径应为:

C:\Users\NikolouzosD\AppData\Local\Temp\vbakillfunction\WPO 17 02 04 3MMT All Periods\BG023104.txt

然后从相应的文件夹中删除不活动的文件(多维数据集)。

enter image description here

2 个答案:

答案 0 :(得分:0)

将路径用双引号引起来,以避免文件名和文件夹中的空格出现问题。

更好的方法是将路径放入字符串变量中,以便您可以轻松调试

循环外:

Dim strPath As String

在您的if区块内:

   strPath = """" & path & r.Offset(1,-4) & "\" & r.Offset(1,-3) & """"
   Debug.Print strPath ' Ctrl-G to view results
   Kill strPath

编辑-删除前添加文件检查

Tools | References

添加对Windows脚本托管的引用

然后在子代码顶部添加

Dim fso as New FileSystemObject

通过检查是否存在来替换您的Kill命令

If fso.FileExists(strPath) Then
   Kill strPath
Else
   Msgbox "File Doesn't Exist: " & strPath
End If

已更新以继续到下一个文件

将循环更改为:

Do Until r = ""
   If UCase(r.value) = "INACTIVE" AND fso.FileExists(strPath) Then
        Kill strPath
   End If
   Set r = r.Offset(1, 0)
Loop

答案 1 :(得分:0)

有效! 我已经注释掉了用于检查文件是否存在的部分代码。

 Sub delete_INACTIVE_files()


Const path = "C:\Users\Dn\AppData\Local\Temp\vbakillfunction\"
Dim r As Range


Set r = Cells(1, 5)

Do Until r = ""


    If UCase(r.Value) = "INACTIVE" Then

        If Dir(path & r.Offset(0, -4) & "\" & r.Offset(0, -3) & ".txt") <> "" Then 'Does the file exist?

            'MsgBox "file" & path & r.Offset(0, -4) & "\" & r.Offset(0, -3) & ".txt" & " exists"

            Kill path & r.Offset(0, -4) & "\" & r.Offset(0, -3) & ".txt"


        'Else

            'MsgBox "file" & path & r.Offset(0, -4) & "\" & r.Offset(0, -3) & ".txt" & " not here"


        End If

    End If

    Set r = r.Offset(1, 0)

Loop

End Sub