Excel VBA:删除文件夹中的任何空Excel文件

Excel VBA:删除文件夹中的任何空Excel文件,excel,vba,file,directory,remove,Excel,Vba,File,Directory,Remove,我希望能够搜索包含.xls文件的文件夹,并从该文件夹中删除任何空文件。当我说空时,我的意思是文件中没有工作表,或者任何单元格中没有任何数据(如果工作表确实存在)。最好的方法是什么 代码: Sub-DeleteEmptyFiles() 将FolderPath设置为字符串 将文件名设置为字符串 将ws设置为工作表 Application.ScreenUpdating=False FolderPath=“在此处输入文件夹路径” Filename=Dir(FolderPath&“*.xls*”) 文件名

我希望能够搜索包含.xls文件的文件夹,并从该文件夹中删除任何空文件。当我说空时,我的意思是文件中没有工作表,或者任何单元格中没有任何数据(如果工作表确实存在)。最好的方法是什么

代码:

Sub-DeleteEmptyFiles()
将FolderPath设置为字符串
将文件名设置为字符串
将ws设置为工作表
Application.ScreenUpdating=False
FolderPath=“在此处输入文件夹路径”
Filename=Dir(FolderPath&“*.xls*”)
文件名“”时执行此操作
工作簿。打开文件名:=文件夹路径和文件名,只读:=True
对于ActiveWorkbook.Sheets中的每个ws
'如果文件为空,请删除
下一个ws
工作簿(文件名)。关闭
Filename=Dir()
环
Application.ScreenUpdating=True
端接头
在文件名“”时执行
工作簿。打开文件名:=文件夹路径和文件名,只读:=True
对于ActiveWorkbook.Sheets中的每个ws
如果Application.WorksheetFunction.CountA(ws.Cells())大于0,则
MsgBox“工作表”&ws.Name&“内容数据”
退出
其他的
MsgBox“中无数据”&ws.Name
如果结束
下一个ws
工作簿(文件名)。关闭
Filename=Dir()
环

请尝试下一种方法:

Sub-DeleteEmptyFiles()
Dim FolderPath为字符串,文件名为字符串,wb为工作簿
将ws设置为工作表,将boolNotEmpty设置为布尔值
将以前的安全设置设置为MsoAutomationSecurity
FolderPath=“在此处输入文件夹路径”'注意在“\”中结束文件夹路径
'否则,生成文件全名并插入“\”
Filename=Dir(FolderPath&“*.xls*”)
文件名“”时执行此操作
previousSecurity=Application.AutomationSecurity
Application.AutomationSecurity=msoAutomationSecurityForceDisable
设置wb=Workbooks.Open(文件名:=FolderPath&Filename)
Application.AutomationSecurity=以前的安全性
boolNotEmpty=False
对于wb.工作表中的每个ws
如果工作表function.CountA(ws.UsedRange)>0,则
boolNotEmpty=True:退出
如果结束
下一个ws
wb.关闭错误
如果不是boolNotEmpty,则杀死FolderPath和Filename
Filename=Dir()
环
端接头

所有工作簿将至少有一张工作表除了@Warcupine所说的之外,您还可以找到每张工作表的下一个空单元格,并使用起始单元格作为范围,以查看其是否正确。应该会有帮助。@Mike在您接受答案后,对您接受的答案进行了一些重要的更新。此代码将显示一个消息框,说明文件是否有数据,但如果找不到数据,则不会终止文件。我允许您创建删除文件的代码,而不是msgBox。与此类似,Dim fso as New FileSystemObject,aFile as File if(fso.FileExists(“PathToFile”))然后aFile=fso.GetFile(“PathToFile”)aFile.Delete Endif@chrisneilsen:当然必须是
ws.UsedRange
!我在一个新的空白工作表上测试了代码行,但忘记了将其调整到迭代工作表中。禁用宏还不错。我也会这样做。即使不太可能(他应该提到,我认为)涉及到不同类型的工作表,我也会修改代码,使其只处理工作表。我认为,如果存在这样的非工作表,它们是有目的的。如果他还需要检查它们是否为空,他必须说明。。。谢谢编辑:改编。我冒昧地对你的更新做了一些修改。我希望你不要mind@chris当然不是。我错过了以前的安全声明,并给了它一个值。。。谢谢
Sub DeleteEmptyFiles()

Dim FolderPath As String
Dim Filename As String
Dim ws As Worksheet

Application.ScreenUpdating = False

FolderPath = "Enter the folder path here"
Filename = Dir(FolderPath & "*.xls*")

Do While Filename <> ""
    Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
    For Each ws In ActiveWorkbook.Sheets

    'DELETE FILE IF EMPTY

    Next ws
    
    Workbooks(Filename).Close
    Filename = Dir()

Loop

Application.ScreenUpdating = True

End Sub
Do While Filename <> ""
    Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
    For Each ws In ActiveWorkbook.Sheets

    If Application.WorksheetFunction.CountA(ws.Cells()) > 0 Then
        MsgBox "the Sheet " & ws.Name & " contents data "
         
        Exit For
    Else
      
     MsgBox "no data in " & ws.Name
    End If
   
    
    Next ws
    
    Workbooks(Filename).Close
    Filename = Dir()

Loop