You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件语句删除工作表: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:30:22