Excel 循环删除/下载文件夹中的特定文件

Excel 循环删除/下载文件夹中的特定文件,excel,vba,Excel,Vba,我正在尝试构建一个宏,该宏将在/C:Users/“this username”/Downloads文件夹中搜索,以删除具有相同保存名称但在文件名末尾具有不同编号的任何文件 我能够让宏删除一个没有问题的文件,我的问题是如何使这个“循环”成为删除该文件夹中具有相同名称的每个文件,直到没有剩余文件为止 (我对VBA/macro building非常陌生,并围绕在线研究和以前的macro进行了构建) 以下是我目前拥有的: Sub killxls() ' killxls Macro ' ' Macro

我正在尝试构建一个宏,该宏将在/C:Users/“this username”/Downloads文件夹中搜索,以删除具有相同保存名称但在文件名末尾具有不同编号的任何文件

我能够让宏删除一个没有问题的文件,我的问题是如何使这个“循环”成为删除该文件夹中具有相同名称的每个文件,直到没有剩余文件为止

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

以下是我目前拥有的:

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

提前感谢您的帮助

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

如果您是从
Dir
命令中获取列表,则无需首先检查它是否存在,就像您使用
kill
例程时所做的那样,这样就不会出现这种情况

根据我上面的评论,类似这样的方法应该有效:

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
Sub killxls()
'killxls宏
'
'用于删除所有“Dock_活动*.xls”文件的宏
'在“C:\Users\(“用户名”)\Downloads\”中
'
'键盘快捷键:Ctrl+t
将路径名设置为字符串
将文件设置为字符串
将文件计数设置为“长”
Pathname=“C:\Users\”环境(“用户名”)和“\Downloads\”
KillFile=Dir(路径名和“Dock\u Activity.*.xls”)
删除文件“”时执行此操作
SetAttr路径名和Killfile,vbNormal
Kill路径名和Killfile
FileCount=FileCount+1
Killfile=Dir()
环
MsgBox FileCount&“文件已被删除。”
端接头

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

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

如果您是从
Dir
命令中获取列表,则无需首先检查它是否存在,就像您使用
kill
例程时所做的那样,这样就不会出现这种情况

根据我上面的评论,类似这样的方法应该有效:

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
Sub killxls()
'killxls宏
'
'用于删除所有“Dock_活动*.xls”文件的宏
'在“C:\Users\(“用户名”)\Downloads\”中
'
'键盘快捷键:Ctrl+t
将路径名设置为字符串
将文件设置为字符串
将文件计数设置为“长”
Pathname=“C:\Users\”环境(“用户名”)和“\Downloads\”
KillFile=Dir(路径名和“Dock\u Activity.*.xls”)
删除文件“”时执行此操作
SetAttr路径名和Killfile,vbNormal
Kill路径名和Killfile
FileCount=FileCount+1
Killfile=Dir()
环
MsgBox FileCount&“文件已被删除。”
端接头

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

在第一次使用通配符调用
Dir
命令后,每次不带参数的后续调用都将为您提供下一个文件。要删除文件,最好使用此技术构建一个数组,然后处理该数组以删除文件。此外,不要在Dir循环中正确使用
kill
例程,因为它还使用
Dir
函数,除非先将文件名读入数组,否则会把事情搞砸(这也是我建议使用数组方法的原因之一)-或者将例程更改为使用文件系统对象检查其是否存在,而不是使用
Dir
函数。我想指出,您的
Filename
是一个
变量,而不是人们可能认为的
String
。要
Dim
正确地在一行中使用
Dim Var1作为VarType,Var2作为VarType,
在第一次使用通配符调用
Dir
命令后,每次不带参数的后续调用都将生成下一个文件。要删除文件,最好使用此技术构建一个数组,然后处理该数组以删除文件。另外,不要在Dir循环,因为它还使用
Dir
函数,这会把事情搞砸,除非您先将文件名读入数组(这也是我建议使用数组方法的原因之一)-或者将例程更改为使用文件系统对象检查其是否存在,而不是使用
Dir
函数。我想指出,您的
Filename
是一个
变量,而不是人们可能认为的
String
。要
Dim
正确地在一行中使用
Dim Var1作为VarType,Var2作为VarType,
感谢您的评论和上面的答案。这对零问题有效!感谢您的评论和上面的答案。这对零问题有效!