我无法根据单元格值删除文件。 我在下面的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
然后从相应的文件夹中删除不活动的文件(多维数据集)。
答案 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