基于条件语句删除工作表:VBA代码报“Object required”错误求助
解决VBA删除工作表时的“Object required”错误
首先说下你遇到的问题:代码里的Workbook.Worksheets(S.Name)是错误的根源——Workbook是VBA里的类名,不是你要操作的具体工作簿实例,VBA不知道你要删哪个工作簿里的表,所以抛出“Object required”错误。
另外,你提到是要操作另一个目标文件,但原来的代码遍历的是ThisWorkbook.Sheets(也就是当前运行宏的工作簿),这可能和你的需求不符,我一起帮你修正:
修正后的完整代码
Sub DeleteExportSheets() Dim targetWB As Workbook Dim S As Worksheet ' 打开目标文件(替换成你的目标文件路径) Set targetWB = Workbooks.Open("C:\你的目标文件路径.xlsx") ' 关闭删除警告,避免弹窗干扰 Application.DisplayAlerts = False ' 遍历目标文件的所有工作表 For Each S In targetWB.Sheets ' MsgBox S.Name ' 调试用,不需要可以注释掉 If S.Name = "For Export" Then S.Delete ' 直接删除找到的工作表对象,不用再通过集合查找 End If Next S ' 恢复警告提示,避免影响后续操作 Application.DisplayAlerts = True ' 可以选择保存并关闭目标文件 targetWB.Save targetWB.Close End Sub
关键修正点
- 删除操作直接用对象:
S已经是遍历到的工作表对象,直接调用S.Delete就可以,不需要再用Workbook.Worksheets(...)这种多余的引用,这就解决了“Object required”错误。 - 确保遍历目标文件:通过
Set targetWB = Workbooks.Open(...)获取目标工作簿实例,然后遍历targetWB.Sheets,而不是ThisWorkbook.Sheets,这样才是操作你打开的那个目标文件。 - 合理设置警告状态:把
Application.DisplayAlerts = False放在循环前,循环结束后改回True,避免后续Excel操作失去警告提示。
如果你的目标文件已经打开了,那可以去掉Workbooks.Open那一行,直接用Set targetWB = Workbooks("目标文件名.xlsx")来引用它。
内容的提问来源于stack exchange,提问作者Robert Kendall
相关产品推荐
相关产品推荐

