循环删除/ Downloads文件夹中的特定文件

时间:2019-11-21 07:38:26

标签: excel vba

我正在尝试建立一个宏,该宏将在/ C:Users /“其用户名” / Downloads文件夹中进行搜索,以删除所有具有相同保存名称但文件名末尾具有不同编号的文件。

我能够毫无问题地删除宏,我的问题是如何使这个“循环”删除该文件夹中具有相同名称的每个文件,直到没有剩余的文件了?

(我对VBA /宏构建非常陌生,并且已经围绕在线研究和以前的宏进行了构建)

Example of file names in /Downloads that need deleted

这是我目前拥有的:

Sub killxls()
' killxls Macro
'
' Macro used to delete all "Dock_Activity_*.xls" files
' in "C:\Users\("username")\Downloads\"
'
' Keyboard Shortcut: Ctrl+t
Dim Filename, Pathname As String
Dim Killfile As String
Dim UserName As String

    UserName = Environ("username")
    Pathname = "C:\Users\" & Environ$("username") & "\Downloads\"
    Filename = Dir(Pathname & "Dock_Activity_*.xls")
    Killfile = "C:\Users\" & Environ$("username") & "\Downloads\" & "Dock_Activity_*.xls"

Do While Killfile <> ""
    KillProperly "Pathname & Killfile"
    Killfile = Dir$(Pathname & "Dock_Activity_*.xls")
Loop


End Sub
Public Sub KillProperly(Killfile As String)

If Len(Dir$(Killfile)) > 0 Then
    SetAttr Killfile, vbNormal
    Kill Killfile
End If

End Sub

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在第一次使用通配符调用Dir命令之后,随后每次不带参数的调用将为您提供下一个文件。

如果您是从Dir命令中获取列表,则无需像检查KillProperly例程那样先检查列表是否存在,这样就可以了。

>

根据我上面的评论,类似这样的方法应该起作用:

Sub killxls()
' killxls Macro
'
' Macro used to delete all "Dock_Activity_*.xls" files
' in "C:\Users\("username")\Downloads\"
'
' Keyboard Shortcut: Ctrl+t
  Dim Pathname As String
  Dim Killfile As String
  Dim FileCount As Long

  Pathname = "C:\Users\" & Environ("username") & "\Downloads\"

  KillFile = Dir(Pathname & "Dock_Activity_*.xls")
  Do While Killfile <> ""
    SetAttr Pathname & Killfile, vbNormal
    Kill Pathname & Killfile
    FileCount = FileCount + 1
    Killfile = Dir()
  Loop

  MsgBox FileCount & " file(s) have been deleted."

End Sub

我还在末尾添加了一个可选的确认,因为这是一种很好的形式,可以让用户知道何时完成以及完成了多少个动作。如果不需要,可以将其删除。